diff --git a/iTrust/sql/data/deadPatient1.sql b/iTrust/sql/data/deadPatient1.sql
new file mode 100644
index 0000000000000000000000000000000000000000..cdd9eb006ba7eccacc2fcece03c7783f9d3ff37e
--- /dev/null
+++ b/iTrust/sql/data/deadPatient1.sql
@@ -0,0 +1,6 @@
+INSERT INTO patients (MID, Gender, DateOfDeath, CauseOfDeath) 
+VALUES (81,'Male','2019-07-01',84.50);
+
+
+INSERT INTO officevisits(id,HCPID,PatientID)
+VALUES (201,9000000000,81);
\ No newline at end of file
diff --git a/iTrust/sql/data/deadPatient10.sql b/iTrust/sql/data/deadPatient10.sql
new file mode 100644
index 0000000000000000000000000000000000000000..2660e9b5bea0dca612d5c66319375190ab77e842
--- /dev/null
+++ b/iTrust/sql/data/deadPatient10.sql
@@ -0,0 +1,6 @@
+INSERT INTO patients (MID, Gender, DateOfDeath, CauseOfDeath) 
+VALUES (90,'Male','2019-01-01',487.00);
+
+
+INSERT INTO officevisits(id,HCPID,PatientID)
+VALUES (210,9000000001,90);
\ No newline at end of file
diff --git a/iTrust/sql/data/deadPatient2.sql b/iTrust/sql/data/deadPatient2.sql
new file mode 100644
index 0000000000000000000000000000000000000000..1e6152991dd62b2fe25b3d1c0a53cc3399309cee
--- /dev/null
+++ b/iTrust/sql/data/deadPatient2.sql
@@ -0,0 +1,6 @@
+INSERT INTO patients (MID, Gender, DateOfDeath, CauseOfDeath) 
+VALUES (82,'Male','2018-07-01',11.40);
+
+
+INSERT INTO officevisits(id,HCPID,PatientID)
+VALUES (202,9000000000,82);
\ No newline at end of file
diff --git a/iTrust/sql/data/deadPatient3.sql b/iTrust/sql/data/deadPatient3.sql
new file mode 100644
index 0000000000000000000000000000000000000000..65a41cda06b9ecfd684d321e7d0fe7fbd42916d3
--- /dev/null
+++ b/iTrust/sql/data/deadPatient3.sql
@@ -0,0 +1,6 @@
+INSERT INTO patients (MID, Gender, DateOfDeath, CauseOfDeath) 
+VALUES (83,'Female','2018-07-01',11.40);
+
+
+INSERT INTO officevisits(id,HCPID,PatientID)
+VALUES (203,9000000000,83);
\ No newline at end of file
diff --git a/iTrust/sql/data/deadPatient4.sql b/iTrust/sql/data/deadPatient4.sql
new file mode 100644
index 0000000000000000000000000000000000000000..a26c7808bfe5ee3479d30eabd6c3093ab2b5b60b
--- /dev/null
+++ b/iTrust/sql/data/deadPatient4.sql
@@ -0,0 +1,6 @@
+INSERT INTO patients (MID, Gender, DateOfDeath, CauseOfDeath) 
+VALUES (84,'Male','2018-12-01',11.40);
+
+
+INSERT INTO officevisits(id,HCPID,PatientID)
+VALUES (204,9000000000,84);
\ No newline at end of file
diff --git a/iTrust/sql/data/deadPatient5.sql b/iTrust/sql/data/deadPatient5.sql
new file mode 100644
index 0000000000000000000000000000000000000000..4affb62687146145ec098dd6c740d949ae95850e
--- /dev/null
+++ b/iTrust/sql/data/deadPatient5.sql
@@ -0,0 +1,6 @@
+INSERT INTO patients (MID, Gender, DateOfDeath, CauseOfDeath) 
+VALUES (85,'Male','2020-01-01',84.50);
+
+
+INSERT INTO officevisits(id,HCPID,PatientID)
+VALUES (205,9000000000,85);
\ No newline at end of file
diff --git a/iTrust/sql/data/deadPatient6.sql b/iTrust/sql/data/deadPatient6.sql
new file mode 100644
index 0000000000000000000000000000000000000000..f0bf0ef203a855fafa9f02d7854ca987277d0d73
--- /dev/null
+++ b/iTrust/sql/data/deadPatient6.sql
@@ -0,0 +1,6 @@
+INSERT INTO patients (MID, Gender, DateOfDeath, CauseOfDeath) 
+VALUES (86,'Male','2018-12-01',487.00);
+
+
+INSERT INTO officevisits(id,HCPID,PatientID)
+VALUES (206,9000000000,86);
\ No newline at end of file
diff --git a/iTrust/sql/data/deadPatient7.sql b/iTrust/sql/data/deadPatient7.sql
new file mode 100644
index 0000000000000000000000000000000000000000..8e86cd2d97284749d9c28fc460acf555b1d4e95c
--- /dev/null
+++ b/iTrust/sql/data/deadPatient7.sql
@@ -0,0 +1,6 @@
+INSERT INTO patients (MID, Gender, DateOfDeath, CauseOfDeath) 
+VALUES (87,'Female','2019-12-01',487.00);
+
+
+INSERT INTO officevisits(id,HCPID,PatientID)
+VALUES (207,9000000001,87);
\ No newline at end of file
diff --git a/iTrust/sql/data/deadPatient8.sql b/iTrust/sql/data/deadPatient8.sql
new file mode 100644
index 0000000000000000000000000000000000000000..d2d67890dea4238ea0bc10268957fd23e3c6c3fb
--- /dev/null
+++ b/iTrust/sql/data/deadPatient8.sql
@@ -0,0 +1,6 @@
+INSERT INTO patients (MID, Gender, DateOfDeath, CauseOfDeath) 
+VALUES (88,'Female','2020-07-01',487.00);
+
+
+INSERT INTO officevisits(id,HCPID,PatientID)
+VALUES (208,9000000001,88);
\ No newline at end of file
diff --git a/iTrust/sql/data/deadPatient9.sql b/iTrust/sql/data/deadPatient9.sql
new file mode 100644
index 0000000000000000000000000000000000000000..84f08ea8683856d6fdf4f5d13d755d576ce8f744
--- /dev/null
+++ b/iTrust/sql/data/deadPatient9.sql
@@ -0,0 +1,6 @@
+INSERT INTO patients (MID, Gender, DateOfDeath, CauseOfDeath) 
+VALUES (89,'Male','2020-01-01',487.00);
+
+
+INSERT INTO officevisits(id,HCPID,PatientID)
+VALUES (209,9000000001,89);
\ No newline at end of file
diff --git a/iTrust/src/edu/ncsu/csc/itrust/dao/mysql/CauseOfDeathTrendsReportDAO.java b/iTrust/src/edu/ncsu/csc/itrust/dao/mysql/CauseOfDeathTrendsReportDAO.java
index de0652955c2fca3eb48e58b08bef9ee87dcad797..573aed57df4a9ad3e24dc931ba3596401d65f16f 100644
--- a/iTrust/src/edu/ncsu/csc/itrust/dao/mysql/CauseOfDeathTrendsReportDAO.java
+++ b/iTrust/src/edu/ncsu/csc/itrust/dao/mysql/CauseOfDeathTrendsReportDAO.java
@@ -5,7 +5,6 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Date;
-import java.util.Date;
 import java.util.List;
 import java.util.ArrayList;
 import edu.ncsu.csc.itrust.DBUtil;
