Index: trunk/src/org/expeditee/gui/Browser.java
===================================================================
--- trunk/src/org/expeditee/gui/Browser.java	(revision 1459)
+++ trunk/src/org/expeditee/gui/Browser.java	(revision 1460)
@@ -141,4 +141,6 @@
 public class Browser implements SaveStateChangedEventListener {
 	
+	public static final boolean DEBUG = true;
+	
 	public static final Ecosystem ECOSYSTEM_TYPE = Ecosystem.Swing;
 
Index: trunk/src/org/expeditee/gui/Frame.java
===================================================================
--- trunk/src/org/expeditee/gui/Frame.java	(revision 1459)
+++ trunk/src/org/expeditee/gui/Frame.java	(revision 1460)
@@ -729,5 +729,4 @@
 		_frameName = new Text(id);
 		_frameName.setParent(this);
-		_frameName.setOwner(this.getOwner());
 		_frameName.setText(getFramesetName() + _number);
 		_frameName.resetFrameNamePosition();
@@ -782,7 +781,13 @@
 	 *            The owner to use for this Frame.
 	 */
-	public void setOwner(String owner)
-	{
+	public void setOwner(String owner) {
 		_owner = owner;
+		if (_frameName != null) {
+			_frameName.setOwner(owner);
+		} else {
+			if (Browser.DEBUG) {
+				System.err.println(" *** Attempted to set owner of Frame when _frameName was null. *** ");
+			}
+		}
 	}
 
@@ -879,11 +884,47 @@
 
 	public void addItem(Item item, boolean recalculate)	{
-		if (item == null) { return; }
-		
-		addItem(item, recalculate, getBody(false));
+		if (item == null) {
+			return;
+		}
+
+		// Get the associated encryption label if it has one.  Surrogates use their primaries encryption label.
+		String encryptionLabel = item.getEncryptionLabel();
 		if (item.isSurrogate()) {
-			addItem(item, recalculate, getSurrogateBody());
+			encryptionLabel = item.getPrimary().getEncryptionLabel();
+		}
+		
+		if (encryptionLabel == null) {
+			// If we do not have an encryption label to go off, then we cannot be a surrogate.
+			// Add item to body and primaryBody
+			addItem(item, recalculate, getBody(false));
+			addItem(item, recalculate, getPrimaryBody());
 		} else {
-			addItem(item, recalculate, getPrimaryBody());
+			List<String> accessibleLabelsNames = Label.getAccessibleLabelsNames(getPrimaryBody());
+			if (item.isSurrogate() && accessibleLabelsNames.contains(encryptionLabel)) {
+				// .. If it is a surrogate and its encryption label is currently active, it needs to be added to surrogateBody only
+				// .. This will result in the item disappearing when placed (as it is now accessible in only surrogate mode)
+				addItem(item, recalculate, getSurrogateBody());
+			} else if (item.isSurrogate() && !accessibleLabelsNames.contains(encryptionLabel)) {
+				// .. If it is a surrogate and its encryption label is not currently active, it needs to be added to body and surrogateBody
+				// .. This will result in the item being visible on the frame.
+				addItem(item, recalculate, getBody(false));
+				addItem(item, recalculate, getSurrogateBody());
+			} else if (!item.isSurrogate() && accessibleLabelsNames.contains(encryptionLabel)) {
+				// .. If it is a primary and its encryption label is currently active, it needs to be added to body and primaryBody
+				// .. This will result in the item being visible on the frame.
+				addItem(item, recalculate, getBody(false));
+				addItem(item, recalculate, getPrimaryBody());
+//				for (Item surrogate: item.getSurrogates()) {
+//					surrogate.invalidateBounds(); // Should Item::invalidateBounds invalidate its surrogates bounds as well?
+//				}
+			} else { // !item.isSurrogate() && !accessibleLabelsNames.contains(encryptionLabel)
+				// .. If it is a primary and its encryption label is not currently active, it needs to be added to primaryBody only
+				// .. This will result in the item disappearing when placed (as the current surrogate mode does not contain its label)
+				// Note from Bryce: I am not sure this else condition will ever run, but it will not hurt.
+				addItem(item, recalculate, getPrimaryBody());
+//				for (Item surrogate: item.getSurrogates()) {
+//					surrogate.invalidateBounds();
+//				}
+			}
 		}
 	}
@@ -2699,9 +2740,9 @@
 
 	public Collection<Item> getAllItems() {
-		ItemsList allItems = new ItemsList(getBody(true));
+		Collection<Item> allItems = getBody(true).cloneList();
 		
 		allItems.addAll(_overlayItems);
 		allItems.addAll(_vectorItems);
-		return allItems.underlying();
+		return allItems;
 	}
 
@@ -2883,5 +2924,5 @@
 	
 	public Collection<Item> getBodyItemsWithInsufficientPermissions() {
-		return _bodyHiddenDueToPermissions.underlying();
+		return _bodyHiddenDueToPermissions.cloneList();
 	}
 	
@@ -3074,6 +3115,6 @@
 	 */
 	private List<Item> getAllFrameItemsRaw() {
-		Collection<Item> primaries = getPrimaryBody().underlying();
-		Collection<Item> surrogateBody = getSurrogateBody().underlying();
+		List<Item> primaries = getPrimaryBody().cloneList();
+		List<Item> surrogateBody = getSurrogateBody().cloneList();
 		primaries.addAll(surrogateBody);
 		List<Item> allFrameItems = primaries.stream().distinct().collect(Collectors.toList());
