Index: trunk/src/org/expeditee/encryption/items/EncryptionPermissionTriple.java
===================================================================
--- trunk/src/org/expeditee/encryption/items/EncryptionPermissionTriple.java	(revision 1374)
+++ trunk/src/org/expeditee/encryption/items/EncryptionPermissionTriple.java	(revision 1374)
@@ -0,0 +1,77 @@
+package org.expeditee.encryption.items;
+
+import java.util.List;
+
+import org.expeditee.settings.UserSettings;
+
+public class EncryptionPermissionTriple {
+
+	private UserAppliedEncryptionPermission ownerPermission;
+	private UserAppliedEncryptionPermission groupPermission;
+	private UserAppliedEncryptionPermission otherPermission;
+	
+	public EncryptionPermissionTriple(String permissionCode, 
+			UserAppliedEncryptionPermission defaultPermission) {
+		ownerPermission = defaultPermission;
+		groupPermission = defaultPermission;
+		otherPermission = defaultPermission;
+		
+		if (permissionCode != null) {
+			permissionCode = permissionCode.trim().toLowerCase();
+			if (permissionCode.length()  != 0) {
+				// If the permission code has a character at index 0, then it is the owner permission.
+				// If it does not then it will remain as the default permission passed to the function.
+				String ownerPermissionCode = permissionCode.charAt(0) + "";
+				this.ownerPermission = UserAppliedEncryptionPermission.getPermission(ownerPermissionCode, defaultPermission);
+				
+				// If the permission code has a character at index 1, then it is the group permission.
+				// If it does not then it will remain as the default permission passed to the function.
+				if (permissionCode.length() < 2) { return; }
+				String groupPermissionCode = permissionCode.charAt(1) + "";
+				this.groupPermission = UserAppliedEncryptionPermission.getPermission(groupPermissionCode, defaultPermission);
+				
+				if (permissionCode.length() < 3) { return; }
+				String otherPermissionCode = permissionCode.charAt(2) + "";
+				this.otherPermission = UserAppliedEncryptionPermission.getPermission(otherPermissionCode, defaultPermission);
+			}
+		}
+	}
+	
+	public EncryptionPermissionTriple(
+			UserAppliedEncryptionPermission ownerPermission,
+			UserAppliedEncryptionPermission groupPermission,
+			UserAppliedEncryptionPermission otherPermission) {
+		this.ownerPermission = ownerPermission;
+		this.groupPermission = groupPermission;
+		this.otherPermission = otherPermission;
+	}
+	
+	public EncryptionPermissionTriple(EncryptionPermissionTriple pt) {
+		this.ownerPermission = pt.ownerPermission;
+		this.groupPermission = pt.groupPermission;
+		this.otherPermission = pt.otherPermission;
+	}
+	
+	public UserAppliedEncryptionPermission getPermission(String ownerOfItem, List<String> group) {
+		if (UserSettings.UserName.get().equals(ownerOfItem)) {
+			return ownerPermission;
+		} else if (group.contains(UserSettings.UserName.get())) {
+			return groupPermission;
+		} else {
+			return otherPermission;
+		}
+	}
+	
+	public static EncryptionPermissionTriple convertString(String permissionCode) {
+		return new EncryptionPermissionTriple(permissionCode, UserAppliedEncryptionPermission.none);
+	}
+	
+	public String getCode() {
+		return Integer.toString(ownerPermission.getCode()) + Integer.toString(groupPermission.getCode()) + Integer.toString(otherPermission.getCode());
+	}
+	
+	@Override
+	public String toString() {
+		return ownerPermission.toString() + ":" + groupPermission.toString() + ":" + otherPermission.toString();
+	}
+}
Index: trunk/src/org/expeditee/encryption/items/UserAppliedEncryptionPermission.java
===================================================================
--- trunk/src/org/expeditee/encryption/items/UserAppliedEncryptionPermission.java	(revision 1374)
+++ trunk/src/org/expeditee/encryption/items/UserAppliedEncryptionPermission.java	(revision 1374)
@@ -0,0 +1,49 @@
+package org.expeditee.encryption.items;
+
+public enum UserAppliedEncryptionPermission {
+	none(0), homogeneous(1), hetrogeneous_limited(2), hetrogeneous(3), full(4);
+	
+	private final int val;
+	
+	private UserAppliedEncryptionPermission(int val) {
+		this.val = val;
+	}
+	
+	public static UserAppliedEncryptionPermission getPermission(
+			String permissionCode, 
+			UserAppliedEncryptionPermission defaultPermission) {
+		if (permissionCode == null) {
+			return defaultPermission;
+		}
+		
+		permissionCode = permissionCode.trim().toLowerCase();
+		if (permissionCode.length() == 0) {
+			return defaultPermission;
+		}
+		
+		try {
+			return resolve(Integer.parseInt(permissionCode), defaultPermission);
+		} catch (final NumberFormatException e) {
+			try {
+				return valueOf(permissionCode);
+			} catch (final Exception ex) {
+				return defaultPermission;
+			}
+		}
+	}
+	
+	public int getCode() { return val; }
+	
+	public String toString() { return this.name(); }
+	
+	private static UserAppliedEncryptionPermission resolve(
+			int val, 
+			UserAppliedEncryptionPermission defaultPermission) {
+		for (UserAppliedEncryptionPermission p : values()) {
+			if (p.val == val) {
+				return p;
+			}
+		}
+		return defaultPermission;
+	}
+}
Index: trunk/src/org/expeditee/gui/AttributeUtils.java
===================================================================
--- trunk/src/org/expeditee/gui/AttributeUtils.java	(revision 1373)
+++ trunk/src/org/expeditee/gui/AttributeUtils.java	(revision 1374)
@@ -28,4 +28,5 @@
 import org.expeditee.core.Font;
 import org.expeditee.core.Point;
