Index: /trunk/src/org/expeditee/auth/account/Password.java
===================================================================
--- /trunk/src/org/expeditee/auth/account/Password.java	(revision 1499)
+++ /trunk/src/org/expeditee/auth/account/Password.java	(revision 1500)
@@ -35,4 +35,5 @@
 import org.expeditee.auth.tags.AuthenticationTag;
 import org.expeditee.encryption.CryptographyConstants;
+import org.expeditee.encryption.io.EncryptedExpReader;
 import org.expeditee.gui.DisplayController;
 import org.expeditee.gui.Frame;
@@ -336,26 +337,45 @@
 
 	public static void regainAccountAccess(Map<AuthenticationTag, String> userData) {
+		regainAccountAccess(userData, false);
+	}
+	
+	private static void regainAccountAccess(Map<AuthenticationTag, String> userData, boolean isAttemptTwo) {
 		// Store shares in map
 		Map<Integer, byte[]> contributingParts = new HashMap<Integer, byte[]>();
-		contributingParts.put(1, Base64.getDecoder().decode(userData.get(AuthenticationTag.PasswordSliceOne)));
-		contributingParts.put(2, Base64.getDecoder().decode(userData.get(AuthenticationTag.PasswordSliceTwo)));
-		
+		if (isAttemptTwo) {
+			contributingParts.put(1, Base64.getDecoder().decode(userData.get(AuthenticationTag.PasswordSliceTwo)));
+			contributingParts.put(2, Base64.getDecoder().decode(userData.get(AuthenticationTag.PasswordSliceOne)));
+		} else {
+			contributingParts.put(1, Base64.getDecoder().decode(userData.get(AuthenticationTag.PasswordSliceOne)));
+			contributingParts.put(2, Base64.getDecoder().decode(userData.get(AuthenticationTag.PasswordSliceTwo)));
+		}
+
 		// initialise shamir
 		int totalShares = 2;
 		int requiredShares = 2;
 		Scheme scheme = new Scheme(new SecureRandom(), totalShares, requiredShares);
-		
+
 		// perform joining
 		byte[] join = scheme.join(contributingParts);
-		
-		try {
-			// TODO: YIKES!  We can currently change anyone's password!
-			AuthenticatorBrowser.getInstance().putKey(userData.get(AuthenticationTag.Username), userData.get(AuthenticationTag.NewPassword), new SecretKeySpec(join, SymmetricAlgorithm));
+
+		try {
+			String username = userData.get(AuthenticationTag.Username);
+			SecretKey key = new SecretKeySpec(join, SymmetricAlgorithm);
+			String filePathCheck = Paths.get(FrameIO.PROFILE_PATH).resolve(username).resolve("1.exp").toAbsolutePath()
+					.toString();
+			if (EncryptedExpReader.isAccessibleExpediteeFile(filePathCheck, key)) {
+				AuthenticatorBrowser.getInstance().putKey(username, userData.get(AuthenticationTag.NewPassword), key);
+				MessageBay.displayMessage("Your new password has been set.");
+			} else {
+				if (isAttemptTwo) {
+					MessageBay.displayMessage("Invalid information given for changing password for " + username);
+				} else {
+					regainAccountAccess(userData, true);
+				}
+			}
 		} catch (KeyStoreException | NoSuchAlgorithmException | CertificateException | ClassNotFoundException
 				| IOException | SQLException e) {
 			e.printStackTrace();
 		}
-		
-		MessageBay.displayMessage("Your new password has been set.");
 	}
 }
Index: /trunk/src/org/expeditee/encryption/io/EncryptedExpReader.java
===================================================================
--- /trunk/src/org/expeditee/encryption/io/EncryptedExpReader.java	(revision 1499)
+++ /trunk/src/org/expeditee/encryption/io/EncryptedExpReader.java	(revision 1500)
@@ -2,4 +2,5 @@
 
 import java.io.BufferedReader;
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileReader;
@@ -77,4 +78,22 @@
 			return true;
 		}
+	}	
+	
+	public static boolean isAccessibleExpediteeFile(String path, SecretKey key) throws IOException {
+		try (BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8"))) {
+			String firstLine = in.readLine();
+			if (firstLine == null) return false;		
+			
+			if (firstLine.startsWith(ENCRYPTED_EXP_FLAG)) {
+				String secondLine = in.readLine();
+				byte[] toDecrypt = Base64.getDecoder().decode(secondLine);
+				byte[] decrypted = DecryptSymmetric(toDecrypt, key);
+				return decrypted != null;
+			} else {
+				// Not encrypted.  Returns false because the caller of this
+				// function is asking if this key is used to decrypt this file.
+				return false;
+			}
+		}
 	}
 	
@@ -326,5 +345,6 @@
 		} catch (final NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException
 				| IllegalBlockSizeException | BadPaddingException e) {
-			e.printStackTrace();
+			//e.printStackTrace();
+			System.err.println("Failed to decrypt '" + new String(toDecrypt) + "' with key " + new String(key.getEncoded()));
 			return null;
 		}
@@ -337,5 +357,5 @@
 			super(in);
 		}
-		
+				
 		@Override
 		/**
