Index: /trunk/src/org/expeditee/setting/BooleanSetting.java
===================================================================
--- /trunk/src/org/expeditee/setting/BooleanSetting.java	(revision 666)
+++ /trunk/src/org/expeditee/setting/BooleanSetting.java	(revision 666)
@@ -0,0 +1,8 @@
+package org.expeditee.setting;
+
+public class BooleanSetting extends GenericSetting<Boolean> {
+
+	public BooleanSetting(String tooltip, Boolean value) {
+		super(Boolean.class, tooltip, value);
+	}
+}
Index: /trunk/src/org/expeditee/setting/FloatSetting.java
===================================================================
--- /trunk/src/org/expeditee/setting/FloatSetting.java	(revision 666)
+++ /trunk/src/org/expeditee/setting/FloatSetting.java	(revision 666)
@@ -0,0 +1,8 @@
+package org.expeditee.setting;
+
+public class FloatSetting extends GenericSetting<Float> {
+
+	public FloatSetting(String tooltip, Float value) {
+		super(Float.class, tooltip, value);
+	}
+}
Index: /trunk/src/org/expeditee/setting/GenericSetting.java
===================================================================
--- /trunk/src/org/expeditee/setting/GenericSetting.java	(revision 665)
+++ /trunk/src/org/expeditee/setting/GenericSetting.java	(revision 666)
@@ -12,8 +12,8 @@
  * @param <T> type of the setting
  */
-public class GenericSetting<T> extends VariableSetting {
+public abstract class GenericSetting<T> extends VariableSetting {
 
 	protected final Class<T> _type;
-	protected final T _default;
+	protected T _default;
 	protected T _value;
 	
@@ -31,5 +31,4 @@
 		_default = value;
 		_value = value;
-		_hasDefault = true;
 	}
 	
@@ -39,5 +38,4 @@
 	public GenericSetting(Class<T> type, String tooltip) {
 		this(type, tooltip, (T) saneInitialValue(type));
-		_hasDefault = false;
 	}
 	
@@ -112,25 +110,13 @@
 	}
 	
+	public void setDefault(T value) {
+		_default = value;
+	}
+	
 	/**
 	 * Reset the value back to the default, if a default value was specified
 	 */
 	public void reset() {
-		if(!_hasDefault) {
-			return;
-		}
-		if(_default instanceof Text) {
-			int id = ((Item) _value).getID();
-			if(id < 0) {
-				if(((Item) _value).getParentOrCurrentFrame() != null) {
-					id = ((Item) _value).getParentOrCurrentFrame().getNextItemID();
-				} else {
-					id = 0;
-				}
-			}
-			_value = (T) ((Text) _default).copy();
-			((Item) _value).setID(id);
-		} else {
-			_value = _default;
-		}
+		_value = _default;
 	}
 
Index: /trunk/src/org/expeditee/setting/IntegerSetting.java
===================================================================
--- /trunk/src/org/expeditee/setting/IntegerSetting.java	(revision 666)
+++ /trunk/src/org/expeditee/setting/IntegerSetting.java	(revision 666)
@@ -0,0 +1,8 @@
+package org.expeditee.setting;
+
+public class IntegerSetting extends GenericSetting<Integer> {
+
+	public IntegerSetting(String tooltip, Integer value) {
+		super(Integer.class, tooltip, value);
+	}
+}
Index: /trunk/src/org/expeditee/setting/ListSetting.java
===================================================================
--- /trunk/src/org/expeditee/setting/ListSetting.java	(revision 665)
+++ /trunk/src/org/expeditee/setting/ListSetting.java	(revision 666)
@@ -8,5 +8,5 @@
 public abstract class ListSetting<T> extends VariableSetting {
 
-	protected final List<T> _default;
+	protected List<T> _default;
 	protected List<T> _value;
 	
@@ -15,10 +15,8 @@
 		_default = new LinkedList<T>(value);
 		_value = value;
-		_hasDefault = true;
 	}
 	
 	public ListSetting(String tooltip) {
 		this(tooltip, new LinkedList<T>());
-		_hasDefault = false;
 	}
 	
@@ -33,9 +31,10 @@
 	public abstract boolean setSetting(Text text);
 	
