Index: trunk/src/org/expeditee/assets/resources-public/framesets/authentication/1.exp
===================================================================
--- trunk/src/org/expeditee/assets/resources-public/framesets/authentication/1.exp	(revision 1320)
+++ trunk/src/org/expeditee/assets/resources-public/framesets/authentication/1.exp	(revision 1321)
@@ -1,8 +1,8 @@
-V 788
+V 800
 p 40
 U authadmin
 D 23Nov2018[12:31]
 M authadmin
-d 15Apr2019[15:11]
+d 17Apr2019[11:24]
 B 100 100 39 100
 Z
@@ -74,5 +74,5 @@
 K 0 0 0 100
 P 350 287
-T bln4
+T 
 x F
 D txtUsername
@@ -88,5 +88,5 @@
 h 1.0
 p 44
-= Username
+_ph Username
 
 S T 1291
@@ -111,5 +111,5 @@
 h 1.0
 p 44
-= Password
+_ph Password
 
 S T 1374
@@ -181,8 +181,17 @@
 Z
 
-ActiveTime:13802283:07:22
-DarkTime:-13797066:-21:-5
-11:53:057 89 251 Md
-11:53:179 89 252 Rd
-11:53:568 89 252 Ru
-11:53:633 89 252 Mu
+ActiveTime:16394710:10:09
+DarkTime:-16387934:-21:-21
+24:22:328 83 242 kSHIFT
+24:22:571 83 242 kT
+24:22:746 94 242 kO
+24:23:091 103 242 kG
+24:23:241 112 242 kG
+24:23:371 121 242 kL
+24:23:492 126 242 kE
+24:26:443 134 242 kBACKSPACE
+24:26:587 126 242 kBACKSPACE
+24:26:731 121 242 kBACKSPACE
+24:26:834 112 242 kBACKSPACE
+24:26:971 103 242 kBACKSPACE
+24:27:098 94 242 kBACKSPACE
Index: trunk/src/org/expeditee/assets/resources-public/framesets/authentication/2.exp
===================================================================
--- trunk/src/org/expeditee/assets/resources-public/framesets/authentication/2.exp	(revision 1320)
+++ trunk/src/org/expeditee/assets/resources-public/framesets/authentication/2.exp	(revision 1321)
@@ -1,8 +1,8 @@
-V 250
+V 254
 p 40
 U authadmin
 D 07Dec2018[12:19]
 M authadmin
-d 15Apr2019[15:12]
+d 17Apr2019[11:24]
 B 100 100 39 100
 Z
@@ -103,5 +103,5 @@
 h 1.0
 p 44
-= Username
+_ph Username
 
 S T 111
@@ -126,5 +126,5 @@
 h 1.0
 p 44
-= Password
+_ph Password
 
 S T 130
@@ -149,5 +149,5 @@
 h 1.0
 p 44
-= Password Again
+_ph Password Again
 
 S T 672
@@ -171,5 +171,5 @@
 h 1.0
 p 44
-= Email Again
+_ph Email Again
 
 S T 671
@@ -193,5 +193,5 @@
 h 1.0
 p 44
-= Email
+_ph Email
 
 S T 190
@@ -263,9 +263,13 @@
 Z
 
-ActiveTime:01:11:23
+ActiveTime:01:14:57
 DarkTime:01:31:57
-12:56:260 116 494 Md
-12:56:379 116 498 Rd
-12:56:562 115 501 Ru
-12:56:601 115 501 Mu
-12:57:073 157 494 kLEFT_ARROW
+24:15:545 211 281 Ld
+24:15:698 211 281 Rd
+24:15:841 211 281 Ru
+24:15:872 211 281 Lu
+24:17:969 41 223 Md
+24:18:132 41 223 Rd
+24:18:649 41 223 Mu
+24:18:657 41 223 Ru
+24:21:195 41 223 kLEFT_ARROW
Index: trunk/src/org/expeditee/auth/Actions.java
===================================================================
--- trunk/src/org/expeditee/auth/Actions.java	(revision 1320)
+++ trunk/src/org/expeditee/auth/Actions.java	(revision 1321)
@@ -392,5 +392,5 @@
 		String message = "Creating new user account...";
 		int progress = 0;
-		int step = 20;
+		int step = 16;
 
 		// Extract user details
@@ -519,6 +519,10 @@
 		Path destinationFile = destinationDirectory.resolve(AuthenticatorBrowser.CREDENTIALS_FRAME + ExpReader.EXTENTION);
 		FrameIO.migrateFrame(credentialsFrame, destinationFile);
