Index: trunk/src/org/expeditee/gui/management/ProfileManager.java
===================================================================
--- trunk/src/org/expeditee/gui/management/ProfileManager.java	(revision 1440)
+++ trunk/src/org/expeditee/gui/management/ProfileManager.java	(revision 1441)
@@ -28,8 +28,7 @@
 public class ProfileManager {
 
-	private static final String USER_NAME_PATTERN_INTERNAL = "USER_NAME";
 	private static final String DEFAULT = UserSettings.DEFAULT_PROFILE_NAME;
 	private static final String[] startPages = { "exploratorysearch", "webbrowser" };
-	public static final String USER_NAME_PATTERN = "${" + USER_NAME_PATTERN_INTERNAL + "}";
+	public static final String USER_NAME_FLAG = "${" + "USER.NAME" + "}";
 
 	public static Frame createProfile(String profileFor, Map<String, Setting> specifiedSettings,
@@ -85,5 +84,5 @@
 					if (item instanceof Text) {
 						String content = item.getText();
-						item.setText(ResourceUtil.substitute(content, ProfileManager.USER_NAME_PATTERN, profileFor));
+						item.setText(ResourceUtil.substitute(content, ProfileManager.USER_NAME_FLAG, profileFor));
 					}
 				}
Index: trunk/src/org/expeditee/gui/management/ResourceManager.java
===================================================================
--- trunk/src/org/expeditee/gui/management/ResourceManager.java	(revision 1440)
+++ trunk/src/org/expeditee/gui/management/ResourceManager.java	(revision 1441)
@@ -25,40 +25,8 @@
 	private static boolean commonInvalidated = false;
 	private static ResourceManager instance = new ResourceManager();
-	private static ResolvedDirectoryList frames = instance.new ResolvedDirectoryList(FolderSettings.FrameDirs);
-	private static ResolvedDirectoryList images = instance.new ResolvedDirectoryList(FolderSettings.ImageDirs);
-	private static ResolvedDirectoryList audio = instance.new ResolvedDirectoryList(FolderSettings.AudioDirs);
-	
-	/**
-	 * Attempts to relativise a image path using the users the directories listed for images in their settings.
-	 * @param path The path to attempt to relativise
-	 * @param context The context to use.  Most likely the Frame that the image is on.
-	 * @return Returns the most relativised path if one exists, otherwise returns a copy of the ref parameter passed in.
-	 */
-	/*public static Path relativiseImagePath(Path path, Frame context) {
-		String pathStr = path.toString();
-		
-		// Consult the resolved images directory for a list of paths to relativise too. 
-		List<String> directories = images.getDirectories(context);
-		
-		// Find the longest match that can be used to relativise the path.
-		String longestMatch = "";
-		for (String dir: directories) {
-			if (pathStr.startsWith(dir) && (dir.length() > longestMatch.length())) {
-				longestMatch = dir;
-			}
-		}
-		
-		return Paths.get(pathStr.replace(longestMatch, ""));
-	}*/
-	
-	public static Path relativiseImagePath(Path path, Frame context) {
-		Path expediteeHome = Paths.get(FrameIO.PARENT_FOLDER);
-		if (path.startsWith(expediteeHome)) {
-			return expediteeHome.relativize(path);
-		} else {
-			return path;
-		}
-	}
-			
+	protected static ResolvedDirectoryList frames = instance.new ResolvedDirectoryList(FolderSettings.FrameDirs);
+	protected static ResolvedDirectoryList images = instance.new ResolvedDirectoryList(FolderSettings.ImageDirs);
+	protected static ResolvedDirectoryList audio = instance.new ResolvedDirectoryList(FolderSettings.AudioDirs);
+	
 	/**
 	 * Creates a Frame object from an associated resour
@@ -256,5 +224,5 @@
 	}
 	
-	private class ResolvedDirectoryList {
+	protected class ResolvedDirectoryList {
 		private List<String> directories = null;
 		private String contextFramesetPath = null;
Index: trunk/src/org/expeditee/gui/management/ResourceUtil.java
===================================================================
--- trunk/src/org/expeditee/gui/management/ResourceUtil.java	(revision 1440)
+++ trunk/src/org/expeditee/gui/management/ResourceUtil.java	(revision 1441)
@@ -1,3 +1,10 @@
 package org.expeditee.gui.management;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+
+import org.expeditee.gui.Frame;
+import org.expeditee.gui.FrameIO;
 
 public class ResourceUtil {
@@ -10,4 +17,32 @@
 	public static final String CURRENT_FRAMESET_FLAG = "${CURRENT_FRAMESET}";
 	public static final String CURRENT_USER = "${CURRENT_USER}";
+	
+	/**
+	 * Attempts to relativise a image path using expeditee.home (FrameIO.PARENT_FOLDER).
+	 * @param path The path to attempt to relativise
+	 * @return Returns the most relativised path if one exists, otherwise returns a copy of the ref parameter passed in.
+	 */
+	public static Path relativiseImagePath(Path path) {
+		Path expediteeHome = Paths.get(FrameIO.PARENT_FOLDER);
+		if (path.startsWith(expediteeHome)) {
+			return expediteeHome.relativize(path);
+		} else {
+			return path;
+		}
+	}
+	
+	public static Path resolveImagePath(Path path, Frame context) {
+		List<String> directories = ResourceManager.images.getDirectories(context);
+		directories.add(FrameIO.PARENT_FOLDER);
+		
+		for (String dir: directories) {
+			Path canditate = Paths.get(dir).resolve(path);
+			if (canditate.toFile().exists()) {
+				return canditate;
+			}
+		}
+		
+		return null;
+	}
 	
 	/**
Index: trunk/src/org/expeditee/importer/ImageImporter.java
===================================================================
--- trunk/src/org/expeditee/importer/ImageImporter.java	(revision 1440)
+++ trunk/src/org/expeditee/importer/ImageImporter.java	(revision 1441)
@@ -34,5 +34,5 @@
 import org.expeditee.gui.FrameIO;
 import org.expeditee.gui.FrameUtils;
-import org.expeditee.gui.management.ResourceManager;
+import org.expeditee.gui.management.ResourceUtil;
 import org.expeditee.items.Item;
 import org.expeditee.items.Text;
@@ -89,5 +89,5 @@
 		Text source; 
 		Path imagePath = Paths.get(fullPath);
-		Path imagePathRelitivized = ResourceManager.relativiseImagePath(imagePath, DisplayController.getCurrentFrame());
+		Path imagePathRelitivized = ResourceUtil.relativiseImagePath(imagePath);
 		source = DragAndDropManager.importString("@i: " + imagePathRelitivized.toString() + size, location, attachToFreeItems);
 //		final Path imagesPath = Paths.get(FrameIO.IMAGES_PATH);
Index: trunk/src/org/expeditee/importer/pdfImporter.java
===================================================================
--- trunk/src/org/expeditee/importer/pdfImporter.java	(revision 1440)
+++ trunk/src/org/expeditee/importer/pdfImporter.java	(revision 1441)
@@ -39,5 +39,5 @@
 import org.expeditee.gui.FrameIO;
 import org.expeditee.gui.MessageBay;
-import org.expeditee.gui.management.ResourceManager;
+import org.expeditee.gui.management.ResourceUtil;
 import org.expeditee.items.Item;
 import org.expeditee.items.Text;
@@ -139,5 +139,5 @@
 			      //save it as a file
 			      Path p = Paths.get(framesetPath+i+".png");
-			      p = ResourceManager.relativiseImagePath(p, DisplayController.getCurrentFrame());
+			      p = ResourceUtil.relativiseImagePath(p);
 			      File out = p.toFile();
 			      bimg.writeToDisk("png", out);
Index: trunk/src/org/expeditee/items/Picture.java
===================================================================
--- trunk/src/org/expeditee/items/Picture.java	(revision 1440)
+++ trunk/src/org/expeditee/items/Picture.java	(revision 1441)
@@ -21,4 +21,8 @@
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 import java.text.DecimalFormat;
 
@@ -47,4 +51,5 @@
 import org.expeditee.gui.FrameUtils;
 import org.expeditee.gui.MessageBay;
+import org.expeditee.gui.management.ResourceUtil;
 
 /**
@@ -626,4 +631,22 @@
 		p._image = _image;
 		p._highlightMode = _highlightMode;
+		
+		String copyFileName = _fileName;
+		try {
+			String name = getName();
+			Path imageFilePath = ResourceUtil.resolveImagePath(Paths.get(name), this.getSource().getParent());
+			Path imageDirectoryPath = imageFilePath.getParent();
+			String fileName = name.substring(0, name.indexOf('.'));
+			String suffix = name.substring(name.indexOf('.'));
+			File copiedFile = File.createTempFile(fileName, suffix, imageDirectoryPath.toFile());
+			Path newFilePath = Files.copy(imageFilePath, Paths.get(copiedFile.getAbsolutePath()), StandardCopyOption.REPLACE_EXISTING);
+			Path newFilePathResolved = ResourceUtil.resolveImagePath(newFilePath.getFileName(), this.getSource().getParent());
+			Path newFilePathRelativeToExpediteeHome = ResourceUtil.relativiseImagePath(newFilePathResolved);
+			copyFileName = newFilePathRelativeToExpediteeHome.toString();
+		} catch (IOException e) {
+			MessageBay.displayMessage("Unable to duplicate image file, new copy refers to existing image file.");
+			MessageBay.displayMessage("Caused by IOException with message: " + e.getMessage());
+		}
+		
 		// Doing Duplicate item duplicates link mark which we dont want to do
 		// when in audience mode because the linkMark will be copied incorrectly
@@ -668,5 +691,5 @@
 		p._scaleType = _scaleType;
 		p._path = _path;
-		p._fileName = _fileName;
+		p._fileName = copyFileName;
 
 		p.updateSource();
Index: trunk/src/org/expeditee/settings/UserSettings.java
===================================================================
--- trunk/src/org/expeditee/settings/UserSettings.java	(revision 1440)
+++ trunk/src/org/expeditee/settings/UserSettings.java	(revision 1441)
@@ -69,5 +69,5 @@
     		String profileName = UserSettings.ProfileName.get();
 			if(text.getText().indexOf(':') == -1 || !text.hasLink()) {
-				if (!profileName.equals(ProfileManager.USER_NAME_PATTERN)) {
+				if (!profileName.equals(ProfileManager.USER_NAME_FLAG)) {
 					text.setLink(profileName + "1");
 				}
