Index: trunk/src/org/expeditee/auth/Actions.java
===================================================================
--- trunk/src/org/expeditee/auth/Actions.java	(revision 1282)
+++ trunk/src/org/expeditee/auth/Actions.java	(revision 1283)
@@ -100,5 +100,5 @@
 		if (!DisplayController.isMailMode()) {
 			Mail.clear();
-			Authenticator.getInstance().loadMailDatabase();
+			AuthenticatorBrowser.getInstance().loadMailDatabase();
 		}
 		DisplayController.ToggleMailMode();
@@ -172,5 +172,5 @@
 			createAccount(userData);
 			login(userData);
-			Authenticator.Authenticated = true;
+			AuthenticatorBrowser.Authenticated = true;
 		} else {
 			MessageBay.errorMessage(Constants.ERROR_INSUFFICIENT_INFORMATION_PROVIDED);
@@ -189,5 +189,5 @@
 		if (userdata.isPresent()) { 
 			login(userdata.get());
-			Authenticator.Authenticated = true;
+			AuthenticatorBrowser.Authenticated = true;
 		} else {
 			MessageBay.errorMessage(Constants.ERROR_INSUFFICIENT_INFORMATION_PROVIDED);
@@ -211,5 +211,5 @@
 		final Collection<Text> textItems = DisplayController.getCurrentFrame().getTextItems();
 		
-		if (!Authenticator.Authenticated) {
+		if (!AuthenticatorBrowser.Authenticated) {
 			MessageBay.errorMessage(Constants.ERROR_MUST_BE_LOGGED_IN);
 		} else {
@@ -230,5 +230,5 @@
 	
 	public static void AuthGotoAccountManagement() {
-		if (Authenticator.Authenticated) {
+		if (AuthenticatorBrowser.Authenticated) {
 			DisplayController.setCurrentFrame(FrameIO.LoadFrame(Constants.FRAME_MULTIUSER1), false);
 		} else {
@@ -284,5 +284,5 @@
 		Collection<Text> textItems = currentFrame.getTextItems();
 		
-		if (!Authenticator.Authenticated) {
+		if (!AuthenticatorBrowser.Authenticated) {
 			MessageBay.errorMessage(Constants.ERROR_MUST_BE_LOGGED_IN);
 			return;
@@ -369,5 +369,5 @@
 		rand.nextBytes(keyBytes);
 		SecretKey key = new SecretKeySpec(keyBytes, SymmetricAlgorithm);
-		Authenticator.getInstance().putKey(username, password, key);
+		AuthenticatorBrowser.getInstance().putKey(username, password, key);
 		String personalKey = Base64.getEncoder().encodeToString(key.getEncoded());
 		//	Public and private keys
@@ -401,5 +401,5 @@
 		Map<String, Consumer<Frame>> notifiers = new HashMap<String, Consumer<Frame>>();
 		notifiers.put(Constants.SETTINGS_AUTH, frame -> {
-			Authenticator.CREDENTIALS_FRAME = frame.getNumber();
+			AuthenticatorBrowser.CREDENTIALS_FRAME = frame.getNumber();
 			Collection<Text> textItems = frame.getTextItems();
 			for (Text t: textItems) {
@@ -424,5 +424,5 @@
 			f.getAllItems().stream().forEach(item -> item.setOwner(username));
 			f.setChanged(true);
-			if (f.getNumber() != Authenticator.CREDENTIALS_FRAME) {
+			if (f.getNumber() != AuthenticatorBrowser.CREDENTIALS_FRAME) {
 				f.setEncryptionLabel("Profile");
 			}
@@ -441,5 +441,5 @@
 		}
 		
-		if (Authenticator.CREDENTIALS_FRAME == -1) {
+		if (AuthenticatorBrowser.CREDENTIALS_FRAME == -1) {
 			System.err.println("authActions::Unable to establish credentials frame for new profile frame.  Account creation failed.");
 			return;
@@ -456,11 +456,11 @@
 		credentialsFile.createNewFile();
 		FileWriter out = new FileWriter(credentialsFile);
-		out.write(Authenticator.CREDENTIALS_FRAME + ".exp");
+		out.write(AuthenticatorBrowser.CREDENTIALS_FRAME + ".exp");
 		out.flush();
 		out.close();
 		//	migrate credentials frame
-		Frame credentialsFrame = FrameIO.LoadFrame(username + Authenticator.CREDENTIALS_FRAME);
+		Frame credentialsFrame = FrameIO.LoadFrame(username + AuthenticatorBrowser.CREDENTIALS_FRAME);
 		Path destinationDirectory = Paths.get(credentialsDir.getAbsolutePath());
-		Path destinationFile = destinationDirectory.resolve(Authenticator.CREDENTIALS_FRAME + ExpReader.EXTENTION);
+		Path destinationFile = destinationDirectory.resolve(AuthenticatorBrowser.CREDENTIALS_FRAME + ExpReader.EXTENTION);
 		FrameIO.migrateFrame(credentialsFrame, destinationFile);
 		
@@ -498,5 +498,5 @@
 		
 		try {
-			personalKey = Authenticator.getInstance().getSecretKey(username, password);
+			personalKey = AuthenticatorBrowser.getInstance().getSecretKey(username, password);
 		} catch (Exception e) {
 			// leave personalKey null
@@ -523,5 +523,5 @@
 
 		Frame oneFrame = null;
-		if (!username.equals(Authenticator.ADMINACCOUNT)) {
+		if (!username.equals(AuthenticatorBrowser.ADMINACCOUNT)) {
 			// Load in and cache the profile frame using the personal key fetched from keystore.
 			// Reset the personal key once finished so that setting parsing can correctly set it.
@@ -534,6 +534,6 @@
 			for (int i = 1; i <= FrameIO.getLastNumber(username); i++) {
 				Frame f = FrameIO.LoadFrame(oneFrame.getFramesetName() + i);
-				if (f.getData() != null && f.getData().contains("MultiuserCredentials")) {
-					Authenticator.CREDENTIALS_FRAME = f.getNumber();
+				if (f != null && f.getData() != null && f.getData().contains("MultiuserCredentials")) {
+					AuthenticatorBrowser.CREDENTIALS_FRAME = f.getNumber();
 				}
 			}
@@ -549,5 +549,5 @@
 			// Check mail
 			MailBay.clear();
-			Authenticator.getInstance().loadMailDatabase();
+			AuthenticatorBrowser.getInstance().loadMailDatabase();
 			Text keyItem = org.expeditee.settings.identity.secrets.KeyList.PrivateKey.get();
 			if (keyItem.getData() != null) {
@@ -555,11 +555,19 @@
 				byte[] keyBytes = Base64.getDecoder().decode(keyEncoded);
 				PrivateKey key = KeyFactory.getInstance(AsymmetricAlgorithm).generatePrivate(new PKCS8EncodedKeySpec(keyBytes));
-				List<MailEntry> mailForLoggingInUser = Mail.getEntries(UserSettings.UserName.get(), key);
+				List<MailEntry> mailForLoggingInUser = Mail.getEntries(UserSettings.UserName.get(), key);			
 				for (MailEntry mail: mailForLoggingInUser) {
 					MailBay.addMessage(mail.timestamp, mail.message, mail.message2, mail.options);
 				}
 			}
+			Path deadDropPath = Paths.get(FrameIO.DEAD_DROPS_PATH);
+			for (File connectionDir: deadDropPath.toFile().listFiles()) {
+				if (connectionDir.isDirectory()) {
+					Path deaddropforcontactPath = Paths.get(connectionDir.getAbsolutePath());
+					AuthenticatorBrowser.getInstance().updateLastReadMailTime(deaddropforcontactPath);
+				}
+			}
+			
 		} else {
-			UserSettings.UserName.set(Authenticator.ADMINACCOUNT);
+			UserSettings.UserName.set(AuthenticatorBrowser.ADMINACCOUNT);
 			oneFrame = FrameIO.LoadFrame("multiuser1");
 		}
@@ -606,6 +614,6 @@
 		String colleagueOne = userData.get(AuthenticationTag.ColleagueOne);
 		String colleagueTwo = userData.get(AuthenticationTag.ColleagueTwo);
-		PublicKey colleagueOneKey = Authenticator.getInstance().getPublicKey(colleagueOne);
-		PublicKey colleagueTwoKey = Authenticator.getInstance().getPublicKey(colleagueTwo);
+		PublicKey colleagueOneKey = AuthenticatorBrowser.getInstance().getPublicKey(colleagueOne);
+		PublicKey colleagueTwoKey = AuthenticatorBrowser.getInstance().getPublicKey(colleagueTwo);
 		if (colleagueOneKey == null) {
 			MessageBay.errorMessage("Unable to get public key for colleague: " + colleagueOne);
@@ -626,5 +634,5 @@
 			mail = new MailEntry(time, sender, colleagueTwo, topic, message, arguments);
 			Mail.sendMail(mail, colleagueTwo);
-			Authenticator.getInstance().markRequestedColleagues(UserSettings.UserName.get());
+			AuthenticatorBrowser.getInstance().markRequestedColleagues(UserSettings.UserName.get());
 			return true;
 		}
@@ -661,9 +669,9 @@
 		final String newpassword = userdata.get(AuthenticationTag.NewPassword);
 
-		final SecretKey key = Authenticator.getInstance().getSecretKey(username, password);
+		final SecretKey key = AuthenticatorBrowser.getInstance().getSecretKey(username, password);
 		if (key == null) {
 			MessageBay.errorMessage("The username + existing password combination was incorrect.");
 		} else {
-			Authenticator.getInstance().putKey(username, newpassword, key);
+			AuthenticatorBrowser.getInstance().putKey(username, newpassword, key);
 			MessageBay.displayMessage("Password changed successfully.");
 		}
Index: trunk/src/org/expeditee/auth/Mail.java
===================================================================
--- trunk/src/org/expeditee/auth/Mail.java	(revision 1282)
+++ trunk/src/org/expeditee/auth/Mail.java	(revision 1283)
@@ -2,4 +2,5 @@
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.nio.file.Path;
@@ -17,10 +18,14 @@
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Base64;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Scanner;
 
 import javax.crypto.BadPaddingException;
@@ -78,5 +83,5 @@
 		PublicKey publicKey = null;
 		try {
-			publicKey = Authenticator.getInstance().getPublicKey(colleagueName);
+			publicKey = AuthenticatorBrowser.getInstance().getPublicKey(colleagueName);
 		} catch (InvalidKeySpecException | NoSuchAlgorithmException | KeyStoreException | CertificateException
 				| ClassNotFoundException | IOException | SQLException e) {
@@ -182,6 +187,21 @@
 				}
 				
-				//String arguments = new String(c.doFinal(Base64.getDecoder().decode(mail.args)));
-				filtered.add(new MailEntry(mail.timestamp, sender, receiverDecrypted, message, message2, options));
+				Path lastAccessedFile = Paths.get(FrameIO.DEAD_DROPS_PATH).resolve(sender).resolve(name + ".last-accessed");
+				SimpleDateFormat format = new SimpleDateFormat("ddMMMyyyy[HH:mm]");
+				MailEntry mailEntry = new MailEntry(mail.timestamp, sender, receiverDecrypted, message, message2, options);
+				try (Scanner in = new Scanner(lastAccessedFile.toFile())) {
+					Date lastAccessedTimestamp = format.parse(in.nextLine());
+					Date mailTimestamp = format.parse(mail.timestamp);
+					if (mailTimestamp.after(lastAccessedTimestamp)) {
+						filtered.add(mailEntry);
+					}
+				} catch (FileNotFoundException e) {
+					// It may not have been created yet, then err on the safe side and add it in.
+					filtered.add(mailEntry);
+				} catch (ParseException e) {
+					// If we fail to parse, then err on the safe side and add it in.
+					filtered.add(mailEntry);
+				}			
+				
 			}
 		}
Index: trunk/src/org/expeditee/gui/FrameCreator.java
===================================================================
--- trunk/src/org/expeditee/gui/FrameCreator.java	(revision 1282)
+++ trunk/src/org/expeditee/gui/FrameCreator.java	(revision 1283)
@@ -115,5 +115,5 @@
 		int lastNumber = FrameIO.getLastNumber(framesetName);
 		for (int i = 1; i <= lastNumber; i++) {
-			Frame frame = FrameIO.LoadFrame(framesetName + i, path.toAbsolutePath().toString());
+			Frame frame = FrameIO.LoadFrame(framesetName + i, path.toAbsolutePath().toString() + File.separator);
 			this.framesCreated.add(frame);
 		}
@@ -147,6 +147,4 @@
 			resetGlobals(toUse);
 			_firstFrame = toUse;
-			
-			path.toAbsolutePath().resolve(framesetName);
 		} catch (InvalidFramesetNameException e) {
 			e.printStackTrace();
Index: trunk/src/org/expeditee/gui/FrameIO.java
===================================================================
--- trunk/src/org/expeditee/gui/FrameIO.java	(revision 1282)
+++ trunk/src/org/expeditee/gui/FrameIO.java	(revision 1283)
@@ -50,5 +50,5 @@
 import org.expeditee.agents.ExistingFramesetException;
 import org.expeditee.agents.InvalidFramesetNameException;
-import org.expeditee.auth.Authenticator;
+import org.expeditee.auth.AuthenticatorBrowser;
 import org.expeditee.auth.EncryptedExpReader;
 import org.expeditee.auth.EncryptedExpWriter;
@@ -375,5 +375,5 @@
 			List<String> directoriesToSearch = FolderSettings.FrameDirs.getAbsoluteDirs();
 			
-			if (Authenticator.Authenticated) {
+			if (AuthenticatorBrowser.Authenticated) {
 				// if we are running Expeditee Authenticated, consult user profile as location for framesets first
 				String profilePath = FrameIO.PROFILE_PATH + UserSettings.UserName.get() + File.separator;
@@ -1102,5 +1102,5 @@
 			// if its a new frame or an existing Exp frame...
 			if (fullPath == null || fullPath.endsWith(ExpReader.EXTENTION)) {				
-				if (toSave.getNumber() != Authenticator.CREDENTIALS_FRAME && 
+				if (toSave.getNumber() != AuthenticatorBrowser.CREDENTIALS_FRAME && 
 						toSave.getEncryptionLabel() != null) {
 					writer = new EncryptedExpWriter(toSave.getEncryptionLabel());
