diff --git a/src/main/java/dotsandboxes/DotsAndBoxesGrid.java b/src/main/java/dotsandboxes/DotsAndBoxesGrid.java
index a9e7c5b6639e8a2a8728809d9b17c8d155baf9b6..f4f9b9949f3639f77d2a9d47239e403217e27f1f 100644
--- a/src/main/java/dotsandboxes/DotsAndBoxesGrid.java
+++ b/src/main/java/dotsandboxes/DotsAndBoxesGrid.java
@@ -112,7 +112,8 @@ public class DotsAndBoxesGrid {
 
         // A box is complete if the north and south horizontals and the east and west verticals have all been drawn.
         // FIXME: You'll need to fix this code (after writing a test first).
-        return true;
+        return (this.horizontals[x][y] && this.horizontals[x][y+1] && this.verticals[x][y] && this.verticals[x+1][y]);
+       
     }
 
     /** Tries to claim a box for a player. If the box is complete, sets the ownership and returns true. */
@@ -140,7 +141,9 @@ public class DotsAndBoxesGrid {
         }
 
         // FIXME: You need to throw an exception if the line was already drawn.
-
+        if (this.horizontals[x][y]) {
+            throw new IllegalStateException(String.format("horizontal line at [%d][%d] has been drawn already", x, y));
+        }
         this.horizontals[x][y] = true;
 
         // Try to claim the north or south boxes
@@ -171,7 +174,9 @@ public class DotsAndBoxesGrid {
         }
 
         // You need to throw an exception if the line was already drawn.
-
+        if (this.verticals[x][y]) {
+            throw new IllegalStateException(String.format("Vertical line at [%d][%d] has been drawn already", x, y));
+        }
         this.verticals[x][y] = true;
         // Try to claim the north or south boxes
         boolean claimE = claimBox(x, y, player);
diff --git a/src/test/java/dotsandboxes/DotsAndBoxesGridTest.java b/src/test/java/dotsandboxes/DotsAndBoxesGridTest.java
index 1946beda974d180686c65c0259a7b881e9a4eb5a..a3f8859528ae8ed64e97ddc3dff514f45d43c2fa 100644
--- a/src/test/java/dotsandboxes/DotsAndBoxesGridTest.java
+++ b/src/test/java/dotsandboxes/DotsAndBoxesGridTest.java
@@ -27,5 +27,37 @@ public class DotsAndBoxesGridTest {
         assertTrue(true);
     }
 
-    // FIXME: You need to write tests for the two known bugs in the code.
+   // FIXME: You need to write tests for the two known bugs in the code.
+   @Test
+   public void boxCompleteDetectsCompletedBoxes() {
+     // code to test that boxComplete returns true for boxes that *are complete* goes here 
+       DotsAndBoxesGrid case1 = new DotsAndBoxesGrid(5, 5, 2);
+       case1.drawHorizontal(0, 0, 0);
+       case1.drawVertical(0, 0, 1);
+       case1.drawHorizontal(0, 1, 0);
+       case1.drawVertical(1, 0, 1);
+       assertTrue(case1.boxComplete(0, 0));
+   }
+   @Test
+   public void boxCompleteDetectsIncompleteBoxes() {
+     // code to test that boxComplete returns false for boxes that *are not complete* goes here
+     DotsAndBoxesGrid case2 = new DotsAndBoxesGrid(5, 5, 2);
+       case2.drawHorizontal(0, 0, 0);
+       case2.drawVertical(0, 0, 1);
+       case2.drawHorizontal(0, 1, 0);
+       assertFalse(case2.boxComplete(0, 0));
+   }
+   @Test
+   public void drawMethodsDetectRedrawnLines() {
+     // code to test that drawHorizontal throws an exception if the line was already drawn goes here
+     DotsAndBoxesGrid case3 = new DotsAndBoxesGrid(5, 5, 2);
+     case3.drawVertical(0, 0, 1);
+      case3.drawHorizontal(0, 0, 1);
+      assertAll(
+        ()->assertThrows(IllegalStateException.class, ()-> case3.drawVertical(0, 0, 1), "No vertical line has been drawn"),
+        ()->assertThrows(IllegalStateException.class, ()-> case3.drawHorizontal(0, 0, 1), "No horizonal line has been drawn")
+        );
+     
+     
+   }
 }