Index: trunk/src/org/expeditee/encryption/io/EncryptedExpWriter.java
===================================================================
--- trunk/src/org/expeditee/encryption/io/EncryptedExpWriter.java	(revision 1409)
+++ trunk/src/org/expeditee/encryption/io/EncryptedExpWriter.java	(revision 1410)
@@ -11,4 +11,5 @@
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Set;
 import java.util.function.Consumer;
 
@@ -135,4 +136,10 @@
 		LinkedHashMap<Character,Method> itemTags = new LinkedHashMap<Character, Method>(getItemTags());
 		LinkedHashMap<String,Method> itemTagsExt = new LinkedHashMap<String, Method>(getItemTagsExt());
+		
+		// Perform final update on surrogates to ensure inheritance works.
+		Set<Surrogate> surrogates = toWrite.getSurrogates();
+		for (Surrogate s: surrogates) {
+			s.toString();
+		}
 		
 		writeTag(toWrite, new Object[] {}, itemTags, 'S');
Index: trunk/src/org/expeditee/encryption/items/surrogates/Surrogate.java
===================================================================
--- trunk/src/org/expeditee/encryption/items/surrogates/Surrogate.java	(revision 1409)
+++ trunk/src/org/expeditee/encryption/items/surrogates/Surrogate.java	(revision 1410)
@@ -8,4 +8,5 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 
@@ -17,4 +18,6 @@
 
 public class Surrogate {
+	
+	private static List<Surrogate> surrogateCache = new ArrayList<Surrogate>();
 	
 	private static Map<String, Boolean> propertyInheritanceDefault = new HashMap<String, Boolean>();
@@ -40,4 +43,5 @@
 		this.surrogateItem = surrogateItem;
 		this.propertyInheritance = new HashMap<String, Boolean>(propertyInheritanceDefault);
+		surrogateCache.add(this);
 	}
 	
@@ -69,4 +73,5 @@
 			boolean propertyIsInherited = isPropertyIsInherited(itemTag + "");
 			if (propertyIsInherited) {
+				surrogateItem.getClassic().setEncryptionDetailForTag(itemTag + "", EncryptionDetail.UnencryptedOnSave);
 				continue;
 			}
@@ -120,5 +125,14 @@
 	}
 	
