diff --git a/.gitignore b/.gitignore
index 677f44df04d59d7064465a259dff9ce288c5d645..7d2cccd59399aeeb4da31ab13e76b7ab9e875199 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,6 @@ hs_err_pid*
 .project
 .classpath
 .DS_Store
+
+#maven
+target/
diff --git a/pom.xml b/pom.xml
index 0943bca91e428fdddd5f3610370f2c48a574ecb6..a102fe7cc9145a3e3d41c377a8fa496d13a2bbbb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,6 +48,17 @@
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>1.10</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>2.6.3</version>
+        </dependency>
 
     </dependencies>
 
diff --git a/src/main/java/cli/CommandLineInterface.java b/src/main/java/cli/CommandLineInterface.java
index 2663c8d9f25a7ca07a71bc3cb2b5cce29be5c606..979083f5e92920d29fa2039dc66f6f835ceb6763 100644
--- a/src/main/java/cli/CommandLineInterface.java
+++ b/src/main/java/cli/CommandLineInterface.java
@@ -10,7 +10,7 @@ public class CommandLineInterface {
         this.options = new Options();
         addOptions();
         HelpFormatter formatter = new HelpFormatter();
-        formatter.printHelp("to do", options); //todo
+//        formatter.printHelp("to do", options); //todo
     }
 
 
