Index: /trunk/src/org/expeditee/gui/FrameCreator.java
===================================================================
--- /trunk/src/org/expeditee/gui/FrameCreator.java	(revision 939)
+++ /trunk/src/org/expeditee/gui/FrameCreator.java	(revision 940)
@@ -20,10 +20,9 @@
 
 import java.awt.Color;
+import java.util.*;
 
 import org.expeditee.agents.ExistingFramesetException;
 import org.expeditee.items.Item;
-import org.expeditee.items.PermissionPair;
 import org.expeditee.items.Text;
-import org.expeditee.items.UserAppliedPermission;
 
 public class FrameCreator {
@@ -57,4 +56,6 @@
 
 	private boolean _multiColumn;
+	
+	private final List<Frame> framesCreated = new LinkedList<Frame>();
 
 	public FrameCreator(String frameTitle) {
@@ -124,4 +125,5 @@
 		if (toUse == null) {
 			toUse = FrameIO.CreateFrame(name, frameTitle, null);
+			this.framesCreated.add(toUse);
 		}
 
@@ -149,4 +151,6 @@
 					_current.getTitle(), null);
 
+			this.framesCreated.add(newFrame);
+			
 			// add link to previous frame
 			// _prev =
@@ -168,4 +172,8 @@
 			return false;
 		}
+	}
+	
+	public List<Frame> getFramesCreated() {
+		return this.framesCreated;
 	}
 
Index: /trunk/src/org/expeditee/gui/FrameGraphics.java
===================================================================
--- /trunk/src/org/expeditee/gui/FrameGraphics.java	(revision 939)
+++ /trunk/src/org/expeditee/gui/FrameGraphics.java	(revision 940)
@@ -541,7 +541,9 @@
 			if(current != null) {
 				current.paintTooltip(bg);
-			} else {
-				Item.clearTooltipOwner();
-			}
+			} //else {
+//				Item.clearTooltipOwner();
+//			}
+			if(previous != null) previous.clearTooltips();
+			previous = current;
 		}
 
@@ -550,4 +552,6 @@
 			PaintNonLinesNonPicture(bg, FreeItems.getCursor());
 	}
+	
+	private static Item previous = null;
 
 	// creates a new line so that lines are shown correctly when spanning
Index: /trunk/src/org/expeditee/items/Item.java
===================================================================
--- /trunk/src/org/expeditee/items/Item.java	(revision 939)
+++ /trunk/src/org/expeditee/items/Item.java	(revision 940)
@@ -46,5 +46,4 @@
 import org.expeditee.actions.Misc;
 import org.expeditee.actions.Simple;
-import org.expeditee.gui.AttributeUtils;
 import org.expeditee.gui.AttributeValuePair;
 import org.expeditee.gui.DisplayIO;
@@ -164,7 +163,5 @@
 	protected boolean _filled = true;
 	
-	private List<String> _tooltip = null;
-	private static Text _tooltipItem = null;
-	private static Item _tooltipOwner = null;
+	private Tooltip _tooltip = new Tooltip();
 
 	public enum AnchorEdgeType {
@@ -1158,69 +1155,44 @@
 	public abstract void paint(Graphics2D g);
 	
-	public void setTooltips(List<String> tooltips) {
-		if (tooltips == null || tooltips.size() == 0) {
-			_tooltip = null;
-		} else {
-			_tooltip = new LinkedList<String>(tooltips);
-		}
-	}
-	
-	public void setTooltip(String tooltip) {
-		if(_tooltip == null || _tooltip.size() == 0) {
-			_tooltip = new LinkedList<String>();
-		}
+	public void setTooltips(final List<String> tooltips) {
+		if(tooltips == null || tooltips.size() == 0) _tooltip = new Tooltip();
+		else for(final String content: tooltips) _tooltip.addTooltip(content);
+	}
+	
+	public void setTooltip(final String tooltip) {
 		if(tooltip != null && tooltip.trim().length() > 0) {
-			_tooltip.add(tooltip);
+			_tooltip.addTooltip(tooltip);
 		}
 	}
 	
 	public List<String> getTooltip() {
-		return _tooltip;
-	}
-	
-	public static void clearTooltipOwner() {
-		_tooltipOwner = null;
-	}
-	
-	public void paintTooltip(Graphics2D g) {
-		if(_tooltipOwner != this) {
-			_tooltipItem = null;
-			_tooltipOwner = this;
-		}
-		// generate tooltip item
-		if(_tooltipItem == null) {
-			if(_tooltip != null && _tooltip.size() > 0) {
-				StringBuffer tooltip = new StringBuffer();
-				for(String t : _tooltip) {
-					tooltip.append(t).append("\n");
-				}
-				if(tooltip.length() > 0) {
-					tooltip.deleteCharAt(tooltip.length() - 1);
-				}
-				_tooltipItem = (Text) getParentOrCurrentFrame().getTooltipTextItem("");
-				for(String s : _tooltip) {
-					// set text
-					if(s.trim().toLowerCase().startsWith("text") && s.contains(":")) {
-						_tooltipItem.appendLine(s.substring(s.indexOf(':') + 1).trim());
-					} else {
-						AttributeUtils.setAttribute(_tooltipItem, new Text(s));
-					}
-				}
-			} else {
-				return;
-			}
-		}
-		Rectangle bounds = getPolygon().getBounds();
-		_tooltipItem.invalidateAll();
+		return _tooltip.asStringList();
+	}
+	
+	public List<Text> getTooltipItems() {
+		return _tooltip.getTooltips();
+	}
+
+	public void clearTooltips() {
+		final Frame frame = this.getParent();
+		for(final Text tooltip: _tooltip.getTooltips()) frame.removeItem(tooltip);
+	}
+	
+	public void paintTooltip(final Graphics2D g) {
+		final Rectangle bounds = this.getPolygon().getBounds();
 		int x = bounds.x + bounds.width;
-		if(x + _tooltipItem.getPolygon().getBounds().width > FrameGraphics.getMaxFrameSize().width) {
-			x -= x + _tooltipItem.getPolygon().getBounds().width - FrameGraphics.getMaxFrameSize().width;
-		}
-		int y = bounds.y + bounds.height + bounds.height / 2;
-		if(y + _tooltipItem.getPolygon().getBounds().height > FrameGraphics.getMaxFrameSize().height) {
-			y = bounds.y + bounds.height / 2 - _tooltipItem.getPolygon().getBounds().height;
-		}
-		_tooltipItem.setPosition(x, y);
-		_tooltipItem.paint(g);
+		if(x + _tooltip.getWidth() > FrameGraphics.getMaxFrameSize().width) {
+			x -= x + _tooltip.getWidth() - FrameGraphics.getMaxFrameSize().width;
+		}
+		int y = bounds.y + bounds.height;
+		if(y + _tooltip.getCollectiveHeight() > FrameGraphics.getMaxFrameSize().height) {
+			y = bounds.y + bounds.height / 2 - _tooltip.getCollectiveHeight();
+		}
+		for(final Text tooltip : _tooltip.getTooltips()) {
+			this.getParent().addItem(tooltip);
+			tooltip.setPosition(x, y);
+			tooltip.paint(g);
+			y += tooltip.getHeight();
+		}
 	}
 	