-	public static Surrogate forItem(Item item) {
+	public static Surrogate of(Item surrogate) {
+		Optional<Surrogate> s = surrogateCache.stream().filter(si -> si.getSurrogateItem() == surrogate).findAny();
+		if (s.isPresent()) {
+			return s.get();
+		} else {
+			return null;
+		}
+	}
+	
+	public static Surrogate forItem(Item item) {		
 		Item surrogateItem = item.copy();
 		surrogateItem.setID(item.getParent().getNextItemID());
Index: trunk/src/org/expeditee/gui/FrameGraphics.java
===================================================================
--- trunk/src/org/expeditee/gui/FrameGraphics.java	(revision 1409)
+++ trunk/src/org/expeditee/gui/FrameGraphics.java	(revision 1410)
@@ -32,4 +32,7 @@
 import org.expeditee.core.Image;
 import org.expeditee.core.bounds.PolygonBounds;
+import org.expeditee.encryption.items.surrogates.Label.LabelResult;
+import org.expeditee.encryption.items.surrogates.Label;
+import org.expeditee.encryption.items.surrogates.Surrogate;
 import org.expeditee.gio.EcosystemManager;
 import org.expeditee.gio.input.KBMInputEvent.Key;
@@ -454,4 +457,15 @@
 		if (i == null) {
 			return;
+		}
+		
+		String encryptionLabel = i.getEncryptionLabel();
+		if (encryptionLabel != null && encryptionLabel.length() > 0 && !i.isSurrogate()) {
+			LabelResult result = Label.resolveKey(encryptionLabel);
+			if (result != LabelResult.SuccessResolveLabelToKey) {
+				for(Surrogate s: i.getSurrogates()) {
+					PaintItem(s.getSurrogateItem());
+				}
+				return;
+			}
 		}
 
Index: trunk/src/org/expeditee/io/DefaultFrameWriter.java
===================================================================
--- trunk/src/org/expeditee/io/DefaultFrameWriter.java	(revision 1409)
+++ trunk/src/org/expeditee/io/DefaultFrameWriter.java	(revision 1410)
@@ -42,4 +42,62 @@
 		FrameWriter {
 
+	public static final String TAB_INDEX = "_ti";
+	public static final String SINGLE_LINE_ONLY = "_sl";
+	public static final String PLACEHOLDER = "_ph";
+	public static final String ENCRYPTION_LABEL = "_el";
+	public static final char MAGNETIZED_ITEM_BOTTOM = '/';
+	public static final char MAGNETIZED_ITEM_TOP = '^';
+	public static final char MAGNETIZED_ITEM_RIGHT = ']';
+	public static final char MAGNETIZED_ITEM_LEFT = '[';
+	public static final char PERMISSION = 'p';
+	public static final char LINK_HISTORY = 'B';
+	public static final char TOOLTIP = 'A';
+	public static final char CONSTRAINT_IDS = 'c';
+	public static final char LINE_IDS = 'l';
+	public static final char THICKNESS = 'h';
+	public static final char AUTO_WRAP_TO_SAVE = 'r';
+	public static final char JUSTIFICATION = 'k';
+	public static final char MIN_WIDTH_TO_SAVE = 'M';
+	public static final char WIDTH_TO_SAVE = 'w';
+	public static final char INITIAL_SPACING = 'm';
+	public static final char LETTER_SPACING = 'b';
+	public static final char WORD_SPACING = 'a';
+	public static final char FORMULA = 'J';
+	public static final char MASK = 'O';
+	public static final char SPACING = 't';
+	public static final char FONT = 'f';
+	public static final char FILLED = 'z';
+	public static final char DOT_TYPE = 'v';
+	public static final char ARROW = 'j';
+	public static final char LINE_PATTERN = 'g';
+	public static final char LINK_TEMPLATE = 'y';
+	public static final char LINK_FRAMESET = 'q';
+	public static final char LINK_MARK = 'n';
+	public static final char OWNER = 'o';
+	public static final char FILL_PATTERN = 'i';
+	public static final char ANCHOR_BOTTOM = 'I';
+	public static final char ANCHOR_TOP = 'N';
+	public static final char ANCHOR_RIGHT = 'H';
+	public static final char ANCHOR_LEFT = 'R';
+	public static final char GRADIENT_ANGLE = 'Q';
+	public static final char GRADIENT_COLOR = 'E';
+	public static final char FILL_COLOR = 'e';
+	public static final char HIGHLIGHT = 'u';
+	public static final char DATA = 'D';
+	public static final char ACTION_LEAVE_FRAME = 'Y';
+	public static final char ACTION_ENTER_FRAME = 'W';
+	public static final char ACTION_CURSOR_LEAVE = 'V';
+	public static final char ACTION_CURSOR_ENTER = 'U';
+	public static final char ACTION_MARK = 'x';
+	public static final char ACTION = 'X';
+	public static final char LINK = 'F';
+	public static final char TEXT = 'T';
+	public static final char POSITION = 'P';
+	public static final char BORDER_COLOR = 'K';
+	public static final char BACKGROUND_COLOR = 'G';
+	public static final char COLOR = 'd';
+	public static final char DATE_CREATED = 's';
+	public static final char TYPE_AND_ID = 'S';
+
 	protected String _filename = null;
 
@@ -86,78 +144,78 @@
 			
 			// Note: As of 26/11/18 there are no unused letter item tags.  Use other characters.
-			_ItemTags.put('S', Item.class.getMethod("getTypeAndID"));
-			_ItemTags.put('s', Item.class.getMethod("getDateCreated"));
-			_ItemTags.put('d', Item.class.getMethod("getColor"));
-			_ItemTags.put('G', Item.class.getMethod("getBackgroundColor"));
-			_ItemTags.put('K', Item.class.getMethod("getBorderColor"));
-
-			_ItemTags.put('P', Item.class.getMethod("getPosition"));
-			_ItemTags.put('T', Text.class.getMethod("getText"));
-			_ItemTags.put('F', Item.class.getMethod("getLink"));
-			_ItemTags.put('X', Item.class.getMethod("getAction"));
-			_ItemTags.put('x', Item.class.getMethod("getActionMark"));
-			_ItemTags.put('U', Item.class.getMethod("getActionCursorEnter"));
-			_ItemTags.put('V', Item.class.getMethod("getActionCursorLeave"));
-			_ItemTags.put('W', Item.class.getMethod("getActionEnterFrame"));
-			_ItemTags.put('Y', Item.class.getMethod("getActionLeaveFrame"));
-			_ItemTags.put('D', Item.class.getMethod("getData"));
-			_ItemTags.put('u', Item.class.getMethod("getHighlight"));
-			_ItemTags.put('e', Item.class.getMethod("getFillColor"));
-			_ItemTags.put('E', Item.class.getMethod("getGradientColor"));
-			_ItemTags.put('Q', Item.class.getMethod("getGradientAngle"));
-			
-			_ItemTags.put('R', Item.class.getMethod("getAnchorLeft"));
-			_ItemTags.put('H', Item.class.getMethod("getAnchorRight"));
-			_ItemTags.put('N', Item.class.getMethod("getAnchorTop"));
-			_ItemTags.put('I', Item.class.getMethod("getAnchorBottom"));
-
-			_ItemTags.put('i', Item.class.getMethod("getFillPattern"));
-			_ItemTags.put('o', Item.class.getMethod("getOwner"));
-			_ItemTags.put('n', Item.class.getMethod("getLinkMark"));
-			_ItemTags.put('q', Item.class.getMethod("getLinkFrameset"));
-			_ItemTags.put('y', Item.class.getMethod("getLinkTemplate"));
-			_ItemTags.put('g', Item.class.getMethod("getLinePattern"));
-
-			_ItemTags.put('j', Item.class.getMethod("getArrow"));
-			
-			_ItemTags.put('v', Item.class.getMethod("getDotType"));
-			_ItemTags.put('z', Item.class.getMethod("getFilled"));
-
-			_ItemTags.put('f', Text.class.getMethod("getFont"));
-			_ItemTags.put('t', Text.class.getMethod("getSpacing"));
-			
-			_ItemTags.put('O', Text.class.getMethod("getMask"));
+			_ItemTags.put(DefaultFrameWriter.TYPE_AND_ID, Item.class.getMethod("getTypeAndID"));
+			_ItemTags.put(DefaultFrameWriter.DATE_CREATED, Item.class.getMethod("getDateCreated"));
+			_ItemTags.put(DefaultFrameWriter.COLOR, Item.class.getMethod("getColor"));
+			_ItemTags.put(DefaultFrameWriter.BACKGROUND_COLOR, Item.class.getMethod("getBackgroundColor"));
+			_ItemTags.put(DefaultFrameWriter.BORDER_COLOR, Item.class.getMethod("getBorderColor"));
+
+			_ItemTags.put(DefaultFrameWriter.POSITION, Item.class.getMethod("getPosition"));
+			_ItemTags.put(DefaultFrameWriter.TEXT, Text.class.getMethod("getText"));
+			_ItemTags.put(DefaultFrameWriter.LINK, Item.class.getMethod("getLink"));
+			_ItemTags.put(DefaultFrameWriter.ACTION, Item.class.getMethod("getAction"));
+			_ItemTags.put(DefaultFrameWriter.ACTION_MARK, Item.class.getMethod("getActionMark"));
+			_ItemTags.put(DefaultFrameWriter.ACTION_CURSOR_ENTER, Item.class.getMethod("getActionCursorEnter"));
+			_ItemTags.put(DefaultFrameWriter.ACTION_CURSOR_LEAVE, Item.class.getMethod("getActionCursorLeave"));
+			_ItemTags.put(DefaultFrameWriter.ACTION_ENTER_FRAME, Item.class.getMethod("getActionEnterFrame"));
+			_ItemTags.put(DefaultFrameWriter.ACTION_LEAVE_FRAME, Item.class.getMethod("getActionLeaveFrame"));
+			_ItemTags.put(DefaultFrameWriter.DATA, Item.class.getMethod("getData"));
+			_ItemTags.put(DefaultFrameWriter.HIGHLIGHT, Item.class.getMethod("getHighlight"));
+			_ItemTags.put(DefaultFrameWriter.FILL_COLOR, Item.class.getMethod("getFillColor"));
+			_ItemTags.put(DefaultFrameWriter.GRADIENT_COLOR, Item.class.getMethod("getGradientColor"));
+			_ItemTags.put(DefaultFrameWriter.GRADIENT_ANGLE, Item.class.getMethod("getGradientAngle"));
+			
+			_ItemTags.put(DefaultFrameWriter.ANCHOR_LEFT, Item.class.getMethod("getAnchorLeft"));
+			_ItemTags.put(DefaultFrameWriter.ANCHOR_RIGHT, Item.class.getMethod("getAnchorRight"));
+			_ItemTags.put(DefaultFrameWriter.ANCHOR_TOP, Item.class.getMethod("getAnchorTop"));
+			_ItemTags.put(DefaultFrameWriter.ANCHOR_BOTTOM, Item.class.getMethod("getAnchorBottom"));
+
+			_ItemTags.put(DefaultFrameWriter.FILL_PATTERN, Item.class.getMethod("getFillPattern"));
+			_ItemTags.put(DefaultFrameWriter.OWNER, Item.class.getMethod("getOwner"));
+			_ItemTags.put(DefaultFrameWriter.LINK_MARK, Item.class.getMethod("getLinkMark"));
+			_ItemTags.put(DefaultFrameWriter.LINK_FRAMESET, Item.class.getMethod("getLinkFrameset"));
+			_ItemTags.put(DefaultFrameWriter.LINK_TEMPLATE, Item.class.getMethod("getLinkTemplate"));
+			_ItemTags.put(DefaultFrameWriter.LINE_PATTERN, Item.class.getMethod("getLinePattern"));
+
+			_ItemTags.put(DefaultFrameWriter.ARROW, Item.class.getMethod("getArrow"));
+			
+			_ItemTags.put(DefaultFrameWriter.DOT_TYPE, Item.class.getMethod("getDotType"));
+			_ItemTags.put(DefaultFrameWriter.FILLED, Item.class.getMethod("getFilled"));
+
+			_ItemTags.put(DefaultFrameWriter.FONT, Text.class.getMethod("getFont"));
+			_ItemTags.put(DefaultFrameWriter.SPACING, Text.class.getMethod("getSpacing"));
+			
+			_ItemTags.put(DefaultFrameWriter.MASK, Text.class.getMethod("getMask"));
 
 			// TODO set a boolean flag to indicate that the text is a formula
 			// Store the formula in the text property NOT the answer
-			_ItemTags.put('J', Item.class.getMethod("getFormula"));
-
-			_ItemTags.put('a', Text.class.getMethod("getWordSpacing"));
-			_ItemTags.put('b', Text.class.getMethod("getLetterSpacing"));
-			_ItemTags.put('m', Text.class.getMethod("getInitialSpacing"));
-			_ItemTags.put('w', Text.class.getMethod("getWidthToSave"));
-			_ItemTags.put('M', Text.class.getMethod("getMinWidthToSave"));
-			_ItemTags.put('k', Text.class.getMethod("getJustification"));
-			_ItemTags.put('r', Text.class.getMethod("getAutoWrapToSave"));
-
-			_ItemTags.put('h', Item.class.getMethod("getThickness"));
-			_ItemTags.put('l', Item.class.getMethod("getLineIDs"));
-			_ItemTags.put('c', Item.class.getMethod("getConstraintIDs"));
-			
-			_ItemTags.put('A', Item.class.getMethod("getTooltip"));
-			_ItemTags.put('B', Item.class.getMethod("getLinkHistory"));
-			
-			_ItemTags.put('p', Item.class.getMethod("getPermission"));
-
-			_ItemTags.put('[', Item.class.getMethod("getMagnetizedItemLeft"));
-			_ItemTags.put(']', Item.class.getMethod("getMagnetizedItemRight"));
-			_ItemTags.put('^', Item.class.getMethod("getMagnetizedItemTop"));
-			_ItemTags.put('/', Item.class.getMethod("getMagnetizedItemBottom"));
-			
-			_ItemTagsExt.put("_el", Item.class.getMethod("getEncryptionLabel"));
-			
-			_ItemTagsExt.put("_ph", Text.class.getMethod("getPlaceholder"));
-			_ItemTagsExt.put("_sl", Text.class.getMethod("isSingleLineOnly"));
-			_ItemTagsExt.put("_ti", Text.class.getMethod("getTabIndex"));
+			_ItemTags.put(DefaultFrameWriter.FORMULA, Item.class.getMethod("getFormula"));
+
+			_ItemTags.put(DefaultFrameWriter.WORD_SPACING, Text.class.getMethod("getWordSpacing"));
+			_ItemTags.put(DefaultFrameWriter.LETTER_SPACING, Text.class.getMethod("getLetterSpacing"));
+			_ItemTags.put(DefaultFrameWriter.INITIAL_SPACING, Text.class.getMethod("getInitialSpacing"));
+			_ItemTags.put(DefaultFrameWriter.WIDTH_TO_SAVE, Text.class.getMethod("getWidthToSave"));
+			_ItemTags.put(DefaultFrameWriter.MIN_WIDTH_TO_SAVE, Text.class.getMethod("getMinWidthToSave"));
+			_ItemTags.put(DefaultFrameWriter.JUSTIFICATION, Text.class.getMethod("getJustification"));
+			_ItemTags.put(DefaultFrameWriter.AUTO_WRAP_TO_SAVE, Text.class.getMethod("getAutoWrapToSave"));
+
+			_ItemTags.put(DefaultFrameWriter.THICKNESS, Item.class.getMethod("getThickness"));
+			_ItemTags.put(DefaultFrameWriter.LINE_IDS, Item.class.getMethod("getLineIDs"));
+			_ItemTags.put(DefaultFrameWriter.CONSTRAINT_IDS, Item.class.getMethod("getConstraintIDs"));
+			
+			_ItemTags.put(DefaultFrameWriter.TOOLTIP, Item.class.getMethod("getTooltip"));
+			_ItemTags.put(DefaultFrameWriter.LINK_HISTORY, Item.class.getMethod("getLinkHistory"));
+			
+			_ItemTags.put(DefaultFrameWriter.PERMISSION, Item.class.getMethod("getPermission"));
+
+			_ItemTags.put(DefaultFrameWriter.MAGNETIZED_ITEM_LEFT, Item.class.getMethod("getMagnetizedItemLeft"));
+			_ItemTags.put(DefaultFrameWriter.MAGNETIZED_ITEM_RIGHT, Item.class.getMethod("getMagnetizedItemRight"));
+			_ItemTags.put(DefaultFrameWriter.MAGNETIZED_ITEM_TOP, Item.class.getMethod("getMagnetizedItemTop"));
+			_ItemTags.put(DefaultFrameWriter.MAGNETIZED_ITEM_BOTTOM, Item.class.getMethod("getMagnetizedItemBottom"));
+			
+			_ItemTagsExt.put(DefaultFrameWriter.ENCRYPTION_LABEL, Item.class.getMethod("getEncryptionLabel"));
+			
+			_ItemTagsExt.put(DefaultFrameWriter.PLACEHOLDER, Text.class.getMethod("getPlaceholder"));
+			_ItemTagsExt.put(DefaultFrameWriter.SINGLE_LINE_ONLY, Text.class.getMethod("isSingleLineOnly"));
+			_ItemTagsExt.put(DefaultFrameWriter.TAB_INDEX, Text.class.getMethod("getTabIndex"));
 		} catch (Exception e) {
 			e.printStackTrace();
Index: trunk/src/org/expeditee/items/Item.java
===================================================================
--- trunk/src/org/expeditee/items/Item.java	(revision 1409)
+++ trunk/src/org/expeditee/items/Item.java	(revision 1410)
@@ -418,5 +418,11 @@
 
 	public DotType getDotType() {
-		return _type;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.DOT_TYPE + "")) {
+			return this.getClassic().getDotType();
+		} else {
+			return _type;
+		}
 	}
 
@@ -430,5 +436,11 @@
 
 	public boolean getFilled() {
-		return _filled;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.FILLED + "")) {
+			return this.getClassic().getFilled();
+		} else {
+			return _filled;
+		}
 	}
 