@@ -33,6 +33,28 @@ public class CommandLineInterface {
                 .build();
         uniqueCommands.addOption(createIssue);
 
+        Option showIssue = Option.builder()
+                .longOpt("show")
+                .hasArg()
+                .argName("ID")
+                .desc("show issue with ID")
+                .build();
+        uniqueCommands.addOption(showIssue);
+
+        Option ls = Option.builder()
+                .longOpt("ls")
+                .desc("list issues")
+                .build();
+        uniqueCommands.addOption(ls);
+
+        Option comment = Option.builder()
+                .longOpt("comment")
+                .hasArgs()
+                .argName("ID> <MESSAGE")
+                .numberOfArgs(2)
+                .desc("comment on issue with given id")
+                .build();
+        uniqueCommands.addOption(comment);
 
 //        Option createIssue = Option.builder()
 //                .longOpt("new")
@@ -58,17 +80,6 @@ public class CommandLineInterface {
                 .build();
         uniqueCommands.addOption(deleteIssue);
 
-        Option comment = Option.builder()
-                .longOpt("comment")
-                .desc("comment on issue with given id")
-                .build();
-        uniqueCommands.addOption(comment);
-
-        Option viewIssues = Option.builder()
-                .longOpt("view")
-                .desc("view on issue with given id")
-                .build();
-        uniqueCommands.addOption(viewIssues);
 
         options.addOptionGroup(uniqueCommands);
 
diff --git a/src/main/java/command/CommandComment.java b/src/main/java/command/CommandComment.java
new file mode 100644
index 0000000000000000000000000000000000000000..6948d4f1c114cde0862c551254ab36feb4ce6929
--- /dev/null
+++ b/src/main/java/command/CommandComment.java
@@ -0,0 +1,57 @@
+package command;
+
+import issueData.Comment;
+import issueData.IssueRepository;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
+
+import java.io.File;
+import java.io.IOException;
+
+public class CommandComment implements Command {
+
+    private String id;
+    private String comment;
+
+    public CommandComment(String id, String comment) {
+        this.id = id;
+        this.comment = comment;
+    }
+
+    @Override
+    public void execute() {
+        IssueRepository issueRepository = new IssueRepository();
+        String author;
+
+        try {
+            Repository repository = new FileRepositoryBuilder()
+                    .setGitDir(new File("/home/jack/Documents/testrepo/.issues"))
+                    .build();
+
+            Config config = repository.getConfig();
+
+            String name = config.getString("user", null, "name");
+            String email = config.getString("user", null, "email");
+
+            if (name == null || email == null) {
+                author = "Unknown";
+            } else {
+                author = "User " + name + " <" + email + ">";
+            }
+
+            issueRepository.getIssues().forEach(issue -> {
+                if (id.equals(issue.getOriginalHash())) {
+                    issue.addComment(new Comment(author, comment));
+                    issue.write();
+                    System.out.println("Comment added");
+                }
+            });
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+
+    }
+}
diff --git a/src/main/java/command/CommandCreate.java b/src/main/java/command/CommandCreate.java
index 063138139958dca2d26179fd3a9c658f93f33e6f..dd865462a5ff84ca96b3fc06bac9e33fae757c81 100644
--- a/src/main/java/command/CommandCreate.java
+++ b/src/main/java/command/CommandCreate.java
@@ -1,66 +1,54 @@
 package command;
 
 
-import issue.Issue;
+import issueData.Issue;
 import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.api.errors.GitAPIException;
-import org.eclipse.jgit.internal.storage.file.FileRepository;
+import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.Repository;
-import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
 
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.ObjectOutputStream;
 
 public class CommandCreate implements Command {
 
     private String title;
     private String description;
-//    private String path = "/home/jack/Documents/testrepo/";
-    private String path = "/home/jack/Documents/issue-worktree";
+    //    private String path = "/home/jack/Documents/testrepo/";
+    private String path = "/home/jack/Documents/testrepo/.issues";
 
     public CommandCreate(String[] args) {
         this.title = args[0];
         this.description = args[1];
     }
 
-    private void writeIssue(Issue issue) {
-
-        FileOutputStream fileOutputStream;
-        try {
-            fileOutputStream = new FileOutputStream(path + issue.getOriginalHash());
-            ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
-            objectOutputStream.writeObject(issue);
-            objectOutputStream.flush();
-            objectOutputStream.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
 
     private void commitAndPush(Issue issue) {
         try (Git git = Git.open(new File(path))) {
-
-            if (git.getRepository().getBranch().equals("issues")) {
-                writeIssue(issue);
-                git.add().addFilepattern(String.valueOf(issue.hashCode())).call();
-                git.commit().setMessage("issue created: " + issue.hashCode() + " - title: " + issue.getTitle()).call();
-            } else {
-                git.checkout().setName("issues").call();
-                writeIssue(issue);
-                git.add().addFilepattern(String.valueOf(issue.hashCode())).call();
-                git.commit().setMessage("issue created: " + issue.hashCode() + " - title: " + issue.getTitle()).call();
-            }
+            issue.setCreator(getAuthor(git.getRepository()));
+            issue.write();
+            git.add().addFilepattern(String.valueOf(issue.hashCode())).call();
+            git.commit().setMessage("issue created: " + issue.getOriginalHash() + " - title: " + issue.getTitle()).call();
 
         } catch (GitAPIException | IOException e) {
             e.printStackTrace();
         }
     }
 
+    private String getAuthor(Repository repository) {
+        Config config = repository.getConfig();
+        String name = config.getString("user", null, "name");
+        String email = config.getString("user", null, "email");
+        if (name == null || email == null) {
+            return "Unknown";
+        } else {
+            return "User " + name + " Email:" + email;
+        }
+    }
+
     public void execute() {
         Issue issue = new Issue(title, description);
         commitAndPush(issue);
+        System.out.println("Issue created");
     }
 }
diff --git a/src/main/java/command/CommandInit.java b/src/main/java/command/CommandInit.java
index 02c8f331b059ea0ca554283b82cbd9c01c258c9f..54236d3fdf3166c752eb90c1282f18ceed5e265c 100644
--- a/src/main/java/command/CommandInit.java
+++ b/src/main/java/command/CommandInit.java
@@ -3,91 +3,34 @@ package command;
 import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.api.errors.GitAPIException;
 
-import java.io.*;
-import java.util.Objects;
-import java.util.concurrent.Executors;
-import java.util.function.Consumer;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 
 public class CommandInit implements Command {
 
     private String path = "/home/jack/Documents/testrepo";
 
-
-    public void createWorkTree() throws IOException {
-        ProcessBuilder builder = new ProcessBuilder();
-        builder.command("/home/jack/Documents/ddit/src/main/resources/ignoreStream.sh", "sh", "-c");
-        builder.directory(new File(path));
-
-        Process process = builder.start();
-
-        StreamGobbler streamGobbler =
-                new StreamGobbler(process.getInputStream(), System.out::println);
-        Executors.newSingleThreadExecutor().submit(streamGobbler);
-        int exitCode = 0;
-        try {
-            exitCode = process.waitFor();
-        } catch (InterruptedException e) {
-            e.printStackTrace();
-        }
-        assert exitCode == 0;
-    }
-
     public void execute() {
         //problem: files not added to git obv cant be stashed, lost when change branch
+        String issueRepo = path + "/.issues";
 
-        File dir = new File(path);
-        try (Git git = Git.open(dir)) { //Newly initialized repositories have a peculiarity in that no branch has yet been created.
-//            RevCommit stash = git.stashCreate().call();
-            String branch = git.getRepository().getBranch();
-
-            git.checkout()
-                    .setCreateBranch(true)
-                    .setOrphan(true)
-                    .setName("issues")
+        try {
+            Files.createDirectories(Paths.get(issueRepo));
+            Git.init()
+                    .setDirectory(new File(issueRepo))
                     .call();
-
-            for (File file : Objects.requireNonNull(dir.listFiles())) {
-                if (!file.getName().equals(".git")) {
-                    file.delete();
-                }
-            }
-
+            Git git = Git.open(new File(issueRepo));
+            Files.createFile(Paths.get(issueRepo + "/.init"));
             git.add().setUpdate(true).addFilepattern(".").call();
-            git.commit().setMessage("initialise issue branch").call();
-
-            git.checkout().setName(branch).call();
-
-//            createWorkTree();
-//            git.stashApply().setStashRef(stash.getName()).call();
+            git.commit().setMessage("initial commit").call();
+            System.out.println("Issue repository created");
 
-        } catch (IOException e) {
-            System.out.println("Not a git repository - aborting operation");
-            e.printStackTrace();
-        } catch (GitAPIException e) {
+        } catch (IOException | GitAPIException e) {
             e.printStackTrace();
         }
 
-    }
-
-    private static class StreamGobbler implements Runnable {
-        private InputStream inputStream;
-        private Consumer<String> consumer;
 
-        public StreamGobbler(InputStream inputStream, Consumer<String> consumer) {
-            this.inputStream = inputStream;
-            this.consumer = consumer;
-        }
-
-        @Override
-        public void run() {
-            new BufferedReader(new InputStreamReader(inputStream)).lines().forEach(consumer);
-        }
     }
-}
-
-//    Ref headRef = git.getRepository().getRef( Constants.HEAD );
-//if( headRef == null || headRef.getObjectId() == null ) {
-//        // no commit yet
-//        }
-
-//        System.out.println(System.getProperty("user.dir"));
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/src/main/java/command/CommandLs.java b/src/main/java/command/CommandLs.java
new file mode 100644
index 0000000000000000000000000000000000000000..a4b9ad2ca947f3210f354b8bdbaa6ead3bdecf62
--- /dev/null
+++ b/src/main/java/command/CommandLs.java
@@ -0,0 +1,12 @@
+package command;
+
+import issueData.IssueRepository;
+
+public class CommandLs implements Command {
+
+    @Override
+    public void execute() {
+        IssueRepository issueRepository = new IssueRepository();
+        issueRepository.getIssues().forEach(System.out::println);
+    }
+}
diff --git a/src/main/java/command/CommandSelector.java b/src/main/java/command/CommandSelector.java
index 2aa0f5959348c64a2e28ab455a33413a3a3f548b..c0198a78cbd9dbbe2ca1918f5ed5cd919f87854d 100644
--- a/src/main/java/command/CommandSelector.java
+++ b/src/main/java/command/CommandSelector.java
@@ -23,16 +23,26 @@ public class CommandSelector {
                 command = createIssue(userInput.getOptionValues("new"));
             } else if (userInput.hasOption("init")) {
                 command = init();
+            } else if (userInput.hasOption("ls")) {
+                command = ls();
+            } else if (userInput.hasOption("show")) {
+                command = show(userInput.getOptionValue("show"));
+            } else if (userInput.hasOption("comment")) {
+                command = comment(userInput.getOptionValues("comment"));
             } else {
                 command = nullCommand();
             }
             command.execute();
 
         } catch (ParseException e) {
-            e.printStackTrace(); //todo
+            e.printStackTrace();
         }
     }
 
+    private Command comment(String[] args) {
+        return new CommandComment(args[0], args[1]);
+    }
+
     private Command init() {
         return new CommandInit();
     }
@@ -45,7 +55,12 @@ public class CommandSelector {
         return new CommandCreate(args);
     }
 
-    private Command pushIssue() {
-        return new CommandPush();
+    private Command ls() {
+        return new CommandLs();
     }
+
+    private Command show(String id) {
+        return new CommandShow(id);
+    }
+
 }
diff --git a/src/main/java/command/CommandShow.java b/src/main/java/command/CommandShow.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b1092a9a93c568d8ed5004bb837fd4800133f61
--- /dev/null
+++ b/src/main/java/command/CommandShow.java
@@ -0,0 +1,39 @@
+package command;
+
+import issueData.IssueRepository;
+
+public class CommandShow implements Command {
+
+    private String id;
+
+    public CommandShow(String id) {
+        this.id = id;
+    }
+
+    @Override
+    public void execute() {
+
+        IssueRepository repository = new IssueRepository();
+
+        repository.getIssues().forEach(issue -> {
+            if (issue.getOriginalHash().equals(id)) {
+                String status = issue.isopen() ? "Open" : "Closed";
+
+                System.out.println("Issue title: " + issue.getTitle() + "\n" +
+                        "Issue Description: " + issue.getDescription() + "\n" +
+                        "Status: " + status + "\n" +
+                        "Creator: " + issue.getCreator() + "\n" +
+                        "Last edited: " + issue.getEdited() + "\n" +
+                        "Creation time: " + issue.getCreationTime());
+
+                if (issue.getComments().isEmpty()) {
+                    System.out.println("\nNo comments on this issue");
+                } else {
+                    System.out.println("\nComments:\n");
+                    issue.getComments().forEach(comment -> System.out.println("Author: " + comment.getAuthor() + "\n" + comment.getMessage() + "\n"));
+                }
+
+            }
+        });
+    }
+}
diff --git a/src/main/java/issue/Issue.java b/src/main/java/issue/Issue.java
deleted file mode 100644
index 145e363dc4bcce7f250ee63cd01412c8b24a841e..0000000000000000000000000000000000000000
--- a/src/main/java/issue/Issue.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package issue;
-
-import java.io.Serializable;
-import java.util.Objects;
-
-public class Issue implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-    private String title;
-    private String description;
-    private String originalHash;
-    private long creationTime;
-    private long edited;
-
-
-    public Issue(String title, String description) {
-        this.title = title;
-        this.description = description;
-        long time = System.currentTimeMillis();
-        this.creationTime = time + 1;
-        this.edited = time + 1;
-        this.originalHash = String.valueOf(hashCode());
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-        edited();
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-        edited();
-    }
-
-    private void edited(){
-        edited = System.currentTimeMillis();
-    }
-
-    public String getTitle(){
-        return this.title;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-        Issue issue = (Issue) o;
-        return creationTime == issue.creationTime &&
-                Objects.equals(title, issue.title) &&
-                Objects.equals(description, issue.description);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(title, description, creationTime);
-    }
-
-    @Override
-    public String toString() {
-        return "Title: " + title + " Description: " + description;
-    }
-
-    public String getOriginalHash() {
-        return originalHash;
-    }
-}
diff --git a/src/main/java/issue/IssueHistory.java b/src/main/java/issue/IssueHistory.java
deleted file mode 100644
index 1e2de4be4fd39c3f011ffaa4a6e66efac6ac5864..0000000000000000000000000000000000000000
--- a/src/main/java/issue/IssueHistory.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package issue;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-public class IssueHistory implements Serializable {
-    private List<Issue> issueHistory;
-
-    public IssueHistory(){
-        this.issueHistory = new ArrayList<>();
-    }
-
-
-}
diff --git a/src/main/java/issueData/Comment.java b/src/main/java/issueData/Comment.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab18626587ff626f903c689c4aa62864135c37ee
--- /dev/null
+++ b/src/main/java/issueData/Comment.java
@@ -0,0 +1,71 @@
+package issueData;
+
+import org.apache.commons.codec.digest.DigestUtils;
+
+import java.util.Objects;
+
+public class Comment {
+
+    private String hash;
+    private String author;
+    private String message;
+    private long creationTime;
+
+    public Comment(String author, String message) {
+        this.author = author;
+        this.message = message;
+        this.creationTime = System.currentTimeMillis();
+        this.hash = DigestUtils.sha256Hex(author + message + creationTime);
+    }
+
+    public Comment() {
+    }
+
+    public String getHash() {
+        return hash;
+    }
+
+    public void setHash(String hash) {
+        this.hash = hash;
+    }
+
+    public String getAuthor() {
+        return author;
+    }
+
+    public void setAuthor(String author) {
+        this.author = author;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public long getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(long creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Comment comment = (Comment) o;
+        return creationTime == comment.creationTime &&
+                Objects.equals(hash, comment.hash) &&
+                Objects.equals(author, comment.author) &&
+                Objects.equals(message, comment.message);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(hash, author, message, creationTime);
+    }
+}
diff --git a/src/main/java/issueData/Issue.java b/src/main/java/issueData/Issue.java
new file mode 100644
index 0000000000000000000000000000000000000000..161e57d5c7227c7a5d5763bbbe8af1d7be75549e
--- /dev/null
+++ b/src/main/java/issueData/Issue.java
@@ -0,0 +1,130 @@
+package issueData;
+
+import org.apache.commons.codec.digest.DigestUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+public class Issue {
+
+    private String title;
+    private String description;
+    private String creator;
+    private String originalHash;
+    private List<Comment> comments;
+    private boolean status;
+    private long creationTime;
+    private long edited;
+
+    public Issue(String title, String description) {
+        this.title = title;
+        this.description = description;
+        this.status = true;
+        long time = System.currentTimeMillis();
+        this.creationTime = time + 1; //Lamport timestamps
+        this.edited = time + 1;
+        this.originalHash = DigestUtils.sha256Hex(title + description + creationTime);
+        this.comments = new ArrayList<>();
+    }
+
+    public Issue() {
+        comments = new ArrayList<>();
+    }
+
+    private void edited() {
+        edited = System.currentTimeMillis();
+    }
+
+    public long getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(long creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    public String getTitle() {
+        return this.title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getOriginalHash() {
+        return originalHash;
+    }
+
+    public void setOriginalHash(String originalHash) {
+        this.originalHash = originalHash;
+    }
+
+    public void addComment(Comment comment) {
+        comments.add(comment);
+    }
+
+    public List<Comment> getComments() {
+        return comments;
+    }
+
+    public long getEdited() {
+        return edited;
+    }
+
+    public void setEdited(long edited) {
+        this.edited = edited;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+
+    public boolean isopen() {
+        return status;
+    }
+
+    public void setStatus(boolean status) {
+        this.status = status;
+    }
+
+    public void write() {
+        IssueWriter writer = new IssueWriter(this);
+        writer.write();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Issue issue = (Issue) o;
+        return creationTime == issue.creationTime &&
+                Objects.equals(title, issue.title) &&
+                Objects.equals(description, issue.description) &&
+                Objects.equals(creator, issue.creator) &&
+                Objects.equals(originalHash, issue.originalHash);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(title, description, creator, originalHash, creationTime);
+    }
+
+    @Override
+    public String toString() {
+        return "Hash: " + originalHash + " Title: " + title;
+    }
+
+}
diff --git a/src/main/java/issueData/IssueRepository.java b/src/main/java/issueData/IssueRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..84fe889b38aa2c2e64449b92d6300320f1219e82
--- /dev/null
+++ b/src/main/java/issueData/IssueRepository.java
@@ -0,0 +1,75 @@
+package issueData;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+
+public class IssueRepository {
+    private List<Issue> issues;
+
+    public IssueRepository() {
+        this.issues = new ArrayList<>();
+        readAllIssues();
+    }
+
+    public List<Issue> getIssues() {
+        return issues;
+    }
+
+    private void readAllIssues() {
+        ObjectMapper mapper = new ObjectMapper();
+        File[] directories = new File("/home/jack/Documents/testrepo/.issues/").listFiles(File::isDirectory);
+
+        Arrays.stream(Objects.requireNonNull(directories)).forEach(issueDir -> {
+            if (issueDir.getName().equals(".git")) return;
+
+            try {
+                String originalHash = issueDir.getName();
+                String title = mapper.readValue(new File(issueDir.getAbsolutePath() + "/title"), String.class);
+                String description = mapper.readValue(new File(issueDir.getAbsolutePath() + "/description"), String.class);
+                String creator = mapper.readValue(new File(issueDir.getAbsolutePath() + "/creator"), String.class);
+                boolean status = mapper.readValue(new File(issueDir.getAbsolutePath() + "/status"), boolean.class);
+                long creationTime = mapper.readValue(new File(issueDir.getAbsolutePath() + "/creationTime"), long.class);
+                long edited = mapper.readValue(new File(issueDir.getAbsolutePath() + "/editedTime"), long.class);
+
+                Issue issue = new Issue();
+                issue.setTitle(title);
+                issue.setDescription(description);
+                issue.setCreator(creator);
+                issue.setOriginalHash(originalHash);
+                issue.setStatus(status);
+                issue.setCreationTime(creationTime);
+                issue.setEdited(edited);
+
+                String commentDirPath = "/home/jack/Documents/testrepo/.issues/" + issueDir.getName() + "/comments/";
+                File[] commentDirs = new File(commentDirPath).listFiles((File::isDirectory));
+
+                for (File commentDir : Objects.requireNonNull(commentDirs)) {
+                    Comment comment = new Comment();
+                    String commentHash = commentDir.getName();
+                    String author = mapper.readValue(new File(commentDirPath + commentDir.getName() + "/author"), String.class);
+                    String message = mapper.readValue(new File(commentDirPath + commentDir.getName() + "/message"), String.class);
+                    long commentTime = mapper.readValue(new File(commentDirPath + commentDir.getName() + "/creationTime"), long.class);
+
+                    comment.setHash(commentHash);
+                    comment.setAuthor(author);
+                    comment.setMessage(message);
+                    comment.setCreationTime(commentTime);
+
+                    issue.addComment(comment);
+                }
+
+                issues.add(issue);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        });
+    }
+
+
+}
diff --git a/src/main/java/issueData/IssueWriter.java b/src/main/java/issueData/IssueWriter.java
new file mode 100644
index 0000000000000000000000000000000000000000..02d9b3a9c8fb98b6e4797f130327c0f2c4f5c0bc
--- /dev/null
+++ b/src/main/java/issueData/IssueWriter.java
@@ -0,0 +1,50 @@
+package issueData;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class IssueWriter {
+
+    private Issue issue;
+
+    public IssueWriter(Issue issue) {
+        this.issue = issue;
+    }
+
+
+    public void write() {
+        String path = "/home/jack/Documents/testrepo/.issues/" + issue.getOriginalHash() + "/";
+        Path commentDir = Paths.get(path + "comments/");
+
+        try {
+            Files.createDirectories(commentDir);
+
+            ObjectMapper mapper = new ObjectMapper();
+
+            mapper.writeValue(new File(path + "title"), issue.getTitle());
+            mapper.writeValue(new File(path + "description"), issue.getDescription());
+            mapper.writeValue(new File(path + "creator"), issue.getCreator());
+            mapper.writeValue(new File(path + "status"), issue.isopen());
+            mapper.writeValue(new File(path + "creationTime"), issue.getCreationTime());
+            mapper.writeValue(new File(path + "editedTime"), issue.getEdited());
+
+            for (Comment comment : issue.getComments()) {
+                String commentPath = commentDir + "/" + comment.getHash() + "/";
+                Files.createDirectories(Paths.get(commentPath));
+                mapper.writeValue(new File(commentPath + "author"), comment.getAuthor());
+                mapper.writeValue(new File(commentPath + "message"), comment.getMessage());
+                mapper.writeValue(new File(commentPath + "creationTime"), comment.getCreationTime());
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
+}
diff --git a/src/main/java/jgit/JGit.java b/src/main/java/jgit/JGit.java
deleted file mode 100644
index efab01e29b798d2ab30b1ac76305e5d3c944ca1a..0000000000000000000000000000000000000000
--- a/src/main/java/jgit/JGit.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package jgit;
-
-public class JGit {
-
-
-}
diff --git a/src/test/java/CommandInitTest.java b/src/test/java/CommandInitTest.java
index 0de5b7e52b6807b81d72d2d021fadb122e042c91..3aa2a9ed3600c2ba403667f1f77576124c41d47a 100644
--- a/src/test/java/CommandInitTest.java
+++ b/src/test/java/CommandInitTest.java
@@ -11,8 +11,6 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
 class CommandInitTest {
 
     Path dir;