diff --git a/openid-connect-common/src/main/java/org/mitre/openid/connect/model/DefaultUserInfo.java b/openid-connect-common/src/main/java/org/mitre/openid/connect/model/DefaultUserInfo.java
index d631f08a2..a486d8ef9 100644
--- a/openid-connect-common/src/main/java/org/mitre/openid/connect/model/DefaultUserInfo.java
+++ b/openid-connect-common/src/main/java/org/mitre/openid/connect/model/DefaultUserInfo.java
@@ -32,7 +32,8 @@ import com.google.gson.JsonObject;
 @Entity
 @Table(name="user_info")
 @NamedQueries({
-	@NamedQuery(name="DefaultUserInfo.getAll", query = "select u from DefaultUserInfo u")
+	@NamedQuery(name="DefaultUserInfo.getAll", query = "select u from DefaultUserInfo u"),
+	@NamedQuery(name="DefaultUserInfo.getByUsername", query = "select u from DefaultUserInfo u WHERE u.preferredUsername = :username")	
 })
 public class DefaultUserInfo implements UserInfo {
 	
diff --git a/openid-connect-common/src/main/java/org/mitre/openid/connect/repository/UserInfoRepository.java b/openid-connect-common/src/main/java/org/mitre/openid/connect/repository/UserInfoRepository.java
index b60f12e59..379333502 100644
--- a/openid-connect-common/src/main/java/org/mitre/openid/connect/repository/UserInfoRepository.java
+++ b/openid-connect-common/src/main/java/org/mitre/openid/connect/repository/UserInfoRepository.java
@@ -66,6 +66,13 @@ public interface UserInfoRepository {
 	 * 
 	 * @return the UserInfo collection, or null
 	 */
-	public Collection<? extends UserInfo> getAll();	
+	public Collection<? extends UserInfo> getAll();
+
+	/**
+	 * Get a UserInfo object by its preferred_username field
+	 * @param username
+	 * @return
+	 */
+	public UserInfo getByUsername(String username);	
 	
 }
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaUserInfoRepository.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaUserInfoRepository.java
index 223212e3c..45953637c 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaUserInfoRepository.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/repository/impl/JpaUserInfoRepository.java
@@ -16,6 +16,7 @@
 package org.mitre.openid.connect.repository.impl;
 
 import static org.mitre.util.jpa.JpaUtil.saveOrUpdate;
+import static org.mitre.util.jpa.JpaUtil.getSingleResult;
 
 import java.util.Collection;
 
@@ -82,10 +83,21 @@ public class JpaUserInfoRepository implements UserInfoRepository {
 	@Transactional	
 	public Collection<DefaultUserInfo> getAll() {
 		
-		TypedQuery<DefaultUserInfo> query = manager.createNamedQuery(
-				"DefaultUserInfo.getAll", DefaultUserInfo.class);
+		TypedQuery<DefaultUserInfo> query = manager.createNamedQuery("DefaultUserInfo.getAll", DefaultUserInfo.class);
 		
 		return query.getResultList();
 	}
 
+	/**
+	 * Get a single UserInfo object by its username
+	 */
+	@Override
+    public UserInfo getByUsername(String username) {
+		TypedQuery<DefaultUserInfo> query = manager.createNamedQuery("DefaultUserInfo.getByUsername", DefaultUserInfo.class);
+		query.setParameter("username", username);
+		
+		return getSingleResult(query.getResultList());
+		
+    }
+
 }
diff --git a/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/UserInfoUserDetailsService.java b/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/UserInfoUserDetailsService.java
index e2bf2e41a..ae933abf1 100644
--- a/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/UserInfoUserDetailsService.java
+++ b/openid-connect-server/src/main/java/org/mitre/openid/connect/service/impl/UserInfoUserDetailsService.java
@@ -16,6 +16,12 @@ import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 
+/**
+ * A UserDetailsService backed by a UserInfoRepository.
+ *  
+ * @author jricher
+ *
+ */
 @Service("userInfoUserDetailsService")
 public class UserInfoUserDetailsService implements UserDetailsService {
 	
@@ -28,25 +34,14 @@ public class UserInfoUserDetailsService implements UserDetailsService {
     private List<String> admins = new ArrayList<String>();
     
 	@Override
-	public UserDetails loadUserByUsername(String username)
-			throws UsernameNotFoundException {
-		UserInfo userInfo = repository.getByUserId(username);
+	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+		UserInfo userInfo = repository.getByUsername(username);
 		
 		if (userInfo != null) {
 		
 			// TODO: make passwords configurable? part of object?
 			String password = "password";
 			
-	        boolean enabled = true;
-	        /*
-	         * TODO: this was for a MITRE-specific flag
-	        if(userInfo.getDeleteFlag() > 0){
-	        	enabled = false;
-	        }
-	        */
-	        boolean accountNonExpired = true;
-	        boolean credentialsNonExpired = true;
-	        boolean accountNonLocked = true;
 	        List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
 	        authorities.add(ROLE_USER);
 	        
@@ -55,10 +50,10 @@ public class UserInfoUserDetailsService implements UserDetailsService {
 	        }
 	        
 	        // TODO: this should really be our own UserDetails wrapper class, shouldn't it?
-			User user = new User(userInfo.getPreferredUsername(), password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
+			User user = new User(userInfo.getUserId(), password, authorities);
 			return user;
 		} else {
-			return null;
+			throw new UsernameNotFoundException("Could not find username: " + username);
 		}
 	}