+import org.expeditee.encryption.items.EncryptionPermissionTriple;
 import org.expeditee.io.Conversion;
 import org.expeditee.items.DotType;
@@ -147,4 +148,5 @@
 			Class<?>[] pPermission = { PermissionPair.class };
 			Class<?>[] pDotType = { DotType.class };
+			Class<?>[] pEncPermission = { EncryptionPermissionTriple.class };
 			
 			_IgnoreSet = new LinkedList<String>();
@@ -199,4 +201,6 @@
 			_FrameAttrib.put("EncryptionLabel", Frame.class.getMethod("getEncryptionLabel"), 
 												Frame.class.getMethod("setEncryptionLabel", pString));
+			_FrameAttrib.put("EncPermission", 	Frame.class.getMethod("getEncryptionPermission"), 
+												Frame.class.getMethod("setEncryptionPermission", pEncPermission));
 			
 			
@@ -206,4 +210,5 @@
 			_FrameAttrib.alias("p",         "permission");
 			_FrameAttrib.alias("enc", 		"encryptionlabel");
+			_FrameAttrib.alias("encp", 		"encpermission");
 			
 			
Index: trunk/src/org/expeditee/gui/Frame.java
===================================================================
--- trunk/src/org/expeditee/gui/Frame.java	(revision 1373)
+++ trunk/src/org/expeditee/gui/Frame.java	(revision 1374)
@@ -36,4 +36,5 @@
 import org.expeditee.core.Image;
 import org.expeditee.core.bounds.PolygonBounds;
+import org.expeditee.encryption.items.EncryptionPermissionTriple;
 import org.expeditee.gio.EcosystemManager;
 import org.expeditee.gio.gesture.Gesture;
@@ -100,4 +101,6 @@
 
 	private PermissionPair _permissionPair = null;
+	
+	private EncryptionPermissionTriple _encPermissionTriple = null;
 
 	private String _owner = null;
@@ -2771,4 +2774,12 @@
 		_encryptionLabel = label;
 	}
+	
+	public EncryptionPermissionTriple getEncryptionPermission() {
+		return _encPermissionTriple;
+	}
+	
+	public void setEncryptionPermission(EncryptionPermissionTriple p) {
+		_encPermissionTriple = p;
+	}
 
 	private static final class History {
Index: trunk/src/org/expeditee/io/Conversion.java
===================================================================
--- trunk/src/org/expeditee/io/Conversion.java	(revision 1373)
+++ trunk/src/org/expeditee/io/Conversion.java	(revision 1374)
@@ -522,5 +522,5 @@
 		value = value.trim();
 
-		if ((method.getParameterTypes()[0].isEnum()) || (name.matches("setPermission"))) {
+		if ((method.getParameterTypes()[0].isEnum()) || (name.matches("setPermission")) || (name.matches("setEncryptionPermission"))) {
 			Method convertString;
 			Object[] objects = new Object[1];
@@ -650,5 +650,5 @@
 		}
 
-		if ((method.getReturnType().isEnum()) || (name.equals("getPermission"))) {
+		if ((method.getReturnType().isEnum()) || (name.equals("getPermission")) || (name.equals("getEncryptionPermission"))) {
 			try {
 				return output.getClass().getMethod("getCode", new Class[] {})
Index: trunk/src/org/expeditee/io/DefaultFrameReader.java
===================================================================
--- trunk/src/org/expeditee/io/DefaultFrameReader.java	(revision 1373)
+++ trunk/src/org/expeditee/io/DefaultFrameReader.java	(revision 1374)
@@ -33,4 +33,5 @@
 import org.expeditee.core.Font;
 import org.expeditee.core.Point;
+import org.expeditee.encryption.items.EncryptionPermissionTriple;
 import org.expeditee.gui.Frame;
 import org.expeditee.items.Constraint;
@@ -70,4 +71,5 @@
 	protected static Class[] pPermission = { PermissionPair.class };
 	protected static Class[] pDotType = { DotType.class };
+	protected static Class[] pEncPermission = { EncryptionPermissionTriple.class };
 	
 	public DefaultFrameReader(){
@@ -93,4 +95,5 @@
 			_FrameTags.put('K', Frame.class.getMethod("setEncryptionLabel", pString));
 			_FrameTags.put('T', Frame.class.getMethod("addToData", pString));
+			_FrameTags.put('E', Frame.class.getMethod("setEncryptionPermission", pEncPermission));
 
 			// Note: As of 26/11/18 there are no unused letter item tags.  Use other characters.
Index: trunk/src/org/expeditee/io/DefaultFrameWriter.java
===================================================================
--- trunk/src/org/expeditee/io/DefaultFrameWriter.java	(revision 1373)
+++ trunk/src/org/expeditee/io/DefaultFrameWriter.java	(revision 1374)
@@ -82,4 +82,5 @@
 			_FrameTags.put('K', Frame.class.getMethod("getEncryptionLabel"));
 			_FrameTags.put('T', Frame.class.getMethod("getData"));
+			_FrameTags.put('E', Frame.class.getMethod("getEncryptionPermission"));
 			
 			// Note: As of 26/11/18 there are no unused letter item tags.  Use other characters.
