Index: trunk/src/org/expeditee/gui/Frame.java
===================================================================
--- trunk/src/org/expeditee/gui/Frame.java	(revision 1228)
+++ trunk/src/org/expeditee/gui/Frame.java	(revision 1229)
@@ -101,4 +101,5 @@
 
 	private String _modifiedDate = null;
+	private long _modifiedDatePrecise;
 
 	private String _frozenDate = null;
@@ -803,8 +804,21 @@
 	 * @param date
 	 *            The date to set as the last modified date.
-	 */
-	public void setLastModifyDate(String date)
-	{
+	 * @param precise The millisecond precision last modified date.
+	 */
+	public void setLastModifyDate(String date, long precise) {
 		_modifiedDate = date;
+		_modifiedDatePrecise = precise;
+	}
+	
+	/**
+	 * Sets the last modified date of this Frame to the given String.
+	 * Used during startup.  If able to be more precise then use the overloaded function.
+	 * 
+	 * @param date
+	 *            The date to set as the last modified date.
+	 */
+	public void setLastModifyDate(String date) {
+		_modifiedDate = date;
+		_modifiedDatePrecise = -1l;
 	}
 
@@ -815,6 +829,5 @@
 	 *            The date to set as the last frozen date.
 	 */
-	public void setFrozenDate(String date)
-	{
+	public void setFrozenDate(String date)	{
 		_frozenDate = date;
 	}
@@ -1198,7 +1211,10 @@
 	}
 
-	public String getLastModifyDate()
-	{
+	public String getLastModifyDate() {
 		return _modifiedDate;
+	}
+	
+	public long getLastModifyPrecise() {
+		return _modifiedDatePrecise;
 	}
 
Index: trunk/src/org/expeditee/gui/FrameIO.java
===================================================================
--- trunk/src/org/expeditee/gui/FrameIO.java	(revision 1228)
+++ trunk/src/org/expeditee/gui/FrameIO.java	(revision 1229)
@@ -220,5 +220,11 @@
 			Logger.Log(Logger.SYSTEM, Logger.LOAD, "Loading " + frameName + " from cache.");
 			Frame frame = _Cache.get(frameNameLower);
-			return frame;
+			
+			// if frame is cache is older than the one on disk then don't use the cached one
+			String p = frame.getPath() + frame.getNumber() + ".exp";
+			File file = new File(p);
+			if (file.lastModified() <= frame.getLastModifyPrecise()) {
+				return frame;
+			}
 		}
 
@@ -230,46 +236,45 @@
 
 	//Loads the 'restore' version of a frame if there is one
-		public static Frame LoadRestoreFrame(Frame frameToRestore) {			
+	public static Frame LoadRestoreFrame(Frame frameToRestore) {			
 			
-			String fullPath = getFrameFullPathName(frameToRestore.getPath(), frameToRestore
-					.getName());
-			//System.out.println("fullpath: " + fullPath);
-			String restoreVersion = fullPath + ".restore";
-			//System.out.println("restoreversion" + restoreVersion);
-			File source = new File(restoreVersion);
-			File dest = new File(fullPath);
-			
-			FileChannel inputChannel = null;
-			FileChannel outputChannel = null;
-			
-			try{
-					FileInputStream source_fis = new FileInputStream(source);
-					inputChannel = source_fis.getChannel();
-					
-					FileOutputStream dest_fos = new FileOutputStream(dest);
-					outputChannel = dest_fos.getChannel();
-					
-					outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
-					inputChannel.close();
-					outputChannel.close();
-					source_fis.close();
-					dest_fos.close();
-			}		 
-			catch(Exception e){
+		String fullPath = getFrameFullPathName(frameToRestore.getPath(), frameToRestore
+				.getName());
+		//System.out.println("fullpath: " + fullPath);
+		String restoreVersion = fullPath + ".restore";
+		//System.out.println("restoreversion" + restoreVersion);
+		File source = new File(restoreVersion);
+		File dest = new File(fullPath);
+		
+		FileChannel inputChannel = null;
+		FileChannel outputChannel = null;
+		
+		try{
+				FileInputStream source_fis = new FileInputStream(source);
+				inputChannel = source_fis.getChannel();
 				
-				System.err.println("No restore point detected.");
-			}
-			String frameName = frameToRestore.getName();
-			String frameNameLower = frameName.toLowerCase();
-			
-			// first try reading from cache
-			if (isCacheOn() && _Cache.containsKey(frameNameLower)) {
-				Logger.Log(Logger.SYSTEM, Logger.LOAD, "Clearing " + frameName
-						+ " from cache.");
-				_Cache.remove(frameNameLower);				
-			}
-			
-			return LoadFrame(frameName, frameToRestore.getPath(), true);
-		}		
+				FileOutputStream dest_fos = new FileOutputStream(dest);
+				outputChannel = dest_fos.getChannel();
+				
+				outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
+				inputChannel.close();
+				outputChannel.close();
+				source_fis.close();
+				dest_fos.close();
+		}		 
+		catch(Exception e){	
+			System.err.println("No restore point detected.");
+		}
+		String frameName = frameToRestore.getName();
+		String frameNameLower = frameName.toLowerCase();
+		
+		// first try reading from cache
+		if (isCacheOn() && _Cache.containsKey(frameNameLower)) {
+			Logger.Log(Logger.SYSTEM, Logger.LOAD, "Clearing " + frameName
+					+ " from cache.");
+			_Cache.remove(frameNameLower);				
+		}
+		
+		return LoadFrame(frameName, frameToRestore.getPath(), true);
+	}		
 		
 	public static BufferedReader LoadPublicFrame(String frameName) {
@@ -1809,5 +1814,5 @@
 
 	public static void setSavedProperties(Frame toSave) {
-		toSave.setLastModifyDate(Formatter.getDateTime());
+		toSave.setLastModifyDate(Formatter.getDateTime(), System.currentTimeMillis());
 		toSave.setLastModifyUser(UserSettings.UserName.get());
 		toSave.setVersion(toSave.getVersion() + 1);
