diff --git a/iTrust/WebRoot/auth/patient/editApptPatient.jsp b/iTrust/WebRoot/auth/patient/editApptPatient.jsp
index d78f3ea6c08e4ed252bee5228c87e9561eae597b..499b6bfea423935448fde19f0b13687f1bda1b66 100644
--- a/iTrust/WebRoot/auth/patient/editApptPatient.jsp
+++ b/iTrust/WebRoot/auth/patient/editApptPatient.jsp
@@ -75,9 +75,6 @@
 	}
 	
 	boolean hideForm = false;
-	//boolean error = false;
-	//String hidden = "";
-
 	Date oldDate = new Date(original.getDate().getTime());
 	DateFormat dFormat = new SimpleDateFormat("MM/dd/yyyy");
 	DateFormat tFormat = new SimpleDateFormat("hhmma");
diff --git a/iTrust/test/edu/ncsu/csc/itrust/unit/action/CancelApptPatientActionTest.java b/iTrust/test/edu/ncsu/csc/itrust/unit/action/CancelApptPatientActionTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..d9ef05c115f35b6ede55c689767c61c51ad03432
--- /dev/null
+++ b/iTrust/test/edu/ncsu/csc/itrust/unit/action/CancelApptPatientActionTest.java
@@ -0,0 +1,199 @@
+package edu.ncsu.csc.itrust.unit.action;
+
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import edu.ncsu.csc.itrust.action.EditApptAction;
+import edu.ncsu.csc.itrust.action.ViewMyApptsAction;
+import edu.ncsu.csc.itrust.beans.ApptBean;
+import edu.ncsu.csc.itrust.dao.DAOFactory;
+import edu.ncsu.csc.itrust.exception.DBException;
+import edu.ncsu.csc.itrust.exception.FormValidationException;
+import edu.ncsu.csc.itrust.exception.ITrustException;
+import edu.ncsu.csc.itrust.unit.datagenerators.TestDataGenerator;
+import edu.ncsu.csc.itrust.unit.testutils.EvilDAOFactory;
+import edu.ncsu.csc.itrust.unit.testutils.TestDAOFactory;
+import junit.framework.TestCase;
+
+public class CancelApptPatientActionTest extends TestCase {
+    private EditApptAction editAction;
+    private EditApptAction evilAction;
+    private ViewMyApptsAction viewAction;
+    private DAOFactory factory;
+    private DAOFactory evilFactory;
+    private long hcpId = 9000000000L;
+
+    @Override
+    protected void setUp() throws Exception {
+        TestDataGenerator gen = new TestDataGenerator();
+        gen.clearAllTables();
+        gen.hcp0();
+        gen.patient42();
+        gen.appointment();
+        gen.appointmentType();
+        gen.uc22();
+
+        this.factory = TestDAOFactory.getTestInstance();
+        this.evilFactory = EvilDAOFactory.getEvilInstance();
+        this.evilAction = new EditApptAction(this.evilFactory, this.hcpId);
+        this.editAction = new EditApptAction(this.factory, this.hcpId);
+        this.viewAction = new ViewMyApptsAction(this.factory, this.hcpId);
+    }
+
+    public void testRemoveAppt() throws Exception {
+        List<ApptBean> appts = viewAction.getMyAppointments();
+        int size = appts.size();
+        assertEquals("Success: Appointment removed", editAction.removeAppt(appts.get(0)));
+        assertEquals(size - 1, viewAction.getMyAppointments().size());
+        editAction.removeAppt(appts.get(0));
+    }
+
+    public void testGetAppt() throws Exception, DBException {
+        List<ApptBean> appts = viewAction.getMyAppointments();
+        ApptBean b1 = appts.get(0);
+        ApptBean b2 = editAction.getAppt(b1.getApptID());
+        ApptBean b3 = new ApptBean();
+
+        b3 = editAction.getAppt(1234567891);
+
+        assertTrue(b3 == null);
+
+        assertEquals(b1.getApptID(), b2.getApptID());
+        assertEquals(b1.getApptType(), b2.getApptType());
+        assertEquals(b1.getComment(), b2.getComment());
+        assertEquals(b1.getHcp(), b2.getHcp());
+        assertEquals(b1.getPatient(), b2.getPatient());
+        assertEquals(b1.getClass(), b2.getClass());
+        assertEquals(b1.getDate(), b2.getDate());
+
+        try {
+
+            evilAction.getAppt(b1.getApptID());
+        } catch (DBException e) {
+            // success!
+        }
+
+        try {
+
+            evilAction.removeAppt(b1);
+        } catch (DBException e) {
+            // success!
+        }
+    }
+
+    /**
+     * testGetName
+     * 
+     * @throws ITrustException
+     */
+    public void testGetName() throws ITrustException {
+        assertEquals("Kelly Doctor", editAction.getName(hcpId));
+        assertEquals("Bad Horse", editAction.getName(42));
+    }
+
+    /**
+     * testEditAppt
+     * 
+     * @throws DBException
+     * @throws SQLException
+     * @throws FormValidationException
+     */
+    public void testEditAppt() throws DBException, SQLException, FormValidationException {
+        List<ApptBean> appts = viewAction.getAllMyAppointments();
+        ApptBean orig = appts.get(0);
+        ApptBean b = new ApptBean();
+        b.setApptID(orig.getApptID());
+        b.setDate(orig.getDate());
+        b.setApptType(orig.getApptType());
+        b.setHcp(orig.getHcp());
+        b.setPatient(orig.getPatient());
+        b.setComment("New comment!");
+
+        String s = editAction.editAppt(b, true);
+        assertTrue(s.contains("The scheduled date of this appointment"));
+        assertTrue(s.contains("has already passed"));
+
+        Date d = new Date();
+        boolean changed = false;
+        for (ApptBean aBean : appts) {
+            b = new ApptBean();
+            b.setApptID(aBean.getApptID());
+            b.setDate(aBean.getDate());
+            b.setApptType(aBean.getApptType());
+            b.setHcp(aBean.getHcp());
+            b.setPatient(aBean.getPatient());
+            b.setComment("New comment!");
+            d.setTime(aBean.getDate().getTime());
+            if (d.after(new Date())) {
+                s = editAction.editAppt(b, true);
+                assertEquals("Success: Appointment changed", s);
+                changed = true;
+                break;
+            }
+        }
+
+        if (!changed)
+            fail();
+    }
+
+    /**
+     * testEditApptConflict
+     * 
+     * @throws Exception
+     */
+    public void testEditApptConflict() throws Exception {
+
+        Calendar c = Calendar.getInstance();
+        c.add(Calendar.DATE, 12);
+        c.set(Calendar.HOUR, 9);
+        c.set(Calendar.AM_PM, Calendar.AM);
+        c.set(Calendar.MINUTE, 45);
+
+        List<ApptBean> appts = viewAction.getMyAppointments();
+        ApptBean orig = appts.get(0);
+        ApptBean b = new ApptBean();
+        b.setApptID(orig.getApptID());
+        b.setDate(new Timestamp(c.getTimeInMillis()));
+        b.setApptType(orig.getApptType());
+        b.setHcp(orig.getHcp());
+        b.setPatient(orig.getPatient());
+
+        String s = editAction.editAppt(b, false);
+        assertTrue(s.contains("conflict"));
+
+    }
+
+    /**
+     * testEvilFactory
+     * 
+     * @throws DBException
+     * @throws SQLException
+     * @throws FormValidationException
+     */
+    public void testEvilFactory() throws DBException, SQLException, FormValidationException {
+        this.editAction = new EditApptAction(EvilDAOFactory.getEvilInstance(), this.hcpId);
+        List<ApptBean> appts = viewAction.getMyAppointments();
+        ApptBean x = appts.get(0);
+        try {
+
+            editAction.editAppt(x, true);
+        } catch (DBException e) {
+            // this should pass if DBexception is thrown
+        }
+
+        try {
+
+            editAction.editAppt(x, true);
+        } catch (DBException e) {
+            // this should pass if DBexception is thrown
+        }
+        try {
+            assertEquals(null, editAction.getAppt(x.getApptID()));
+        } catch (DBException e) {
+            // this should pass if DBexception is thrown
+        }
+    }
+}
diff --git a/iTrust/test/edu/ncsu/csc/itrust/unit/action/EditApptPatientActionTest.java b/iTrust/test/edu/ncsu/csc/itrust/unit/action/EditApptPatientActionTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..311a51eb7aeec903c41dae8118d632438f7ca9cd
--- /dev/null
+++ b/iTrust/test/edu/ncsu/csc/itrust/unit/action/EditApptPatientActionTest.java
@@ -0,0 +1,191 @@
+package edu.ncsu.csc.itrust.unit.action;
+
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import edu.ncsu.csc.itrust.action.EditApptAction;
+import edu.ncsu.csc.itrust.action.ViewMyApptsAction;
+import edu.ncsu.csc.itrust.beans.ApptBean;
+import edu.ncsu.csc.itrust.dao.DAOFactory;
+import edu.ncsu.csc.itrust.exception.DBException;
+import edu.ncsu.csc.itrust.exception.FormValidationException;
+import edu.ncsu.csc.itrust.exception.ITrustException;
+import edu.ncsu.csc.itrust.unit.datagenerators.TestDataGenerator;
+import edu.ncsu.csc.itrust.unit.testutils.EvilDAOFactory;
+import edu.ncsu.csc.itrust.unit.testutils.TestDAOFactory;
+import junit.framework.TestCase;
+
+public class EditApptPatientActionTest extends TestCase {
+    private EditApptAction editAction;
+    private EditApptAction evilAction;
+    private ViewMyApptsAction viewAction;
+    private DAOFactory factory;
+    private DAOFactory evilFactory;
+    private long hcpId = 9000000000L;
+
+    @Override
+    protected void setUp() throws Exception {
+        TestDataGenerator gen = new TestDataGenerator();
+        gen.clearAllTables();
+        gen.hcp0();
+        gen.patient42();
+        gen.appointment();
+        gen.appointmentType();
+        gen.uc22();
+
+        this.factory = TestDAOFactory.getTestInstance();
+        this.evilFactory = EvilDAOFactory.getEvilInstance();
+        this.evilAction = new EditApptAction(this.evilFactory, this.hcpId);
+        this.editAction = new EditApptAction(this.factory, this.hcpId);
+        this.viewAction = new ViewMyApptsAction(this.factory, this.hcpId);
+    }
+
+    public void testGetAppt() throws Exception, DBException {
+        List<ApptBean> appts = viewAction.getMyAppointments();
+        ApptBean b1 = appts.get(0);
+        ApptBean b2 = editAction.getAppt(b1.getApptID());
+        ApptBean b3 = new ApptBean();
+
+        b3 = editAction.getAppt(1234567891);
+
+        assertTrue(b3 == null);
+
+        assertEquals(b1.getApptID(), b2.getApptID());
+        assertEquals(b1.getApptType(), b2.getApptType());
+        assertEquals(b1.getComment(), b2.getComment());
+        assertEquals(b1.getHcp(), b2.getHcp());
+        assertEquals(b1.getPatient(), b2.getPatient());
+        assertEquals(b1.getClass(), b2.getClass());
+        assertEquals(b1.getDate(), b2.getDate());
+
+        try {
+
+            evilAction.getAppt(b1.getApptID());
+        } catch (DBException e) {
+            // success!
+        }
+
+        try {
+
+            evilAction.removeAppt(b1);
+        } catch (DBException e) {
+            // success!
+        }
+    }
+
+    /**
+     * testGetName
+     * 
+     * @throws ITrustException
+     */
+    public void testGetName() throws ITrustException {
+        assertEquals("Kelly Doctor", editAction.getName(hcpId));
+        assertEquals("Bad Horse", editAction.getName(42));
+    }
+
+    /**
+     * testEditAppt
+     * 
+     * @throws DBException
+     * @throws SQLException
+     * @throws FormValidationException
+     */
+    public void testEditAppt() throws DBException, SQLException, FormValidationException {
+        List<ApptBean> appts = viewAction.getAllMyAppointments();
+        ApptBean orig = appts.get(0);
+        ApptBean b = new ApptBean();
+        b.setApptID(orig.getApptID());
+        b.setDate(orig.getDate());
+        b.setApptType(orig.getApptType());
+        b.setHcp(orig.getHcp());
+        b.setPatient(orig.getPatient());
+        b.setComment("New comment!");
+
+        String s = editAction.editAppt(b, true);
+        assertTrue(s.contains("The scheduled date of this appointment"));
+        assertTrue(s.contains("has already passed"));
+
+        Date d = new Date();
+        boolean changed = false;
+        for (ApptBean aBean : appts) {
+            b = new ApptBean();
+            b.setApptID(aBean.getApptID());
+            b.setDate(aBean.getDate());
+            b.setApptType(aBean.getApptType());
+            b.setHcp(aBean.getHcp());
+            b.setPatient(aBean.getPatient());
+            b.setComment("New comment!");
+            d.setTime(aBean.getDate().getTime());
+            if (d.after(new Date())) {
+                s = editAction.editAppt(b, true);
+                assertEquals("Success: Appointment changed", s);
+                changed = true;
+                break;
+            }
+        }
+
+        if (!changed)
+            fail();
+    }
+
+    /**
+     * testEditApptConflict
+     * 
+     * @throws Exception
+     */
+    public void testEditApptConflict() throws Exception {
+
+        Calendar c = Calendar.getInstance();
+        c.add(Calendar.DATE, 12);
+        c.set(Calendar.HOUR, 9);
+        c.set(Calendar.AM_PM, Calendar.AM);
+        c.set(Calendar.MINUTE, 45);
+
+        List<ApptBean> appts = viewAction.getMyAppointments();
+        ApptBean orig = appts.get(0);
+        ApptBean b = new ApptBean();
+        b.setApptID(orig.getApptID());
+        b.setDate(new Timestamp(c.getTimeInMillis()));
+        b.setApptType(orig.getApptType());
+        b.setHcp(orig.getHcp());
+        b.setPatient(orig.getPatient());
+
+        String s = editAction.editAppt(b, false);
+        assertTrue(s.contains("conflict"));
+
+    }
+
+    /**
+     * testEvilFactory
+     * 
+     * @throws DBException
+     * @throws SQLException
+     * @throws FormValidationException
+     */
+    public void testEvilFactory() throws DBException, SQLException, FormValidationException {
+        this.editAction = new EditApptAction(EvilDAOFactory.getEvilInstance(), this.hcpId);
+        List<ApptBean> appts = viewAction.getMyAppointments();
+        ApptBean x = appts.get(0);
+        try {
+
+            editAction.editAppt(x, true);
+        } catch (DBException e) {
+            // this should pass if DBexception is thrown
+        }
+
+        try {
+
+            editAction.editAppt(x, true);
+        } catch (DBException e) {
+            // this should pass if DBexception is thrown
+        }
+        try {
+            assertEquals(null, editAction.getAppt(x.getApptID()));
+        } catch (DBException e) {
+            // this should pass if DBexception is thrown
+        }
+    }
+}