@@ -457,5 +469,11 @@
 	 */
 	public double getGradientAngle() {
-		return _gradientAngle;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.GRADIENT_ANGLE + "")) {
+			return this.getClassic().getGradientAngle();
+		} else {
+			return _gradientAngle;
+		}
 	}
 
@@ -513,5 +531,11 @@
 	
 	public PermissionTriple getPermission() {
-		return _permissionTriple;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.PERMISSION + "")) {
+			return this.getClassic().getPermission();
+		} else {
+			return _permissionTriple;
+		}
 	}
 
@@ -659,29 +683,71 @@
 	 */
 	public List<String> getAction()	{
-		return _actions;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ACTION + "")) {
+			return this.getClassic().getAction();
+		} else {
+			return _actions;
+		}
 	}
 
 	public List<String> getData() {
-		return _data.getData();
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.DATA + "")) {
+			return this.getClassic().getData();
+		} else {
+			return _data.getData();
+		}
 	}
 
 	public List<String> getActionCursorEnter() {
-		return _actionCursorEnter;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ACTION_CURSOR_ENTER + "")) {
+			return this.getClassic().getActionCursorEnter();
+		} else {
+			return _actionCursorEnter;
+		}
 	}
 
 	public List<String> getActionCursorLeave() {
-		return _actionCursorLeave;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ACTION_CURSOR_LEAVE + "")) {
+			return this.getClassic().getActionCursorLeave();
+		} else {
+			return _actionCursorLeave;
+		}
 	}
 
 	public List<String> getActionEnterFrame() {
-		return _actionEnterFrame;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ACTION_ENTER_FRAME + "")) {
+			return this.getClassic().getActionEnterFrame();
+		} else {
+			return _actionEnterFrame;
+		}
 	}
 
 	public List<String> getActionLeaveFrame() {
-		return _actionLeaveFrame;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ACTION_LEAVE_FRAME + "")) {
+			return this.getClassic().getActionLeaveFrame();
+		} else {
+			return _actionLeaveFrame;
+		}
 	}
 
 	public boolean getActionMark() {
-		return _actionMark;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ACTION_MARK + "")) {
+			return this.getClassic().getActionMark();
+		} else {
+			return _actionMark;
+		}
 	}
 