-		
-		MessageBay.displayMessage(message + "Creating Individual Space.");
+
+		try {
+			progressBar.UpdateMessage(message + "Creating Individual Space.", progress += step);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
 		DisplayController.refreshBayArea();
 		
@@ -543,5 +547,5 @@
 		
 		try {
-			progressBar.UpdateMessage(message + "Done.", progress += step);
+			progressBar.UpdateMessage(message + "Done.", 100);
 		} catch (Exception e) {
 			e.printStackTrace();
Index: trunk/src/org/expeditee/auth/account/Authenticate.java
===================================================================
--- trunk/src/org/expeditee/auth/account/Authenticate.java	(revision 1320)
+++ trunk/src/org/expeditee/auth/account/Authenticate.java	(revision 1321)
@@ -25,5 +25,4 @@
 import org.expeditee.auth.Actions;
 import org.expeditee.auth.AuthenticatorBrowser;
-import org.expeditee.auth.Mail;
 import org.expeditee.auth.gui.MailBay;
 import org.expeditee.auth.tags.AuthenticationTag;
Index: trunk/src/org/expeditee/io/DefaultFrameReader.java
===================================================================
--- trunk/src/org/expeditee/io/DefaultFrameReader.java	(revision 1320)
+++ trunk/src/org/expeditee/io/DefaultFrameReader.java	(revision 1321)
@@ -46,4 +46,6 @@
 	
 	protected static LinkedHashMap<Character, Method> _ItemTags = null;
+	// IMPORTANT: keys in _ItemTagsExt must start with underscore as their first character
+	protected static LinkedHashMap<String, Method> _ItemTagsExt = null;
 	
 	protected static List<Character> _DelayedItemTags = null;
@@ -74,4 +76,5 @@
 
 		_ItemTags = new LinkedHashMap<Character, Method>();
+		_ItemTagsExt = new LinkedHashMap<String, Method>();
 		_FrameTags = new LinkedHashMap<Character, Method>();
 		_DelayedItemTags = new LinkedList<Character>();
@@ -161,6 +164,4 @@
 			_ItemTags.put('O', Text.class.getMethod("setMask", pIntO));
 			
-			_ItemTags.put('=', Text.class.getMethod("setPlaceholder", pString));
-			
 			// Lines and constraints are created differently
 			_ItemTags.put('L', Line.class.getMethod("setStartItem", pItem));
@@ -173,6 +174,8 @@
 			_ItemTags.put('^', Item.class.getMethod("setMagnetizedItemTop", pInt));
 			_DelayedItemTags.add('^');
-			_ItemTags.put('_', Item.class.getMethod("setMagnetizedItemBottom", pInt));
-			_DelayedItemTags.add('_');
+			_ItemTags.put('/', Item.class.getMethod("setMagnetizedItemBottom", pInt));
+			_DelayedItemTags.add('/');
+			
+			_ItemTagsExt.put("_ph", Text.class.getMethod("setPlaceholder", pString));
 		} catch (Exception e) {
 			e.printStackTrace();
Index: trunk/src/org/expeditee/io/DefaultFrameWriter.java
===================================================================
--- trunk/src/org/expeditee/io/DefaultFrameWriter.java	(revision 1320)
+++ trunk/src/org/expeditee/io/DefaultFrameWriter.java	(revision 1321)
@@ -56,4 +56,6 @@
 	// keep track of methods that are put on the same line
 	protected static LinkedHashMap<Character, Method> _ItemTags = null;
+	// IMPORTANT: keys in _ItemTagsExt must start with underscore as their first character 
+	protected static LinkedHashMap<String, Method> _ItemTagsExt = null;
 
 	protected static LinkedHashMap<Character, Method> _FrameTags = null;
@@ -65,4 +67,5 @@
 
 		_ItemTags = new LinkedHashMap<Character, Method>();
+		_ItemTagsExt = new LinkedHashMap<String, Method>();
 		_FrameTags = new LinkedHashMap<Character, Method>();
 
@@ -148,7 +151,8 @@
 			_ItemTags.put(']', Item.class.getMethod("getMagnetizedItemRight"));
 			_ItemTags.put('^', Item.class.getMethod("getMagnetizedItemTop"));
-			_ItemTags.put('_', Item.class.getMethod("getMagnetizedItemBottom"));
-			
-			_ItemTags.put('=', Text.class.getMethod("getPlaceholder"));
+			_ItemTags.put('/', Item.class.getMethod("getMagnetizedItemBottom"));
+			
+			//_ItemTags.put('=', Text.class.getMethod("getPlaceholder"));
+			_ItemTagsExt.put("_ph", Text.class.getMethod("getPlaceholder"));
 		} catch (Exception e) {
 			e.printStackTrace();
Index: trunk/src/org/expeditee/io/ExpReader.java
===================================================================
--- trunk/src/org/expeditee/io/ExpReader.java	(revision 1320)
+++ trunk/src/org/expeditee/io/ExpReader.java	(revision 1321)
@@ -74,5 +74,37 @@
 		// allow for all characters, we take advantage of how || is evaluated:
 		// 		if the check for Character.isLetter passes, then the more complex map lookup operation does not take place.
-		return s.length() >= 2 && (Character.isLetter(s.charAt(0)) || _ItemTags.keySet().contains(s.charAt(0)));
+		
+		if (s.length() < 2) {
+			return false;
+		}
+		char charZero = s.charAt(0);
+		
+		if (charZero == '_') {
+			// If the character at the start is a underscore then we are dealing with the extended collection and must extract a string.
+			// This requires that the line contains a space character to split on and that the resulting split has at least two parts.
+			String[] parts = s.split(" ");
+			if (parts.length < 2) {
+				return false;
+			}
+			boolean isStringTag = _ItemTagsExt.keySet().contains(parts[0]);
+			if (isStringTag) {
+				return true;
+			}
+		} else {
+			// If we are looking at a letter then we can save ourselves from the less efficient general character check. 
+			boolean isLetter = Character.isLetter(charZero);
+			if (isLetter) {
+				return true;
+			}
+			
+			// If we are not looking at a letter but we are looking at a character that is not _ then it must be in the existing collection to be valid 
+			boolean isCharacterTag = _ItemTags.keySet().contains(charZero);
+			if (isCharacterTag) {
+				return true;
+			}
+		}
+				
+		// If we have somehow found a entry which does not pass any of the above tests then the line is invalid.
+		return false;
 	}
 
@@ -246,9 +278,18 @@
 	 */
 	protected void processBodyLine(Item item, String line) {
+		Method toRun = null; 
+		
 		// separate the tag from the value
-		Character tag = getTag(line);
-		String value = getValue(line);
-		
-		Method toRun = _ItemTags.get(tag);
+		String tag = getTag(line).toString();
+		String value = null;
+		if (tag.charAt(0) != '_') {
+			value = getValue(line);
+			toRun = _ItemTags.get(tag.charAt(0));
+		} else {
+			tag = getTagExt(line);
+			value = getValueExt(line);
+			toRun = _ItemTagsExt.get(tag);
+		}
+		
 				
 		if (toRun == null) {
@@ -271,4 +312,11 @@
 		return line.charAt(0);
 	}
+	
+	protected static String getTagExt(String line) {
+		assert(line.length() >= 2 && line.contains(" "));
+		String[] parts = line.split(" ");
+		assert(parts.length >= 2);
+		return parts[0];
+	}
 
 	protected static String getValue(String line) {
@@ -278,4 +326,9 @@
 			return "";
 		}
+	}
+	
+	protected static String getValueExt(String line) {
+		assert(line.length() >= 2 && line.contains(" "));
+		return line.substring(line.indexOf(" ") + 1);
 	}
 	
Index: trunk/src/org/expeditee/io/ExpWriter.java
===================================================================
--- trunk/src/org/expeditee/io/ExpWriter.java	(revision 1320)
+++ trunk/src/org/expeditee/io/ExpWriter.java	(revision 1321)
@@ -277,4 +277,5 @@
 	private void writeClass(Object toWrite) throws IOException {
 		Iterator<Character> it = _ItemTags.keySet().iterator();
+		Iterator<String> itExt = _ItemTagsExt.keySet().iterator();
 		Object[] param = {};
 
@@ -300,4 +301,26 @@
 			}
 		}
+		
+		while (itExt.hasNext()) {
+			String tag = itExt.next();
+			Method toRun = _ItemTagsExt.get(tag);
+			Class<?> declarer = toRun.getDeclaringClass();
+			if (declarer.isAssignableFrom(toWrite.getClass())) {
+				try {
+					Object o = toRun.invoke(toWrite, param);
+					o = Conversion.ConvertToExpeditee(toRun, o);
+					if (o != null) {
+						if (o instanceof List) {
+							for (Object line : (List) o) {
+								writeLine(tag.toString(), line.toString());
+							}
+						} else
+							writeLine(tag.toString(), o.toString());
+					}
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+			}
+		}
 	}
 