+	public void setDefault(List<T> value) {
+		_default = new LinkedList<T>(value);
+	}
+	
 	public void reset() {
-		if(!_hasDefault) {
-			return;
-		}
-		_value = _default;
+		_value = new LinkedList<T>(_default);
 	}
 
Index: /trunk/src/org/expeditee/setting/StringSetting.java
===================================================================
--- /trunk/src/org/expeditee/setting/StringSetting.java	(revision 666)
+++ /trunk/src/org/expeditee/setting/StringSetting.java	(revision 666)
@@ -0,0 +1,8 @@
+package org.expeditee.setting;
+
+public class StringSetting extends GenericSetting<String> {
+
+	public StringSetting(String tooltip, String value) {
+		super(String.class, tooltip, value);
+	}
+}
Index: /trunk/src/org/expeditee/setting/TextSetting.java
===================================================================
--- /trunk/src/org/expeditee/setting/TextSetting.java	(revision 666)
+++ /trunk/src/org/expeditee/setting/TextSetting.java	(revision 666)
@@ -0,0 +1,20 @@
+package org.expeditee.setting;
+
+import org.expeditee.items.Text;
+
+public abstract class TextSetting extends GenericSetting<Text> {
+
+	public TextSetting(String tooltip) {
+		super(Text.class, tooltip, null);
+		_default = generateText();
+		_value = _default;
+	}
+	
+	@Override
+	public Text get() {
+		return _value == null ? null : _value.copy();
+	}
+	
+	public abstract Text generateText();
+
+}
Index: /trunk/src/org/expeditee/setting/VariableSetting.java
===================================================================
--- /trunk/src/org/expeditee/setting/VariableSetting.java	(revision 665)
+++ /trunk/src/org/expeditee/setting/VariableSetting.java	(revision 666)
@@ -2,6 +2,4 @@
 
 public abstract class VariableSetting extends Setting {
-
-	protected boolean _hasDefault;
 	
 	public VariableSetting(String tooltip) {
@@ -9,8 +7,4 @@
 	}
 	
-	public boolean hasDefault() {
-		return _hasDefault;
-	}
-	
 	public abstract void reset();
 
Index: /trunk/src/org/expeditee/settings/Settings.java
===================================================================
--- /trunk/src/org/expeditee/settings/Settings.java	(revision 665)
+++ /trunk/src/org/expeditee/settings/Settings.java	(revision 666)
@@ -29,5 +29,5 @@
 		private final HashMap<String, Setting> settings = new HashMap<String, Setting>();
 		private final List<String> orderedEntries = new LinkedList<String>();
-		private final List<VariableSetting> hasDefault = new LinkedList<VariableSetting>();
+		private final List<VariableSetting> settingsList = new LinkedList<VariableSetting>();
 		private final Method onParsed;
 		
@@ -43,6 +43,6 @@
 					Setting s = (Setting) f.get(null);
 	                settings.put(f.getName().toLowerCase(), s);
-	                if(s instanceof VariableSetting && ((VariableSetting) s).hasDefault()) {
-	                	hasDefault.add((VariableSetting) s);
+	                if(s instanceof VariableSetting) {
+	                	settingsList.add((VariableSetting) s);
 	                }
 	                orderedEntries.add(f.getName());
@@ -108,5 +108,5 @@
 				return;
 			}
-			List<VariableSetting> toDefault = new LinkedList<VariableSetting>(pd.hasDefault);
+			List<VariableSetting> toDefault = new LinkedList<VariableSetting>(pd.settingsList);
 			// set the fields
 			for (Text t : text.getChild().getBodyTextItems(true)) {
Index: /trunk/src/org/expeditee/settings/UserSettings.java
===================================================================
--- /trunk/src/org/expeditee/settings/UserSettings.java	(revision 665)
+++ /trunk/src/org/expeditee/settings/UserSettings.java	(revision 666)
@@ -22,9 +22,13 @@
 import org.expeditee.items.ItemUtils;
 import org.expeditee.items.Text;
+import org.expeditee.setting.BooleanSetting;
+import org.expeditee.setting.FloatSetting;
 import org.expeditee.setting.FrameSetting;
 import org.expeditee.setting.FunctionSetting;
-import org.expeditee.setting.GenericSetting;
+import org.expeditee.setting.IntegerSetting;
 import org.expeditee.setting.ListSetting;
 import org.expeditee.setting.Setting;
+import org.expeditee.setting.StringSetting;
+import org.expeditee.setting.TextSetting;
 
 /**
@@ -41,35 +45,35 @@
 	 */
 	
-	public static final GenericSetting<Float> ScaleFactor = new GenericSetting<Float>(Float.class, "Scale Factor for drawing (TODO: does this even do anything?)", 1F);
-	
-	public static final GenericSetting<Float> FormatSpacingMin = new GenericSetting<Float>(Float.class, "Minimum spacing ratio", null);
-	
-	public static final GenericSetting<Float> FormatSpacingMax = new GenericSetting<Float>(Float.class, "Maximum spacing ratio", null);
-	
-	public static final GenericSetting<Integer> Gravity = new GenericSetting<Integer>(Integer.class, "Distance the cursor has to be from a text item to select the text item", 3);
-
-	public static final GenericSetting<Integer> LineStraightenThreshold = new GenericSetting<Integer>(Integer.class, "Threshold for straightening a line (TODO: does this even do anything?)", 15);
-
-	public static final GenericSetting<Integer> NoOpThreshold = new GenericSetting<Integer>(Integer.class, "Distance the cursor may be dragged while clicking before the operation is cancelled", 60);
-	
-	public static final GenericSetting<Integer> TitlePosition = new GenericSetting<Integer>(Integer.class, "Position of title item in frame (TODO: find whether this is x-offset or y-offset)", 150);
-	
-	public static final GenericSetting<Integer> InitialWidth = new GenericSetting<Integer>(Integer.class, "Initial width of Expeditee window", 1024);
-	
-	public static final GenericSetting<Integer> InitialHeight = new GenericSetting<Integer>(Integer.class, "Initial height of Expeditee window", 768);
-	
-	public static final GenericSetting<String> ProfileName = new GenericSetting<String>(String.class, "Profile name", FrameIO.ConvertToValidFramesetName(System.getProperty("user.name")));
-	
-	public static final GenericSetting<String> UserName = new GenericSetting<String>(String.class, "User name", ProfileName.get());
-	
-	public static final GenericSetting<Boolean> AntiAlias = new GenericSetting<Boolean>(Boolean.class, "Whether anti-aliasing should be enabled", false);
-
-	public static final GenericSetting<Boolean> LineHighlight = new GenericSetting<Boolean>(Boolean.class, "Whether lines should be highlighted", false);
-
-	public static final GenericSetting<Boolean> Logging = new GenericSetting<Boolean>(Boolean.class, "Whether logging should be enabled", false);
-
-	public static final GenericSetting<Boolean> LogStats = new GenericSetting<Boolean>(Boolean.class, "Whether stats should be logged", true);
-
-	public static final GenericSetting<Boolean> Threading = new GenericSetting<Boolean>(Boolean.class, "Whether threading should be enabled", true);
+	public static final FloatSetting ScaleFactor = new FloatSetting("Scale Factor for drawing (TODO: does this even do anything?)", 1F);
+	
+	public static final FloatSetting FormatSpacingMin = new FloatSetting("Minimum spacing ratio", null);
+	
+	public static final FloatSetting FormatSpacingMax = new FloatSetting("Maximum spacing ratio", null);
+	
+	public static final IntegerSetting Gravity = new IntegerSetting("Distance the cursor has to be from a text item to select the text item", 3);
+
+	public static final IntegerSetting LineStraightenThreshold = new IntegerSetting("Threshold for straightening a line (TODO: does this even do anything?)", 15);
+
+	public static final IntegerSetting NoOpThreshold = new IntegerSetting("Distance the cursor may be dragged while clicking before the operation is cancelled", 60);
+	
+	public static final IntegerSetting TitlePosition = new IntegerSetting("Position of title item in frame (TODO: find whether this is x-offset or y-offset)", 150);
+	
+	public static final IntegerSetting InitialWidth = new IntegerSetting("Initial width of Expeditee window", 1024);
+	
+	public static final IntegerSetting InitialHeight = new IntegerSetting("Initial height of Expeditee window", 768);
+	
+	public static final StringSetting ProfileName = new StringSetting("Profile name", FrameIO.ConvertToValidFramesetName(System.getProperty("user.name")));
+	
+	public static final StringSetting UserName = new StringSetting("User name", ProfileName.get());
+	
+	public static final BooleanSetting AntiAlias = new BooleanSetting("Whether anti-aliasing should be enabled", false);
+
+	public static final BooleanSetting LineHighlight = new BooleanSetting("Whether lines should be highlighted", false);
+
+	public static final BooleanSetting Logging = new BooleanSetting("Whether logging should be enabled", false);
+
+	public static final BooleanSetting LogStats = new BooleanSetting("Whether stats should be logged", true);
+
+	public static final BooleanSetting Threading = new BooleanSetting("Whether threading should be enabled", true);
 	
 	
@@ -77,5 +81,5 @@
 	 * Frames
 	 */
-	public static final GenericSetting<String> DefaultFrame = new GenericSetting<String>(String.class, "The default frame", null) {
+	public static final StringSetting DefaultFrame = new StringSetting("The default frame", null) {
 		@Override
 		public boolean setSetting(Text text) {
@@ -85,9 +89,9 @@
 	};
 	
-	public static final GenericSetting<String> StatisticsFrameset = new GenericSetting<String>(String.class, "The statistics frameset", null);
-
-	public static final GenericSetting<String> MenuFrame = new GenericSetting<String>(String.class, "The menu frame", null);
-
-	public static final GenericSetting<String> HomeFrame = new GenericSetting<String>(String.class, "The home frame", null) {
+	public static final StringSetting StatisticsFrameset = new StringSetting("The statistics frameset", null);
+
+	public static final StringSetting MenuFrame = new StringSetting("The menu frame", null);
+
+	public static final StringSetting HomeFrame = new StringSetting("The home frame", null) {
 		@Override
 		public boolean setSetting(Text text) {
@@ -180,77 +184,96 @@
 	 *  Templates
 	 */
-	public static final GenericSetting<Text> TitleTemplate = new GenericSetting<Text>(Text.class, "Template for Title text item");
-	
-	public static final GenericSetting<Text> ItemTemplate = new GenericSetting<Text>(Text.class, "Template for normal text items", new Text("@ItemTemplate")) {
-		@Override
-		public boolean setSetting(Text text) {
-			_value = text.getTemplateForm();
-			return true;
-		}
-	};
-	
-	public static final GenericSetting<Text> DotTemplate = new GenericSetting<Text>(Text.class, "Template for dot items", new Text("@DotTemplate")) {
-		@Override
-		public boolean setSetting(Text text) {
-			_value = text.getTemplateForm();
-			return true;
-		}
-	};
-
-	private static final Text annotationTemplate() {
-		Text t = new Text("@AnnotationTemplate");
-		t.setColor(Color.gray);
-		return t;
-	}
-	public static final GenericSetting<Text> AnnotationTemplate = new GenericSetting<Text>(Text.class, "Template for annotation text items", annotationTemplate()) {
-		@Override
-		public boolean setSetting(Text text) {
-			_value = text.getTemplateForm();
-			return true;
-		}
-	};
-
-	private static final Text codeCommentTemplate() {
-		Text t = new Text("@CommentTemplate");
-		t.setColor(Color.green.darker());
-		return t;
-	}
-	public static final GenericSetting<Text> CodeCommentTemplate = new GenericSetting<Text>(Text.class, "Template for code comment text items", codeCommentTemplate()) {
-		@Override
-		public boolean setSetting(Text text) {
-			_value = text.getTemplateForm();
-			return true;
-		}
-	};
-
-	private static final Text statTemplate() {
-		Text t = new Text("@StatsTemplate");
-		t.setColor(Color.BLACK);
-		t.setBackgroundColor(new Color(0.9F, 0.9F, 0.9F));
-		t.setFamily(Text.MONOSPACED_FONT);
-		t.setSize(14);
-		return t;
-	}
-	public static final GenericSetting<Text> StatTemplate = new GenericSetting<Text>(Text.class, "Template for statistics (e.g. extracted attributes) text items", statTemplate()) {
-		@Override
-		public boolean setSetting(Text text) {
-			_value = text.getTemplateForm();
-			return true;
-		}
-	};
-	
-	private static final Text tooltipTemplate() {
-		Text t = new Text("@StatsTemplate");
-		t.setColor(Color.BLACK);
-		t.setBackgroundColor(new Color(0.7F, 0.7F, 0.9F));
-		// t.setFamily(Text.MONOSPACED_FONT);
-		t.setSize(14);
-		return t;
-	}
-	public static final GenericSetting<Text> TooltipTemplate = new GenericSetting<Text>(Text.class, "Template for tooltips", tooltipTemplate()) {
-		@Override
-		public boolean setSetting(Text text) {
-			_value = text.getTemplateForm();
-			return true;
+	public static final TextSetting TitleTemplate = new TextSetting("Template for Title text item") {
+		@Override
+		public Text generateText() {
+			return null;
+		}
+	};
+	
+	public static final TextSetting ItemTemplate = new TextSetting("Template for normal text items") {
+		@Override
+		public boolean setSetting(Text text) {
+			_value = text.getTemplateForm();
+			return true;
+		}
+		
+		@Override
+		public Text generateText() {
+			return new Text("@ItemTemplate");
+		}
+	};
+	
+	public static final TextSetting DotTemplate = new TextSetting("Template for dot items") {
+		@Override
+		public boolean setSetting(Text text) {
+			_value = text.getTemplateForm();
+			return true;
+		}
+		
+		@Override
+		public Text generateText() {
+			return new Text("@DotTemplate");
+		}
+	};
+
+	public static final TextSetting AnnotationTemplate = new TextSetting("Template for annotation text items") {
+		@Override
+		public boolean setSetting(Text text) {
+			_value = text.getTemplateForm();
+			return true;
+		}
+		@Override
+		public Text generateText() {
+			Text t = new Text("@AnnotationTemplate");
+    		t.setColor(Color.gray);
+    		return t;
+		}
+	};
+
+	public static final TextSetting CodeCommentTemplate = new TextSetting("Template for code comment text items") {
+		@Override
+		public boolean setSetting(Text text) {
+			_value = text.getTemplateForm();
+			return true;
+		}
+		@Override
+		public Text generateText() {
+			Text t = new Text("@CommentTemplate");
+    		t.setColor(Color.green.darker());
+    		return t;
+		}
+	};
+
+	public static final TextSetting StatTemplate = new TextSetting("Template for statistics (e.g. extracted attributes) text items") {
+		@Override
+		public boolean setSetting(Text text) {
+			_value = text.getTemplateForm();
+			return true;
+		}
+		@Override
+		public Text generateText() {
+			Text t = new Text("@StatsTemplate");
+    		t.setColor(Color.BLACK);
+    		t.setBackgroundColor(new Color(0.9F, 0.9F, 0.9F));
+    		t.setFamily(Text.MONOSPACED_FONT);
+    		t.setSize(14);
+    		return t;
+		}
+	};
+	
+	public static final TextSetting TooltipTemplate = new TextSetting("Template for tooltips") {
+		@Override
+		public boolean setSetting(Text text) {
+			_value = text.getTemplateForm();
+			return true;
+		}
+		@Override
+		public Text generateText() {
+			Text t = new Text("@StatsTemplate");
+    		t.setColor(Color.BLACK);
+    		t.setBackgroundColor(new Color(0.7F, 0.7F, 0.9F));
+    		// t.setFamily(Text.MONOSPACED_FONT);
+    		t.setSize(14);
+    		return t;
 		}
 	};
@@ -382,6 +405,8 @@
 		UserSettings.FrameDirs.get().add(FrameIO.PROFILE_PATH);
 		UserSettings.FrameDirs.get().add(FrameIO.HELP_PATH);
+		UserSettings.FrameDirs.get().add(FrameIO.MESSAGES_PATH);
+		UserSettings.FrameDirs.setDefault(UserSettings.FrameDirs.get());
 		UserSettings.ImageDirs.get().add(FrameIO.IMAGES_PATH);
-		UserSettings.FrameDirs.get().add(FrameIO.MESSAGES_PATH);
+		UserSettings.ImageDirs.setDefault(UserSettings.ImageDirs.get());
 	}
 
Index: /trunk/src/org/expeditee/settings/experimental/ExperimentalFeatures.java
===================================================================
--- /trunk/src/org/expeditee/settings/experimental/ExperimentalFeatures.java	(revision 665)
+++ /trunk/src/org/expeditee/settings/experimental/ExperimentalFeatures.java	(revision 666)
@@ -1,11 +1,11 @@
 package org.expeditee.settings.experimental;
 
-import org.expeditee.setting.GenericSetting;
+import org.expeditee.setting.BooleanSetting;
 
 public class ExperimentalFeatures {
 
-	public static final GenericSetting<Boolean> AutoWrap = new GenericSetting<Boolean>(Boolean.class, "Enable auto wrapping of text", false);
+	public static final BooleanSetting AutoWrap = new BooleanSetting("Enable auto wrapping of text", false);
 	
-	public static final GenericSetting<Boolean> MousePan = new GenericSetting<Boolean>(Boolean.class, "Enable panning of the frame by shift-click and dragging the mouse", false);
+	public static final BooleanSetting MousePan = new BooleanSetting("Enable panning of the frame by shift-click and dragging the mouse", false);
 	
 }
Index: /trunk/src/org/expeditee/settings/network/NetworkSettings.java
===================================================================
--- /trunk/src/org/expeditee/settings/network/NetworkSettings.java	(revision 665)
+++ /trunk/src/org/expeditee/settings/network/NetworkSettings.java	(revision 666)
@@ -4,14 +4,13 @@
 import org.expeditee.gui.Frame;
 import org.expeditee.items.Text;
-import org.expeditee.network.FrameShare;
 import org.expeditee.setting.FrameSetting;
-import org.expeditee.setting.GenericSetting;
+import org.expeditee.setting.StringSetting;
 
 public abstract class NetworkSettings {
 	
 	// The URL to prepend to web searches
-	public static final GenericSetting<String> SearchEngine = new GenericSetting<String>(String.class, "The search engine for the JfxBrowser", "https://duckduckgo.com/?q=");
+	public static final StringSetting SearchEngine = new StringSetting("The search engine for the JfxBrowser", "https://duckduckgo.com/?q=");
 	
-	public static final GenericSetting<String> HomePage = new GenericSetting<String>(String.class, "The home page for the JfxBrowser", "https://duckduckgo.com");
+	public static final StringSetting HomePage = new StringSetting("The home page for the JfxBrowser", "https://duckduckgo.com");
 	
 	public static final FrameSetting FrameShare = new FrameSetting("Enable accessing remote frames") {
Index: /trunk/src/org/expeditee/settings/network/proxy/ProxySettings.java
===================================================================
--- /trunk/src/org/expeditee/settings/network/proxy/ProxySettings.java	(revision 665)
+++ /trunk/src/org/expeditee/settings/network/proxy/ProxySettings.java	(revision 666)
@@ -9,12 +9,12 @@
 import org.expeditee.items.widgets.WidgetCorner;
 import org.expeditee.items.widgets.WidgetEdge;
-import org.expeditee.setting.GenericSetting;
+import org.expeditee.setting.StringSetting;
 
 public abstract class ProxySettings {
 
-	public static final GenericSetting<String> Host = new GenericSetting<String>(String.class, "The host for the proxy", null);
-	public static final GenericSetting<String> Port = new GenericSetting<String>(String.class, "The port for the proxy (e.g. port 80)", "80");
-	public static final GenericSetting<String> User = new GenericSetting<String>(String.class, "Your username for the proxy", null);
-	public static final GenericSetting<String> Pass = new GenericSetting<String>(String.class, "Your password for the proxy", null);
+	public static final StringSetting Host = new StringSetting("The host for the proxy", null);
+	public static final StringSetting Port = new StringSetting("The port for the proxy (e.g. port 80)", "80");
+	public static final StringSetting User = new StringSetting("Your username for the proxy", null);
+	public static final StringSetting Pass = new StringSetting("Your password for the proxy", null);
 
 	public static void onParsed(Text text) {