@@ -703,14 +769,19 @@
 	}*/
 
-	public String getArrow()
-	{
-		if (!hasVisibleArrow())
-			return null;
-
-		String ratio = "" + getArrowheadRatio();
-		if (ratio.length() - ratio.indexOf(".") > 2)
-			ratio = ratio.substring(0, ratio.indexOf(".") + 3);
-
-		return getArrowheadLength() + " " + ratio + " " + getArrowheadNibPerc();
+	public String getArrow() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ARROW + "")) {
+			return this.getClassic().getArrow();
+		} else {
+			if (!hasVisibleArrow())
+				return null;
+
+			String ratio = "" + getArrowheadRatio();
+			if (ratio.length() - ratio.indexOf(".") > 2)
+				ratio = ratio.substring(0, ratio.indexOf(".") + 3);
+
+			return getArrowheadLength() + " " + ratio + " " + getArrowheadNibPerc();
+		}
 	}
 
@@ -735,12 +806,22 @@
 	}
 	
-	public Colour getBackgroundColor()
-	{
-		return _backgroundColour;
-	}
-
-	public Colour getBorderColor()
-	{
-		return _colorBorder;
+	public Colour getBackgroundColor() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.BACKGROUND_COLOR + "")) {
+			return this.getClassic().getBackgroundColor();
+		} else {
+			return _backgroundColour;
+		}
+	}
+
+	public Colour getBorderColor() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.TYPE_AND_ID + "")) {
+			return this.getClassic().getBorderColor();
+		} else {
+			return _colorBorder;
+		}
 	}
 
