Add Printable Interface
diff --git a/src/seedu/addressbook/Main.java b/src/seedu/addressbook/Main.java
index dee2fff..f58e5cf 100644
--- a/src/seedu/addressbook/Main.java
+++ b/src/seedu/addressbook/Main.java
@@ -106,7 +106,9 @@
         try {
             command.setData(addressBook, lastShownList);
             CommandResult result = command.execute();
-            storage.save(addressBook);
+            if(command.isMutating()){
+                storage.save(addressBook);
+            }
             return result;
         } catch (Exception e) {
             ui.show(e.getMessage());
diff --git a/src/seedu/addressbook/commands/Command.java b/src/seedu/addressbook/commands/Command.java
index bfabc83..b0c202a 100644
--- a/src/seedu/addressbook/commands/Command.java
+++ b/src/seedu/addressbook/commands/Command.java
@@ -35,4 +35,8 @@
         this.addressBook = addressBook;
         this.relevantPersons = relevantPersons;
     }
+
+    public boolean isMutating(){
+        return true;
+    }
 }
diff --git a/src/seedu/addressbook/data/person/Address.java b/src/seedu/addressbook/data/person/Address.java
index 452685a..3d69f91 100644
--- a/src/seedu/addressbook/data/person/Address.java
+++ b/src/seedu/addressbook/data/person/Address.java
@@ -51,4 +51,8 @@
         return value.hashCode();
     }
 
+    @Override
+    public String getFullPrintableString() {
+        return " Address: " + value;
+    }
 }
\ No newline at end of file
diff --git a/src/seedu/addressbook/data/person/ContactDetail.java b/src/seedu/addressbook/data/person/ContactDetail.java
index 51ccbec..c442927 100644
--- a/src/seedu/addressbook/data/person/ContactDetail.java
+++ b/src/seedu/addressbook/data/person/ContactDetail.java
@@ -3,7 +3,7 @@
 /**
  * Represents a person's contact detail. Can be marked private for hiding self from display.
  */
-public abstract class ContactDetail {
+public abstract class ContactDetail implements Printable{
 
     private boolean isPrivate;
 
@@ -19,11 +19,11 @@
         return !isPrivate;
     }
 
-    public void makePrivate() {
-        isPrivate = true;
+    @Override
+    public String getPrintableString(){
+        return isPrivate ? "" : getFullPrintableString();
     }
 
-    public void makeVisible() {
-        isPrivate = false;
-    }
+    public abstract String getFullPrintableString();
+
 }
diff --git a/src/seedu/addressbook/data/person/Email.java b/src/seedu/addressbook/data/person/Email.java
index 8926a9e..583814e 100644
--- a/src/seedu/addressbook/data/person/Email.java
+++ b/src/seedu/addressbook/data/person/Email.java
@@ -54,4 +54,8 @@
     }
 
 
+    @Override
+    public String getFullPrintableString() {
+        return " Email: " + value;
+    }
 }
\ No newline at end of file
diff --git a/src/seedu/addressbook/data/person/Phone.java b/src/seedu/addressbook/data/person/Phone.java
index 0900a37..98b852a 100644
--- a/src/seedu/addressbook/data/person/Phone.java
+++ b/src/seedu/addressbook/data/person/Phone.java
@@ -52,4 +52,8 @@
         return value.hashCode();
     }
 
+    @Override
+    public String getFullPrintableString() {
+        return " Phone: " + value;
+    }
 }
diff --git a/src/seedu/addressbook/data/person/Printable.java b/src/seedu/addressbook/data/person/Printable.java
new file mode 100644
index 0000000..96768d0
--- /dev/null
+++ b/src/seedu/addressbook/data/person/Printable.java
@@ -0,0 +1,7 @@
+package seedu.addressbook.data.person;
+
+
+public interface Printable {
+
+    public String getPrintableString();
+}
diff --git a/src/seedu/addressbook/data/person/ReadOnlyPerson.java b/src/seedu/addressbook/data/person/ReadOnlyPerson.java
index 6cea1de..8c862bc 100644
--- a/src/seedu/addressbook/data/person/ReadOnlyPerson.java
+++ b/src/seedu/addressbook/data/person/ReadOnlyPerson.java
@@ -3,6 +3,8 @@
 import seedu.addressbook.data.tag.Tag;
 import seedu.addressbook.data.tag.UniqueTagList;
 
+import java.util.StringJoiner;
+
 /**
  * A read-only immutable interface for a Person in the addressbook.
  * Implementations should guarantee: details are present and not null, field values are validated.
@@ -67,19 +69,21 @@
     default String getAsTextHidePrivate() {
         final StringBuilder builder = new StringBuilder();
         builder.append(getName());
-        if (getPhone().isVisible()) {
-            builder.append(" Phone: ").append(getPhone());
-        }
-        if (getEmail().isVisible()) {
-            builder.append(" Email: ").append(getEmail());
-        }
-        if (getAddress().isVisible()) {
-            builder.append(" Address: ").append(getAddress());
-        }
+        builder.append(getPrintableString(getPhone(), getEmail(), getAddress()));
         builder.append(" Tags: ");
         for (Tag tag : getTags()) {
             builder.append(tag);
         }
         return builder.toString();
     }
+
+    default String getPrintableString(ContactDetail... printables){
+        StringBuilder builder = new StringBuilder();
+        for(ContactDetail c : printables){
+            if (c.isVisible()){
+                builder.append(c.getPrintableString());
+            }
+        }
+        return builder.toString();
+    }
 }