diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..019d1f6edd304dac6ff77c6d10a9aba0edea664a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,24 @@
+# SWEN90006 Assignment 2 2019
+
+Please see the assignment handout which contains all the essential
+information.
+
+Structure of this repository:
+
+* src/:        -  where the code for the C implementation of the passbook lives
+* src/pocs/:   -  where your PoCs live
+* fuzzer/:     -  where your fuzzer will live
+
+Pre-Included Scripts:
+
+* src/Makefile         - makefile for building the C implementation etc.
+* src/get_coverage.sh  - script to generate coverage reports
+
+Vulnerable Versions (you should put your security vulnerabilities in here):
+
+* src/passbook-vuln1.c -- src/passbook-vuln5.c
+
+Proofs of Concept (PoCs that you should provide for each vulnerability):
+
+* src/pocs/poc1.txt -- src/pocs/poc5.txt
+
diff --git a/fuzzer/Fuzzer.java b/fuzzer/Fuzzer.java
new file mode 100644
index 0000000000000000000000000000000000000000..9394bf8fd81a260984d87d9fe1aa3f3ef35fd4de
--- /dev/null
+++ b/fuzzer/Fuzzer.java
@@ -0,0 +1,38 @@
+import java.io.IOException;
+import java.io.FileOutputStream;
+import java.io.PrintWriter;
+
+
+/* a stub for your team's fuzzer */
+public class Fuzzer {
+
+    private static final String OUTPUT_FILE = "fuzz.txt";
+    
+    public static void main(String[] args) throws IOException {
+        System.out.println(Instruction.getBNF());
+        FileOutputStream out = null;
+        PrintWriter pw = null;
+        try {
+            out = new FileOutputStream(OUTPUT_FILE);
+            pw = new PrintWriter(out);
+            
+            /* We just print one instruction.
+               Hint: you might want to make use of the instruction
+               grammar which is effectively encoded in Instruction.java */
+            pw.println("list");
+            
+        }catch (Exception e){
+            e.printStackTrace(System.err);
+            System.exit(1);
+        }finally{
+            if (pw != null){
+                pw.flush();
+            }
+            if (out != null){
+                out.close();
+            }
+        }
+
+    }
+
+}
diff --git a/fuzzer/Instruction.java b/fuzzer/Instruction.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6bb0d021d540b21e9f3d7a8a533f12b5e63723e
--- /dev/null
+++ b/fuzzer/Instruction.java
@@ -0,0 +1,56 @@
+import java.util.Arrays;
+import java.util.ArrayList;
+
+public enum Instruction {
+    PUT("put",new OperandType[]{OperandType.STRING,OperandType.STRING,OperandType.STRING}),
+    GET("get",new OperandType[]{OperandType.STRING}),
+    REM("rem",new OperandType[]{OperandType.STRING}),
+    SAVE("save",new OperandType[]{OperandType.STRING,OperandType.STRING}),
+    LIST("list",new OperandType[]{}),
+    MASTERPW("masterpw",new OperandType[]{OperandType.STRING});
+
+    public static String getBNF(){
+        String grammar = "<INSTRUCTION> ::= \n";
+        Instruction[] INSTS = Instruction.values();
+        boolean firstInst = true;
+        for (Instruction inst : INSTS){
+            if (firstInst){
+                grammar += "      \"";
+                firstInst = false;
+            }else{
+                grammar += "    | \"";
+            }
+            grammar += inst.getOpcode() + "\"";
+            for (OperandType op : inst.getOperands()){
+                grammar += " <" + op.toString() + ">";
+            }
+            grammar += "\n";
+        }
+        return grammar;
+    }
+    
+    private final String opcode;
+    private final OperandType[] operands;
+
+    Instruction(String opcode, OperandType[] operands){
+        this.opcode = opcode;
+        this.operands = operands;
+    }
+
+    public String getOpcode(){
+        return opcode;
+    }
+    
+    public OperandType[] getOperands(){
+        return operands;
+    }
+
+    public String toString(){
+        String operandsString = "";
+        for (OperandType op : operands) {
+            operandsString += " " + op.toString();
+        }
+        return "\"" + opcode + "\"" + operandsString;
+    }
+    
+}
diff --git a/fuzzer/OperandType.java b/fuzzer/OperandType.java
new file mode 100644
index 0000000000000000000000000000000000000000..b7a95206616c4f975223042e92aea96910e2d2d6
--- /dev/null
+++ b/fuzzer/OperandType.java
@@ -0,0 +1,3 @@
+public enum OperandType {
+    STRING
+}
diff --git a/src/pocs/poc1.txt b/src/pocs/poc1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/pocs/poc2.txt b/src/pocs/poc2.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/pocs/poc3.txt b/src/pocs/poc3.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/pocs/poc4.txt b/src/pocs/poc4.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/pocs/poc5.txt b/src/pocs/poc5.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391