@@ -814,7 +895,12 @@
 	}
 
-	public Colour getColor()
-	{
-		return _foregroundColour;
+	public Colour getColor() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.COLOR + "")) {
+			return this.getClassic().getColor();
+		} else {
+			return _foregroundColour;
+		}
 	}
 
@@ -828,15 +914,20 @@
 	}
 
-	public String getConstraintIDs()
-	{
-		if (_constraints == null || _constraints.size() == 0)
-			return null;
-
-		String cons = "";
-
-		for (Constraint c : _constraints)
-			cons += c.getID() + " ";
-
-		return cons.trim();
+	public String getConstraintIDs() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.CONSTRAINT_IDS + "")) {
+			return this.getClassic().getConstraintIDs();
+		} else {
+			if (_constraints == null || _constraints.size() == 0)
+				return null;
+
+			String cons = "";
+
+			for (Constraint c : _constraints)
+				cons += c.getID() + " ";
+
+			return cons.trim();
+		}
 	}
 
@@ -862,17 +953,32 @@
 	}
 
-	public String getDateCreated()
-	{
-		return _creationDate;
-	}
-
-	public Colour getFillColor()
-	{
-		return _fillColour;
-	}
-
-	public String getFillPattern()
-	{
-		return _fillPattern;
+	public String getDateCreated() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.DATE_CREATED + "")) {
+			return this.getClassic().getDateCreated();
+		} else {
+			return _creationDate;
+		}
+	}
+
+	public Colour getFillColor() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.FILL_COLOR + "")) {
+			return this.getClassic().getFillColor();
+		} else {
+			return _fillColour;
+		}
+	}
+
+	public String getFillPattern() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.FILL_PATTERN + "")) {
+			return this.getClassic().getFillPattern();
+		} else {
+			return _fillPattern;
+		}
 	}
 