@@ -43,10 +42,7 @@ public class CauseOfDeathTrendsReportDAO {
 			ResultSet rs = stmt.executeQuery();
 			while(rs.next()) {
 				Long patient = rs.getLong("PatientID");
-				if(!patient.isEmpty())
-				{
-					patients.add(patient);
-				}
+				patients.add(patient);
 			}
 			rs.close();
 		} catch (SQLException e) {
@@ -67,22 +63,29 @@ public class CauseOfDeathTrendsReportDAO {
 	* @return A java.util.List of TopTwoDeathsForHCP.
 	* @throws DBException
 	*/
-    public List<String> getTopTwoDeathsForHCP(long hcpMID, String gender, Date startDate, Date endDate) throws DBException {
+	public List<String> getTopTwoDeathsForHCP(long hcpMID, String gender, Date startDate, Date endDate) throws DBException {
 		Connection conn = null;
 		PreparedStatement stmt = null;
 		List<Long> patients = this.getPatientsForHCP(hcpMID);
 		List<String> causes = new ArrayList<String>();
+		String query = null;
 
 		try {
 			conn = factory.getConnection();
 
 			if(gender.equalsIgnoreCase("All")){
-				String query = "SELECT DISTINCT CauseOfDeath, COUNT(CauseOfDeath) FROM patients WHERE MID IN (";
+				query = "SELECT DISTINCT CauseOfDeath, COUNT(CauseOfDeath) FROM patients WHERE MID IN (";
 				for(int i = 0; i < patients.size(); i++)
 				{
-					query += patients.get(i) + ",";
+					if (i+1 == patients.size()){
+						query += patients.get(i);
+					}
+					else{
+						query += patients.get(i) + ",";
+					}
+					
 				}
-				query += ") AND DateOfDeath IS NOT NULL AND YEAR(?) >= YEAR(DateOfDeath) AND YEAR(?) <= YEAR(DateOfDeath)"
+				query += ") AND DateOfDeath IS NOT NULL AND YEAR(DateOfDeath) >= YEAR(?) AND YEAR(DateOfDeath) <= YEAR(?)" 
 				+ "GROUP BY CauseOfDeath ORDER BY COUNT(CauseOfDeath) DESC";
 				stmt = conn.prepareStatement(query);
 				stmt.setDate(1, startDate);
@@ -90,12 +93,17 @@ public class CauseOfDeathTrendsReportDAO {
 			}
 
 			else{
-				String query = "SELECT DISTINCT CauseOfDeath, COUNT(CauseOfDeath) FROM patients WHERE MID IN (";
+				query = "SELECT DISTINCT CauseOfDeath, COUNT(CauseOfDeath) FROM patients WHERE MID IN (";
 				for(int i = 0; i < patients.size(); i++)
 				{
-					query += patients.get(i) + ",";
+					if (i+1 == patients.size()){
+						query += patients.get(i);
+					}
+					else{
+						query += patients.get(i) + ",";
+					}
 				}
-				query += ") AND DateOfDeath IS NOT NULL AND Gender = ? AND YEAR(?) >= YEAR(DateOfDeath) AND YEAR(?) <= YEAR(DateOfDeath)"
+				query += ") AND DateOfDeath IS NOT NULL AND Gender = ? AND YEAR(DateOfDeath) >= YEAR(?) AND YEAR(DateOfDeath) <= YEAR(?)" 
 				+ "GROUP BY CauseOfDeath ORDER BY COUNT(CauseOfDeath) DESC";
 				stmt = conn.prepareStatement(query);
 				stmt.setString(1, gender);
@@ -106,21 +114,19 @@ public class CauseOfDeathTrendsReportDAO {
 			int count = 0;
 			while(rs.next() && count < 2) {
 				String cause = rs.getString("CauseOfDeath");
-				int deaths = rs.getString("COUNT(CauseOfDeath)");
-				if(!cause.isEmpty())
-				{
-					String name = this.getCodeName(cause);
-					causes.add("Name: " + name + ", Code: " + cause + ", Deaths: " + deaths);
-					count++;
-				}
+				String deaths = rs.getString("COUNT(CauseOfDeath)");
+				String name = this.getCodeName(cause);
+				causes.add("Name: " + name + ", Code: " + cause + ", Deaths: " + deaths);
+				count++;
 			}
 			rs.close();
+			stmt.close();
 		} catch (SQLException e) {
 			throw new DBException(e);
 		} finally {
 			DBUtil.closeConnection(conn, stmt);
+			return causes;
 		}
-		return causes;
 	}
 	
 	/**
@@ -136,20 +142,25 @@ public class CauseOfDeathTrendsReportDAO {
 		Connection conn = null;
 		PreparedStatement stmt = null;
 		List<String> causes = new ArrayList<String>();
+		String query = null;
 
 		try {
 			conn = factory.getConnection();
+
 			if(gender.equalsIgnoreCase("All")){
-				stmt = conn.prepareStatement("SELECT DISTINCT CauseOfDeath, COUNT(CauseOfDeath) FROM patients" 
-				+ "WHERE YEAR(?) >= YEAR(DateOfDeath) AND YEAR(?) <= YEAR(DateOfDeath)" 
-				+ "GROUP BY CauseOfDeath ORDER BY COUNT(CauseOfDeath) DESC");
+				query = "SELECT DISTINCT CauseOfDeath, COUNT(CauseOfDeath) FROM patients"
+				+ " WHERE DateOfDeath IS NOT NULL AND YEAR(DateOfDeath) >= YEAR(?) AND YEAR(DateOfDeath) <= YEAR(?)" 
+				+ "GROUP BY CauseOfDeath ORDER BY COUNT(CauseOfDeath) DESC";
+				stmt = conn.prepareStatement(query);
 				stmt.setDate(1, startDate);
 				stmt.setDate(2, endDate);
 			}
+
 			else{
-				stmt = conn.prepareStatement("SELECT DISTINCT CauseOfDeath, COUNT(CauseOfDeath) FROM patients" 
-				+ "WHERE Gender = ? AND YEAR(?) >= YEAR(DateOfDeath) AND YEAR(?) <= YEAR(DateOfDeath)" 
-				+ "GROUP BY CauseOfDeath ORDER BY COUNT(CauseOfDeath) DESC");
+				query = "SELECT DISTINCT CauseOfDeath, COUNT(CauseOfDeath) FROM patients"
+				+ " WHERE DateOfDeath IS NOT NULL AND Gender = ? AND YEAR(DateOfDeath) >= YEAR(?) AND YEAR(DateOfDeath) <= YEAR(?)" 
+				+ "GROUP BY CauseOfDeath ORDER BY COUNT(CauseOfDeath) DESC";
+				stmt = conn.prepareStatement(query);
 				stmt.setString(1, gender);
 				stmt.setDate(2, startDate);
 				stmt.setDate(3, endDate);
@@ -158,22 +169,20 @@ public class CauseOfDeathTrendsReportDAO {
 			int count = 0;
 			while(rs.next() && count < 2) {
 				String cause = rs.getString("CauseOfDeath");
-				int deaths = rs.getString("COUNT(CauseOfDeath)");
-				if(!cause.isEmpty())
-				{
-					String name = this.getCodeName(cause);
-					causes.add("Name: " + name + ", Code: " + cause + ", Deaths: " + deaths);
-					count++;
-				}
+				String deaths = rs.getString("COUNT(CauseOfDeath)");
+				String name = this.getCodeName(cause);
+				causes.add("Name: " + name + ", Code: " + cause + ", Deaths: " + deaths);
+				count++;
 			}
 			rs.close();
+			stmt.close();
 		} catch (SQLException e) {
 			throw new DBException(e);
 		} finally {
 			DBUtil.closeConnection(conn, stmt);
+			return causes;
 		}
-		return causes;
-    }
+	}
 
 	/**
 	* Returns the code name for a particular ICD-9CM code.
@@ -192,8 +201,16 @@ public class CauseOfDeathTrendsReportDAO {
 			stmt = conn.prepareStatement("SELECT Description FROM icdcodes WHERE Code = ?");
 			stmt.setString(1, code);
 			ResultSet rs = stmt.executeQuery();
-			result = rs.getString("Description");
-			rs.close();
+			if(rs.next()){
+				result = rs.getString("Description");
+				rs.close();
+				stmt.close();
+			}
+			else{
+				rs.close();
+				stmt.close();
+				return null;
+			}
 		} catch (SQLException e) {
 			throw new DBException(e);
 		} finally {
diff --git a/iTrust/test/edu/ncsu/csc/itrust/unit/dao/deaths/CauseOfDeathTrendsReportTest.java b/iTrust/test/edu/ncsu/csc/itrust/unit/dao/deaths/CauseOfDeathTrendsReportTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ad125da76af0361bae0aa29709973a86516476a
--- /dev/null
+++ b/iTrust/test/edu/ncsu/csc/itrust/unit/dao/deaths/CauseOfDeathTrendsReportTest.java
@@ -0,0 +1,107 @@
+package edu.ncsu.csc.itrust.unit.dao.CauseOfDeathTrendsReportDAO;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.sql.Date;
+
+import junit.framework.TestCase;
+import edu.ncsu.csc.itrust.dao.mysql.CauseOfDeathTrendsReportDAO;
+import edu.ncsu.csc.itrust.unit.datagenerators.TestDataGenerator;
+import edu.ncsu.csc.itrust.unit.testutils.TestDAOFactory;
+import edu.ncsu.csc.itrust.unit.testutils.EvilDAOFactory;
+import edu.ncsu.csc.itrust.exception.DBException;
+
+
+public class CauseOfDeathTrendsReportTest extends TestCase {
+    
+    private TestDataGenerator gen = new TestDataGenerator();
+    private CauseOfDeathTrendsReportDAO cod;
+
+    private CauseOfDeathTrendsReportDAO evilDAO = new CauseOfDeathTrendsReportDAO(EvilDAOFactory.getEvilInstance());
+    
+    @Override
+	protected void setUp() throws Exception {
+		gen = new TestDataGenerator();
+		gen.clearAllTables();
+		gen.deadPatient1();
+        gen.deadPatient2();
+        gen.deadPatient3();
+        gen.deadPatient4();
+        gen.deadPatient5();
+        gen.deadPatient6();
+        gen.deadPatient7();
+        gen.deadPatient8();
+        gen.deadPatient9();
+        gen.deadPatient10();
+        gen.icd9cmCodes();
+
+        cod = new CauseOfDeathTrendsReportDAO(TestDAOFactory.getTestInstance());
+    }
+    
+    public void testPatientsForHCPValid() throws Exception {
+        List<Long> deaths = cod.getPatientsForHCP(Long.parseLong("9000000000"));
+        assertEquals(6, deaths.size());
+        assertEquals(Long.valueOf(81), deaths.get(0));
+        assertEquals(Long.valueOf(82), deaths.get(1));
+        assertEquals(Long.valueOf(83), deaths.get(2));
+        assertEquals(Long.valueOf(84), deaths.get(3));
+        assertEquals(Long.valueOf(85), deaths.get(4));
+        assertEquals(Long.valueOf(86), deaths.get(5));
+    }
+
+    public void testPatientsForHCPException() throws Exception {
+		try {
+			evilDAO.getPatientsForHCP(Long.parseLong("0000000000"));
+			fail("DBException should have been thrown");
+		} catch (DBException e) {
+			assertEquals(EvilDAOFactory.MESSAGE, e.getSQLException().getMessage());
+		}
+	}
+    
+    public void testTopTwoDeathsForHCPValid() throws Exception {
+        List<String> deaths = cod.getTopTwoDeathsForHCP(Long.parseLong("9000000000"), "All", Date.valueOf("2018-01-01"), Date.valueOf("2020-12-31"));
+        assertEquals(2, deaths.size());
+        assertEquals("Name: Tuberculosis of the lung, Code: 11.40, Deaths: 3", deaths.get(0));
+        assertEquals("Name: Malaria, Code: 84.50, Deaths: 2", deaths.get(1));
+    }
+
+    public void testTopTwoDeathsForHCPMaleValid() throws Exception {
+        List<String> deaths = cod.getTopTwoDeathsForHCP(Long.parseLong("9000000000"), "Male", Date.valueOf("2018-01-01"), Date.valueOf("2020-12-31"));
+        assertEquals(2, deaths.size());
+        assertEquals("Name: Malaria, Code: 84.50, Deaths: 2", deaths.get(0));
+        assertEquals("Name: Tuberculosis of the lung, Code: 11.40, Deaths: 2", deaths.get(1));
+    }
+
+    public void testTopTwoDeathsForHCPException() throws Exception {
+		try {
+			evilDAO.getTopTwoDeathsForHCP(Long.parseLong("0000000000"), "All", Date.valueOf("2018-01-01"), Date.valueOf("2020-12-31"));
+			fail("DBException should have been thrown");
+		} catch (DBException e) {
+			assertEquals(EvilDAOFactory.MESSAGE, e.getSQLException().getMessage());
+		}
+	}
+
+    public void testTopTwoDeathsForAllValid() throws Exception {
+        List<String> deaths = cod.getTopTwoDeathsForAll("All", Date.valueOf("2018-01-01"), Date.valueOf("2020-12-31"));
+        assertEquals(2, deaths.size());
+        assertEquals("Name: Influenza, Code: 487.00, Deaths: 5", deaths.get(0));
+        assertEquals("Name: Tuberculosis of the lung, Code: 11.40, Deaths: 3", deaths.get(1));
+    }
+
+    public void testTopTwoDeathsForAllFemaleValid() throws Exception {
+        List<String> deaths = cod.getTopTwoDeathsForAll("Female", Date.valueOf("2018-01-01"), Date.valueOf("2020-12-31"));
+        assertEquals(2, deaths.size());
+        assertEquals("Name: Influenza, Code: 487.00, Deaths: 2", deaths.get(0));
+        assertEquals("Name: Tuberculosis of the lung, Code: 11.40, Deaths: 1", deaths.get(1));
+    }
+
+    public void testCodeNameExists() throws Exception {
+        String deaths = cod.getCodeName("84.50");
+        assertEquals("Malaria", deaths);
+    }
+
+    public void testCodeNameDoesNotExist() throws Exception {
+        String deaths = cod.getCodeName("8450");
+        assertEquals(null, deaths);
+    }
+}
\ No newline at end of file
diff --git a/iTrust/test/edu/ncsu/csc/itrust/unit/datagenerators/TestDataGenerator.java b/iTrust/test/edu/ncsu/csc/itrust/unit/datagenerators/TestDataGenerator.java
index 03037124a70bf63dceb07e8c4125466287497fdf..7b87da285e14337a936077abf901e73fdc154fb7 100644
--- a/iTrust/test/edu/ncsu/csc/itrust/unit/datagenerators/TestDataGenerator.java
+++ b/iTrust/test/edu/ncsu/csc/itrust/unit/datagenerators/TestDataGenerator.java
@@ -121,6 +121,46 @@ public class TestDataGenerator {
 				+ "/deadRecurringPatients.sql");
 	}
 
+	public void deadPatient1() throws FileNotFoundException, SQLException, IOException {
+		new DBBuilder(factory).executeSQLFile(DIR + "/deadPatient1.sql");
+	}
+	
+	public void deadPatient2() throws FileNotFoundException, SQLException, IOException {
+		new DBBuilder(factory).executeSQLFile(DIR + "/deadPatient2.sql");
+	}
+	
+	public void deadPatient3() throws FileNotFoundException, SQLException, IOException {
+		new DBBuilder(factory).executeSQLFile(DIR + "/deadPatient3.sql");
+	}
+	
+	public void deadPatient4() throws FileNotFoundException, SQLException, IOException {
+		new DBBuilder(factory).executeSQLFile(DIR + "/deadPatient4.sql");
+	}
+	
+	public void deadPatient5() throws FileNotFoundException, SQLException, IOException {
+		new DBBuilder(factory).executeSQLFile(DIR + "/deadPatient5.sql");
+	}
+	
+	public void deadPatient6() throws FileNotFoundException, SQLException, IOException {
+		new DBBuilder(factory).executeSQLFile(DIR + "/deadPatient6.sql");
+	}
+	
+	public void deadPatient7() throws FileNotFoundException, SQLException, IOException {
+		new DBBuilder(factory).executeSQLFile(DIR + "/deadPatient7.sql");
+	}
+	
+	public void deadPatient8() throws FileNotFoundException, SQLException, IOException {
+		new DBBuilder(factory).executeSQLFile(DIR + "/deadPatient8.sql");
+	}
+	
+	public void deadPatient9() throws FileNotFoundException, SQLException, IOException {
+		new DBBuilder(factory).executeSQLFile(DIR + "/deadPatient9.sql");
+	}
+	
+	public void deadPatient10() throws FileNotFoundException, SQLException, IOException {
+		new DBBuilder(factory).executeSQLFile(DIR + "/deadPatient10.sql");
+	}
+
 	public void diagnosedPatient_OldAndNewVisit() throws SQLException,
 			FileNotFoundException, IOException {
 		new DBBuilder(factory).executeSQLFile(DIR