@@ -890,7 +996,12 @@
 	 * @return The value of <code>_highlight</code>.
 	 */
-	public boolean getHighlight()
-	{
-		return _highlight;
+	public boolean getHighlight() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.HIGHLIGHT + "")) {
+			return this.getClassic().getHighlight();
+		} else {
+			return _highlight;
+		}
 	}
 
@@ -919,21 +1030,31 @@
 	 * @return The list of Line IDs that this point is part of.
 	 */
-	public String getLineIDs()
-	{
-		String lineID = null;
-
-		if (_lines.size() > 0) {
-			lineID = "" + _lines.get(0).getID();
-
-			for (int i = 1; i < _lines.size(); i++)
-				lineID += " " + _lines.get(i).getID();
-		}
-
-		return lineID;
-	}
-
-	public int[] getLinePattern()
-	{
-		return _linePattern;
+	public String getLineIDs() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.LINE_IDS + "")) {
+			return this.getClassic().getLineIDs();
+		} else {
+			String lineID = null;
+
+			if (_lines.size() > 0) {
+				lineID = "" + _lines.get(0).getID();
+
+				for (int i = 1; i < _lines.size(); i++)
+					lineID += " " + _lines.get(i).getID();
+			}
+
+			return lineID;
+		}
+	}
+
+	public int[] getLinePattern() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.LINE_PATTERN + "")) {
+			return this.getClassic().getLinePattern();
+		} else {
+			return _linePattern;
+		}
 	}
 
@@ -956,12 +1077,22 @@
 	 *         this Item does not link to anything.
 	 */
-	public String getLink()
-	{
-		return _link;
-	}
-
-	public String getFormula()
-	{
-		return _formula;
+	public String getLink()	{
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.LINK + "")) {
+			return this.getClassic().getLink();
+		} else {
+			return _link;
+		}
+	}
+
+	public String getFormula() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.FORMULA + "")) {
+			return this.getClassic().getFormula();
+		} else {
+			return _formula;
+		}
 	}
 
@@ -987,17 +1118,32 @@
 	}
 
-	public String getLinkFrameset()
-	{
-		return _link_frameset;
-	}
-
-	public boolean getLinkMark()
-	{
-		return _linkMark;
-	}
-
-	public String getLinkTemplate()
-	{
-		return _link_template;
+	public String getLinkFrameset()	{
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.LINK_FRAMESET + "")) {
+			return this.getClassic().getLinkFrameset();
+		} else {
+			return _link_frameset;
+		}
+	}
+
+	public boolean getLinkMark() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.LINK_MARK + "")) {
+			return this.getClassic().getLinkMark();
+		} else {
+			return _linkMark;
+		}
+	}
+
+	public String getLinkTemplate()	{
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.LINK_TEMPLATE + "")) {
+			return this.getClassic().getLinkTemplate();
+		} else {
+			return _link_template;
+		}
 	}
 
@@ -1012,7 +1158,12 @@
 	}
 
-	public String getOwner()
-	{
-		return _owner;
+	public String getOwner() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.OWNER + "")) {
+			return this.getClassic().getOwner();
+		} else {
+			return _owner;
+		}
 	}
 
@@ -1129,7 +1280,12 @@
 
 	/** Gets the position of this item. */
-	public final Point getPosition()
-	{
-		return new Point(getX(), getY());
+	public final Point getPosition() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.POSITION + "")) {
+			return this.getClassic().getPosition();
+		} else {
+			return new Point(getX(), getY());
+		}
 	}
 
@@ -1156,16 +1312,32 @@
 	}
 
-	public String getTypeAndID()
-	{
-		return "T " + getID();
-	}
-
-	public Integer getWidthToSave()
-	{
-		return getWidth();
+	public String getTypeAndID() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.TYPE_AND_ID + "")) {
+			return this.getClassic().getTypeAndID();
+		} else {
+			return "T " + getID();
+		}
+	}
+
+	public Integer getWidthToSave()	{
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.WIDTH_TO_SAVE + "")) {
+			return this.getClassic().getWidthToSave();
+		} else {
+			return getWidth();
+		}
 	}
 	
 	public Integer getMinWidthToSave() {
-		return getMinWidth();
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.MIN_WIDTH_TO_SAVE + "")) {
+			return this.getClassic().getMinWidthToSave();
+		} else {
+			return getMinWidth();
+		}
 	}
 
@@ -1189,7 +1361,12 @@
 	 * @return The X coordinate of this Item on the screen
 	 */
-	public int getX()
-	{
-		return Math.round(_x);
+	public int getX() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.POSITION + "")) {
+			return this.getClassic().getX();
+		} else {
+			return Math.round(_x);
+		}
 	}
 
@@ -1199,7 +1376,12 @@
 	 * @return The Y coordinate of this Item on the screen
 	 */
-	public int getY()
-	{
-		return Math.round(_y);
+	public int getY() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.POSITION + "")) {
+			return this.getClassic().getY();
+		} else {
+			return Math.round(_y);
+		}
 	}
 
@@ -1357,7 +1539,12 @@
 	}
 	
-	public List<String> getTooltip()
-	{
-		return _tooltip.asStringList();
+	public List<String> getTooltip() {
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.TOOLTIP + "")) {
+			return this.getClassic().getTooltip();
+		} else {
+			return _tooltip.asStringList();
+		}
 	}
 	
@@ -1836,5 +2023,11 @@
 
 	public Colour getGradientColor() {
-		return _gradientColour;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.GRADIENT_COLOR + "")) {
+			return this.getClassic().getGradientColor();
+		} else {
+			return _gradientColour;
+		}
 	}
 
@@ -1924,5 +2117,11 @@
 	
 	public boolean getLinkHistory() {
-		return _linkHistory;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.LINK_HISTORY + "")) {
+			return this.getClassic().getLinkHistory();
+		} else {
+			return _linkHistory;
+		}
 	}
 
@@ -2251,7 +2450,12 @@
 	 *         set).
 	 */
-	public float getThickness()
-	{
-		return _thickness;
+	public float getThickness()	{
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.THICKNESS + "")) {
+			return this.getClassic().getThickness();
+		} else {
+			return _thickness;
+		}
 	}
 
@@ -3160,21 +3364,51 @@
 
 	public Integer getAnchorLeft() {
-		return _anchoring.getLeftAnchor();
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ANCHOR_LEFT + "")) {
+			return this.getClassic().getAnchorLeft();
+		} else {
+			return _anchoring.getLeftAnchor();
+		}
 	}
 
 	public Integer getAnchorRight() {
-		return _anchoring.getRightAnchor();
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ANCHOR_RIGHT + "")) {
+			return this.getClassic().getAnchorRight();
+		} else {
+			return _anchoring.getRightAnchor();
+		}
 	}
 
 	public Integer getAnchorTop() {
-		return _anchoring.getTopAnchor();
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ANCHOR_TOP + "")) {
+			return this.getClassic().getAnchorTop();
+		} else {
+			return _anchoring.getTopAnchor();
+		}
 	}
 
 	public Integer getAnchorBottom() {
-		return _anchoring.getBottomAnchor();
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ANCHOR_BOTTOM + "")) {
+			return this.getClassic().getAnchorBottom();
+		} else {
+			return _anchoring.getBottomAnchor();
+		}
 	}
 
 	public String getText() {
-		return "@" + getClass().getSimpleName() + ":" + getID();
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.TEXT + "")) {
+			return this.getClassic().getText();
+		} else {
+			return "@" + getClass().getSimpleName() + ":" + getID();
+		}
 	}
 
@@ -3412,6 +3646,12 @@
 	
 	public int getMagnetizedItemLeft() {
-		if(_magnetizedItemLeft != null) return _magnetizedItemLeft.getID();
-		else return -1;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.MAGNETIZED_ITEM_LEFT + "")) {
+			return this.getClassic().getMagnetizedItemLeft();
+		} else {
+			if(_magnetizedItemLeft != null) return _magnetizedItemLeft.getID();
+			else return -1;
+		}
 	}
 	
@@ -3425,6 +3665,12 @@
 	
 	public int getMagnetizedItemRight() {
-		if(_magnetizedItemRight != null) return _magnetizedItemRight.getID();
-		else return -1;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.MAGNETIZED_ITEM_RIGHT + "")) {
+			return this.getClassic().getMagnetizedItemRight();
+		} else {
+			if(_magnetizedItemRight != null) return _magnetizedItemRight.getID();
+			else return -1;
+		}
 	}
 	
@@ -3438,6 +3684,12 @@
 	
 	public int getMagnetizedItemTop() {
-		if(_magnetizedItemTop != null) return _magnetizedItemTop.getID();
-		else return -1;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.MAGNETIZED_ITEM_TOP + "")) {
+			return this.getClassic().getMagnetizedItemTop();
+		} else {
+			if(_magnetizedItemTop != null) return _magnetizedItemTop.getID();
+			else return -1;
+		}
 	}
 	
@@ -3451,6 +3703,12 @@
 	
 	public int getMagnetizedItemBottom() {
-		if(_magnetizedItemBottom != null) return _magnetizedItemBottom.getID();
-		else return -1;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.MAGNETIZED_ITEM_BOTTOM + "")) {
+			return this.getClassic().getMagnetizedItemBottom();
+		} else {
+			if(_magnetizedItemBottom != null) return _magnetizedItemBottom.getID();
+			else return -1;
+		}
 	}
 	
@@ -3464,5 +3722,11 @@
 	
 	public String getEncryptionLabel() {
-		return _encryptionLabel;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.ENCRYPTION_LABEL + "")) {
+			return this.getClassic().getEncryptionLabel();
+		} else {
+			return _encryptionLabel;
+		}
 	}
 	
Index: trunk/src/org/expeditee/items/Text.java
===================================================================
--- trunk/src/org/expeditee/items/Text.java	(revision 1409)
+++ trunk/src/org/expeditee/items/Text.java	(revision 1410)
@@ -41,4 +41,5 @@
 import org.expeditee.core.bounds.AxisAlignedBoxBounds;
 import org.expeditee.core.bounds.PolygonBounds;
+import org.expeditee.encryption.items.surrogates.Surrogate;
 import org.expeditee.gio.EcosystemManager;
 import org.expeditee.gio.GraphicsManager;
@@ -51,4 +52,5 @@
 import org.expeditee.gui.FreeItems;
 import org.expeditee.gui.MessageBay;
+import org.expeditee.io.DefaultFrameWriter;
 import org.expeditee.items.MagneticConstraint.MagneticConstraints;
 import org.expeditee.math.ExpediteeJEP;
@@ -499,9 +501,15 @@
 	 */
 	public Justification getJustification() {
-		if (_justification == null || _justification.equals(Justification.left)) {
-			return null;
-		}
-
-		return _justification;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.JUSTIFICATION + "")) {
+			return ((Text) this.getClassic()).getJustification();
+		} else {
+			if (_justification == null || _justification.equals(Justification.left)) {
+				return null;
+			}
+
+			return _justification;
+		}
 	}
 
@@ -1295,5 +1303,11 @@
 	 */
 	public Font getFont() {
-		return _font;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.FONT + "")) {
+			return ((Text) this.getClassic()).getFont();
+		} else {
+			return _font;
+		}
 	}
 
@@ -1501,5 +1515,11 @@
 	 */
 	public float getSpacing() {
-		return _spacing;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.SPACING + "")) {
+			return ((Text) this.getClassic()).getSpacing();
+		} else {
+			return _spacing;
+		}
 	}
 
@@ -1525,5 +1545,11 @@
 
 	public int getWordSpacing() {
-		return _word_spacing;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.WORD_SPACING + "")) {
+			return ((Text) this.getClassic()).getWordSpacing();
+		} else {
+			return _word_spacing;
+		}
 	}
 
@@ -1548,5 +1574,11 @@
 	 */
 	public float getLetterSpacing() {
-		return _letter_spacing;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.LETTER_SPACING + "")) {
+			return ((Text) this.getClassic()).getLetterSpacing();
+		} else {
+			return _letter_spacing;
+		}
 	}
 
@@ -1556,5 +1588,11 @@
 
 	public float getInitialSpacing() {
-		return _initial_spacing;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.INITIAL_SPACING + "")) {
+			return ((Text) this.getClassic()).getInitialSpacing();
+		} else {
+			return _initial_spacing;
+		}
 	}
 
@@ -3009,5 +3047,11 @@
 
 	public boolean getAutoWrap() {
-		return _autoWrap;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.AUTO_WRAP_TO_SAVE + "")) {
+			return ((Text) this.getClassic()).getAutoWrap();
+		} else {
+			return _autoWrap;
+		}
 	}
 
@@ -3145,9 +3189,16 @@
 
 	public Integer getMask() {
-		if (_mask == null) {
-			return null;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.MASK + "")) {
+			return ((Text) this.getClassic()).getMask();
 		} else {
-			return _mask;
-		}
+			if (_mask == null) {
+				return null;
+			} else {
+				return _mask;
+			}
+		}
+
 	}
 
@@ -3157,8 +3208,14 @@
 	
 	public String getPlaceholder() {
-		if (_placeholder == null || _placeholder.length() == 0) {
-			return null;
-		}
-		return _placeholder.toString();
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.PLACEHOLDER + "")) {
+			return ((Text) this.getClassic()).getPlaceholder();
+		} else {
+			if (_placeholder == null || _placeholder.length() == 0) {
+				return null;
+			}
+			return _placeholder.toString();
+		}
 	}
 
@@ -3178,5 +3235,11 @@
 
 	public boolean isSingleLineOnly() {
-		return _singleLine;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.SINGLE_LINE_ONLY + "")) {
+			return ((Text) this.getClassic()).isSingleLineOnly();
+		} else {
+			return _singleLine;
+		}
 	}
 
@@ -3186,5 +3249,11 @@
 	
 	public int getTabIndex() {
-		return this._tabIndex;
+		Surrogate surrogate = Surrogate.of(this);
+		if (surrogate != null && 
+				surrogate.isPropertyIsInherited(DefaultFrameWriter.TAB_INDEX + "")) {
+			return ((Text) this.getClassic()).getTabIndex();
+		} else {
+			return this._tabIndex;
+		}
 	}
 	
