diff --git a/README.md b/README.md
index 67e01f8fbf5c31d431b27ff0a483c79fea9aebdc..418c7bb926f80e1f549415a6c28838ba184f2506 100644
--- a/README.md
+++ b/README.md
@@ -60,7 +60,8 @@ and get back an instance of [UWUserDetails](uw-spring-security-core/src/main/jav
   customLogoutUrl: null,
   isisEmplid: null,
   firstName: null,
-  lastName: null
+  lastName: null,
+  displayName: null
 }
 ```
 
diff --git a/pom.xml b/pom.xml
index d88cecb56408bcab42a5b76414a35286a1c7aaae..b6ffba44adee4ee79d2a3560b3ba8227893d67f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>edu.wisc.uwss</groupId>
 	<artifactId>uw-spring-security</artifactId>
-	<version>1.7.1-SNAPSHOT</version>
+	<version>1.8.0-SNAPSHOT</version>
 	<packaging>pom</packaging>
 	<name>UW Spring Security Parent</name>
 	<description>Parent project for module to integrate Spring Security with UW authentication mechanism.</description>
@@ -29,6 +29,10 @@
 			<id>code.doit-uw-releases</id>
 			<url>https://code.doit.wisc.edu/maven/content/repositories/uw-releases/</url>
 		</repository>
+		<repository>
+			<id>code.doit-public-releases</id>
+			<url>https://code.doit.wisc.edu/maven/content/repositories/public-releases</url>
+		</repository>
 	</repositories>
 
 	<properties>
@@ -62,24 +66,33 @@
 		    </dependency>
 		    <dependency>
                 <groupId>edu.wisc.services.uds</groupId>
-                <artifactId>uds-person-data-model-1.1</artifactId>
-                <version>1.1.0</version>
+                <artifactId>uds-person-data-model-1.2</artifactId>
+                <version>1.0.0</version>
+            </dependency>
+
+            <dependency>
+                <groupId>edu.wisc.services.uds</groupId>
+                <artifactId>uds-person-client-java</artifactId>
+                <version>2.0.0</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.apache.santuario</groupId>
+                        <artifactId>xmlsec</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework.security</groupId>
+                        <artifactId>spring-security-core</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework.ws</groupId>
+                        <artifactId>spring-ws-core</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework.ws</groupId>
+                        <artifactId>spring-ws-security</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
-			<dependency>
-				<groupId>edu.wisc.services.uds</groupId>
-    			<artifactId>uds-person-ws</artifactId>
-    			<version>1.1.0</version>
-    			<exclusions>
-    				<exclusion>
-    					<groupId>org.springframework.ws</groupId>
-    					<artifactId>spring-ws-core</artifactId>
-    				</exclusion>
-    				<exclusion>
-    					<groupId>org.springframework.ws</groupId>
-    					<artifactId>spring-ws-security</artifactId>
-    				</exclusion>
-    			</exclusions>
-			</dependency>
 			<dependency>
 				<groupId>edu.wisc.uwss</groupId>
 				<artifactId>uw-spring-security-config</artifactId>
diff --git a/uw-spring-security-config/pom.xml b/uw-spring-security-config/pom.xml
index bebbdf2853c5b67874df00e813ddf8a101e9faa5..1a97f83e105f07c18ac6f70a911d4525c5a58e3b 100644
--- a/uw-spring-security-config/pom.xml
+++ b/uw-spring-security-config/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>edu.wisc.uwss</groupId>
 		<artifactId>uw-spring-security</artifactId>
-		<version>1.7.1-SNAPSHOT</version>
+		<version>1.8.0-SNAPSHOT</version>
 	</parent>
 	<artifactId>uw-spring-security-config</artifactId>
 	<name>UW Spring Security Configuration</name>
diff --git a/uw-spring-security-config/src/main/resources/edu/wisc/uwss/configuration/uwss-SAMPLE.properties b/uw-spring-security-config/src/main/resources/edu/wisc/uwss/configuration/uwss-SAMPLE.properties
index 9d0eae9645f0c3a6a6562c7cceeb9e75bdd442dc..a5665dc122a64206fe2f35201a29ef4a4293b060 100644
--- a/uw-spring-security-config/src/main/resources/edu/wisc/uwss/configuration/uwss-SAMPLE.properties
+++ b/uw-spring-security-config/src/main/resources/edu/wisc/uwss/configuration/uwss-SAMPLE.properties
@@ -6,6 +6,7 @@ preauth.headerValues=admin;admin@wisc.edu;UW000A000;Amy Administrator;A535000;am
 #preauth.pviHeader=wiscedupvi
 #preauth.usernameHeader=uid
 #preauth.fullnameHeader=cn
+#preauth.displayNameHeader=displayName
 #preauth.uddsHeader=wisceduudds
 #preauth.emailAddressHeader=mail
 #preauth.identityProviderHeader=Shib-Identity-Provider
diff --git a/uw-spring-security-core/pom.xml b/uw-spring-security-core/pom.xml
index 01a792994658c74821fb6e774e3dae563c74d43d..ab0c2022f2ec257c8225c4cc96d16cf17ce88830 100644
--- a/uw-spring-security-core/pom.xml
+++ b/uw-spring-security-core/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>edu.wisc.uwss</groupId>
 		<artifactId>uw-spring-security</artifactId>
-		<version>1.7.1-SNAPSHOT</version>
+		<version>1.8.0-SNAPSHOT</version>
 	</parent>
 	<artifactId>uw-spring-security-core</artifactId>
 	<name>UW Spring Security Core</name>
@@ -18,10 +18,14 @@
 			<groupId>com.fasterxml.jackson.dataformat</groupId>
 			<artifactId>jackson-dataformat-yaml</artifactId>
 		</dependency>
-		<dependency>
+		<!--<dependency>
 			<groupId>edu.wisc.services.uds</groupId>
     		<artifactId>uds-person-ws</artifactId>
-    	</dependency>
+    	</dependency>-->
+		<dependency>
+			<groupId>edu.wisc.services.uds</groupId>
+			<artifactId>uds-person-client-java</artifactId>
+		</dependency>
 		<dependency>
 			<groupId>javax.servlet</groupId>
 			<artifactId>javax.servlet-api</artifactId>
diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetails.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetails.java
index d0e6954bf82b420570ade3498ebe3dc244588373..2c63fc665f2f5d1fecce4b03471833b3d9ac77b6 100644
--- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetails.java
+++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetails.java
@@ -47,6 +47,13 @@ public interface UWUserDetails extends UserDetails {
    */
   String getFullName();
 
+  /**
+   * The Display Name is the preferred name if the user has set one, otherwise is simply
+   * the full name.
+   * @return the display name for this user, or null if not available
+   */
+  String getDisplayName();
+
   /**
    * @return a never null, but potentially empty, {@link Collection} of {@link String}s each
    *         representing the UDDS Ids of the groups this user is a member of.
diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetailsImpl.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetailsImpl.java
index 00ed3537d96b8bd2e8df0be9a2d728aad0f6b52a..6fdd401928c3668ebc71c9574e613327df0370c2 100644
--- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetailsImpl.java
+++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetailsImpl.java
@@ -39,6 +39,8 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia
   private String isisEmplid;
   private String firstName;
   private String lastName;
+  private String displayName;
+
   /**
    * 
    * @param pvi
@@ -126,6 +128,7 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia
     setSource(original.getSource());
     setFirstName(original.getFirstName());
     setLastName(original.getLastName());
+    setDisplayName(original.getDisplayName());
   }
 
   /* (non-Javadoc)
@@ -140,6 +143,15 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia
     return this.fullName;
   }
 
+  public String getDisplayName() {
+    return this.displayName;
+  }
+
+  public UWUserDetailsImpl setDisplayName(String displayName) {
+    this.displayName = displayName;
+    return this;
+  }
+
   public Collection<String> getUddsMembership() {
     return uddsMembership;
   }
@@ -214,6 +226,7 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia
     .append("; ");
     sb.append("Source: ").append(getSource()).append("; ");
     sb.append("Emplid: ").append(getIsisEmplid()).append("; ");
+    sb.append("DisplayName: ").append(getDisplayName()).append("; ");
     sb.append("Custom Logout Url: ").append(getCustomLogoutUrl());
     
     return sb.toString();
@@ -271,6 +284,7 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia
     if (eppn != null ? !eppn.equals(that.eppn) : that.eppn != null) return false;
     if (pvi != null ? !pvi.equals(that.pvi) : that.pvi != null) return false;
     if (fullName != null ? !fullName.equals(that.fullName) : that.fullName != null) return false;
+    if (displayName != null ? !displayName.equals(that.displayName) : that.displayName != null) return false;
     if (uddsMembership != null ? !uddsMembership.equals(that.uddsMembership) : that.uddsMembership != null)
       return false;
     if (emailAddress != null ? !emailAddress.equals(that.emailAddress) : that.emailAddress != null)
@@ -292,6 +306,7 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia
     result = 31 * result + (eppn != null ? eppn.hashCode() : 0);
     result = 31 * result + (pvi != null ? pvi.hashCode() : 0);
     result = 31 * result + (fullName != null ? fullName.hashCode() : 0);
+    result = 31 * result + (displayName != null ? displayName.hashCode() : 0);
     result = 31 * result + (uddsMembership != null ? uddsMembership.hashCode() : 0);
     result = 31 * result + (emailAddress != null ? emailAddress.hashCode() : 0);
     result = 31 * result + (source != null ? source.hashCode() : 0);
diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUsersUdsPersonServiceImpl.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUsersUdsPersonServiceImpl.java
index a499be1f21ce3247f6ce693091b906f9d5cb3dca..66e6d903aedff90310c2c9f92c70222fae727194 100644
--- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUsersUdsPersonServiceImpl.java
+++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUsersUdsPersonServiceImpl.java
@@ -12,15 +12,15 @@ import org.springframework.context.annotation.Profile;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 
-import edu.wisc.services.uds.person.v1_1.Appointment;
-import edu.wisc.services.uds.person.v1_1.Appointments;
-import edu.wisc.services.uds.person.v1_1.Demographic;
-import edu.wisc.services.uds.person.v1_1.Employee;
-import edu.wisc.services.uds.person.v1_1.Identifier;
-import edu.wisc.services.uds.person.v1_1.Identifiers;
-import edu.wisc.services.uds.person.v1_1.Name;
-import edu.wisc.services.uds.person.v1_1.Person;
-import edu.wisc.services.uds.person.v1_1.UDDS;
+import edu.wisc.uds.person.Appointment;
+import edu.wisc.uds.person.Appointments;
+import edu.wisc.uds.person.Demographic;
+import edu.wisc.uds.person.Employee;
+import edu.wisc.uds.person.Identifier;
+import edu.wisc.uds.person.Identifiers;
+import edu.wisc.uds.person.Name;
+import edu.wisc.uds.person.Person;
+import edu.wisc.uds.person.UDDS;
 import edu.wisc.uds.UdsPersonService;
 import edu.wisc.uwss.UWUserDetails;
 
@@ -37,7 +37,7 @@ public class LocalUsersUdsPersonServiceImpl implements UdsPersonService {
   @Autowired
   private UserDetailsService userDetailsService;
   /* (non-Javadoc)
-   * @see edu.wisc.uds.UdsPersonService#getPerson(edu.wisc.services.uds.person.v1_1.Identifiers)
+   * @see edu.wisc.uds.UdsPersonService#getPerson(edu.wisc.uds.person.Identifiers)
    */
   @Override
   public Person getPerson(Identifiers identifiers) {
diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapper.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapper.java
index 5f49a42c5fb9785904ef1177a7af7b706f5034f9..ef6a2f314f6facc910f55f48ec8068035983910b 100644
--- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapper.java
+++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapper.java
@@ -56,6 +56,7 @@ public interface PreauthenticatedUserDetailsAttributeMapper {
     private String uddsHeader = "wisceduudds";
     private String emailAddressHeader = "mail";
     private String firstNameHeader = "givenName";
+    private String displayNameHeader = "displayName";
     private String lastNameHeader = "sn";
     private String isisEmplidHeader = "wisceduisisemplid";
     private String identityProviderHeader = "Shib-Identity-Provider";
@@ -85,6 +86,7 @@ public interface PreauthenticatedUserDetailsAttributeMapper {
       String emplid = request.getHeader(isisEmplidHeader);
       Collection<String> uddsMembership = safeGetHeaders(request, uddsHeader);
       String email = request.getHeader(emailAddressHeader);
+      String displayName = request.getHeader(displayNameHeader);
 
       Collection<String> manifestGroups = new ArrayList<>();
       String manifestValue = request.getHeader(manifestHeader);
@@ -105,6 +107,7 @@ public interface PreauthenticatedUserDetailsAttributeMapper {
       result.setLastName(request.getHeader(lastNameHeader));
       String identityProvider = request.getHeader(identityProviderHeader);
       result.setCustomLogoutUrl(toCustomLogoutUrl(identityProvider));
+      result.setDisplayName(displayName);
       
       logger.debug("mapUser constructed {} from headers in request", result);
       return result;
@@ -221,6 +224,17 @@ public interface PreauthenticatedUserDetailsAttributeMapper {
     public void setFullNameHeader(String fullNameHeader) {
       this.fullNameHeader = fullNameHeader;
     }
+    /**
+     *
+     * @return the displayNameHeader
+     */
+    public String getDisplayNameHeader() { return displayNameHeader; }
+    /**
+     *
+     * @param displayNameHeader the displayNameHeader to set
+     */
+    @Value("${preauth.displayNameHeader:displayName")
+    public void setDisplayNameHeader(String displayNameHeader) { this.displayNameHeader = displayNameHeader; }
     /**
      * @return the uddsHeader
      */
diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersBuilder.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersBuilder.java
index d015c2ab0f100d77cf52ebc2bb3b9553d294583a..921aede6fe2f1f77490483634f10913e903ed1bb 100644
--- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersBuilder.java
+++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersBuilder.java
@@ -3,8 +3,8 @@ package edu.wisc.uwss.uds;
 import java.util.ArrayList;
 import java.util.List;
 
-import edu.wisc.services.uds.person.v1_1.Identifier;
-import edu.wisc.services.uds.person.v1_1.Identifiers;
+import edu.wisc.uds.person.Identifier;
+import edu.wisc.uds.person.Identifiers;
 
 /**
  * Builder pattern for constructing {@link IdentifiersBuilder}.
diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersFactory.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersFactory.java
index d09a0ccf24a9377c8b0f73cf981480fab175efb1..65f60dcc4201977ce6d9d7b1c22c94b115b46a5f 100644
--- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersFactory.java
+++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersFactory.java
@@ -1,6 +1,7 @@
 package edu.wisc.uwss.uds;
 
-import edu.wisc.services.uds.person.v1_1.Identifiers;
+
+import edu.wisc.uds.person.Identifiers;
 
 /**
  * Factory interface for constructing {@link Identifiers} for use with {@link UdsPersonUserDetailsServiceImpl}.
diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java
index da5aa1b30d06489bbbd78c66a08bfdd95c202494..41814c3b730d3daaa9c74a09180b57b1476de31e 100644
--- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java
+++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java
@@ -11,13 +11,13 @@ import java.util.Set;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.util.Assert;
 
-import edu.wisc.services.uds.person.v1_1.Appointment;
-import edu.wisc.services.uds.person.v1_1.Appointments;
-import edu.wisc.services.uds.person.v1_1.Demographic;
-import edu.wisc.services.uds.person.v1_1.Employee;
-import edu.wisc.services.uds.person.v1_1.Identifier;
-import edu.wisc.services.uds.person.v1_1.Name;
-import edu.wisc.services.uds.person.v1_1.Person;
+import edu.wisc.uds.person.Appointment;
+import edu.wisc.uds.person.Appointments;
+import edu.wisc.uds.person.Demographic;
+import edu.wisc.uds.person.Employee;
+import edu.wisc.uds.person.Identifier;
+import edu.wisc.uds.person.Name;
+import edu.wisc.uds.person.Person;
 import edu.wisc.uwss.UWUserDetails;
 
 /**
@@ -210,7 +210,7 @@ public class UdsPersonUserDetailsImpl implements UWUserDetails {
    * This implementation always returns null.
    * 
    * TODO it may be possible to extract an emplid value from person.getIdentifiers
-   * Example observed: edu.wisc.services.uds.person.v1_1.Identifier@715ef617[source=UWMSNSS, idName=EMPLID, value=000123456]
+   * Example observed: edu.wisc.uds.person.Identifier@715ef617[source=UWMSNSS, idName=EMPLID, value=000123456]
    */
   @Override
   public String getIsisEmplid() {
@@ -238,6 +238,40 @@ public class UdsPersonUserDetailsImpl implements UWUserDetails {
   public String getLastName() {
     return getName() != null ? getName().getLast() : null;
   }
+
+  /**
+   * Construct the Display Name from the preferred name.
+   *
+   * @return displayName value
+   */
+  @Override
+  public String getDisplayName() {
+    if(getName()!=null) {
+      StringBuilder stringBuilder = new StringBuilder();
+
+
+      /**
+       * If the preferred first name is empty, then use the
+       * given name. Shib should already be doing this
+       * for preauthenticated users.
+       */
+      if(getName().getPreferredFirst()!=null) {
+        stringBuilder.append(getName().getPreferredFirst());
+      } else if(getName().getFirst()!=null) {
+        stringBuilder.append(getName().getFirst());
+      }
+
+      if(getName().getLast()!=null) {
+        if(stringBuilder.length()>0) {
+          stringBuilder.append(" ");
+        }
+        stringBuilder.append(getName().getLast());
+      }
+      return stringBuilder.toString();
+    } else {
+      return null;
+    }
+  }
   /**
    * 
    * @return {@link Demographic#getName()}, or null if not available
diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsServiceImpl.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsServiceImpl.java
index 1b152ec735211a4db8a8ea4245fb02428b08cb18..5934c39c69439dbee2743bff4b385b4fafbc317b 100644
--- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsServiceImpl.java
+++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsServiceImpl.java
@@ -7,9 +7,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 
-import edu.wisc.services.uds.person.v1_1.Identifier;
-import edu.wisc.services.uds.person.v1_1.Identifiers;
-import edu.wisc.services.uds.person.v1_1.Person;
+import edu.wisc.uds.person.Identifier;
+import edu.wisc.uds.person.Identifiers;
+import edu.wisc.uds.person.Person;
 import edu.wisc.uds.UdsPersonService;
 import edu.wisc.uwss.UWUserDetails;
 
diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/NotHasModifiableSourceUWUserDetails.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/NotHasModifiableSourceUWUserDetails.java
index 9f71f6a1689acb762ef29cc4462590cd5de57c98..9a11b70b51b4de7e5bab4f1c7844b8c49b4ec832 100644
--- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/NotHasModifiableSourceUWUserDetails.java
+++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/NotHasModifiableSourceUWUserDetails.java
@@ -63,6 +63,9 @@ final class NotHasModifiableSourceUWUserDetails implements UWUserDetails {
   @Override
   public String getFullName() { return null; }
 
+  @Override
+  public String getDisplayName() { return null; }
+
   @Override
   public String getFirstName() { return null; }
 
diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java
index 08aa10d075b1e826bd36c1e31391f0509cb9fe29..1ff6f2bf1652b77391b1eeddb3e78b46decdb366 100644
--- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java
+++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java
@@ -185,6 +185,7 @@ public class PreauthenticatedUserDetailsAttributeMapperTest {
     request.addHeader("wiscedupvi", "1234567");
     request.addHeader("uid", "somebody");
     request.addHeader("cn", "some body");
+    request.addHeader("displayName", "some one");
     request.addHeader("mail", "some.body@wisc.edu");
     request.addHeader("wisceduisisemplid", "0000123456");
     request.addHeader("Shib-Identity-Provider", "https://logintest.wisc.edu/idp/shibboleth");
@@ -200,6 +201,7 @@ public class PreauthenticatedUserDetailsAttributeMapperTest {
     assertEquals("somebody@wisc.edu", result.getEppn());
     assertEquals("1234567", result.getPvi());
     assertEquals("some body", result.getFullName());
+    assertEquals("some one", result.getDisplayName());
     assertEquals("some.body@wisc.edu", result.getEmailAddress());
     assertEquals("0000123456", result.getIsisEmplid());
     assertEquals("/Shibboleth.sso/Logout?return=https://logintest.wisc.edu/logout/", result.getCustomLogoutUrl());
diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java
index 324dbd62b36d611007b61fd30bebcab4565e3aac..5ce695073521fe312539b21572c67c449644afac 100644
--- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java
+++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java
@@ -36,6 +36,7 @@ public class UWUserDetailsAuthenticationFilterTest {
     when(request.getHeader("uid")).thenReturn("bbadger");
 		when(request.getHeader("eppn")).thenReturn("bbadger@wisc.edu");
 		when(request.getHeader("cn")).thenReturn("Bucky Badger");
+		when(request.getHeader("displayName")).thenReturn("Buckingham Badger");
 		when(request.getHeaders("wisceduudds")).thenReturn(Collections.enumeration(Arrays.asList("A061234")));
 		when(request.getHeader("mail")).thenReturn("foo@foo.wisc.edu");
     when(request.getHeader("isMemberOf")).thenReturn("somegroup");
@@ -43,6 +44,7 @@ public class UWUserDetailsAuthenticationFilterTest {
 		assertEquals("bbadger", userDetails.getUsername());
 		assertEquals("bbadger@wisc.edu", userDetails.getEppn());
 		assertEquals("Bucky Badger", userDetails.getFullName());
+		assertEquals("Buckingham Badger", userDetails.getDisplayName());
 		assertEquals("foo@foo.wisc.edu", userDetails.getEmailAddress());
 		assertEquals(1, userDetails.getUddsMembership().size());
 		assertEquals("A061234", userDetails.getUddsMembership().iterator().next());
@@ -59,10 +61,12 @@ public class UWUserDetailsAuthenticationFilterTest {
 		HttpServletRequest request = mock(HttpServletRequest.class);
 		
 		when(request.getHeader("uid")).thenReturn("bbadger");
+		when(request.getHeader("displayName")).thenReturn("Buckingham Badger");
 		when(request.getHeader("cn")).thenReturn("Bucky Badger");
 		UWUserDetails userDetails = filter.getPreAuthenticatedPrincipal(request);
 		assertEquals("bbadger", userDetails.getUsername());
 		assertEquals("Bucky Badger", userDetails.getFullName());
+		assertEquals("Buckingham Badger", userDetails.getDisplayName());
 		assertTrue(userDetails.getUddsMembership().isEmpty());
 	}
   /**
@@ -76,10 +80,12 @@ public class UWUserDetailsAuthenticationFilterTest {
     HttpServletRequest request = mock(HttpServletRequest.class);
 
     when(request.getHeader("uid")).thenReturn("bbadger");
-    when(request.getHeader("cn")).thenReturn("Bucky Badger");
+	  when(request.getHeader("displayName")).thenReturn("Buckingham Badger");
+	  when(request.getHeader("cn")).thenReturn("Bucky Badger");
     UWUserDetails userDetails = filter.getPreAuthenticatedPrincipal(request);
     assertEquals("bbadger", userDetails.getUsername());
-    assertEquals("Bucky Badger", userDetails.getFullName());
+	  assertEquals("Bucky Badger", userDetails.getFullName());
+	  assertEquals("Buckingham Badger", userDetails.getDisplayName());
     assertTrue(userDetails.getAuthorities().isEmpty());
   }
   /**
diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/IdentifiersBuilderTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/IdentifiersBuilderTest.java
index fc4a782707a8a2b38ae1d7f8d407cccaaf2a0f3c..8963a04ee11661e1d49ba48cc329affdc61af0be 100644
--- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/IdentifiersBuilderTest.java
+++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/IdentifiersBuilderTest.java
@@ -2,8 +2,8 @@ package edu.wisc.uwss.uds;
 
 import org.junit.Test;
 
-import edu.wisc.services.uds.person.v1_1.Identifier;
-import edu.wisc.services.uds.person.v1_1.Identifiers;
+import edu.wisc.uds.person.Identifier;
+import edu.wisc.uds.person.Identifiers;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java
index 9397790a0aa4263628e8cc56a7a48aa6a091a094..c949209aa6642bc8ff3361f482b475c29e5145a2 100644
--- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java
+++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java
@@ -9,11 +9,11 @@ import java.util.Collections;
 
 import org.junit.Test;
 
-import edu.wisc.services.uds.person.v1_1.Demographic;
-import edu.wisc.services.uds.person.v1_1.Identifier;
-import edu.wisc.services.uds.person.v1_1.Identifiers;
-import edu.wisc.services.uds.person.v1_1.Name;
-import edu.wisc.services.uds.person.v1_1.Person;
+import edu.wisc.uds.person.Demographic;
+import edu.wisc.uds.person.Identifier;
+import edu.wisc.uds.person.Identifiers;
+import edu.wisc.uds.person.Name;
+import edu.wisc.uds.person.Person;
 
 /**
  * Tests for {@link UdsPersonUserDetailsImpl}
@@ -43,6 +43,7 @@ public class UdsPersonUserDetailsImplTest {
     assertNull(userDetails.getCustomLogoutUrl());
     assertNull(userDetails.getEmailAddress());
     assertNull(userDetails.getFullName());
+    assertNull(userDetails.getDisplayName());
     assertNull(userDetails.getPassword());
     assertNull(userDetails.getPvi());
     assertEquals(UdsPersonUserDetailsImpl.USER_DETAILS_SOURCE, userDetails.getSource());
@@ -138,5 +139,21 @@ public class UdsPersonUserDetailsImplTest {
 
     assertEquals(pvi, new UdsPersonUserDetailsImpl(person).getPvi());
   }
+  /**
+   * Confirm successfully retrieve {@link UdsPersonUserDetailsImpl#getDisplayName()},
+   * that it uses preferred name, and also overrides the given name.
+   */
+  @Test
+  public void getDisplayName_control() {
+    Person person = new Person();
+    Demographic demographic = new Demographic();
+    Name name = new Name();
+    name.setLast("Badger");
+    name.setFirst("Bucky");
+    name.setPreferredFirst("Buckingham");
+    demographic.setName(name);
+    person.setDemographic(demographic);
+    assertEquals("Buckingham Badger", new UdsPersonUserDetailsImpl(person).getDisplayName());
+  }
 
 }
diff --git a/uw-spring-security-sample-war/pom.xml b/uw-spring-security-sample-war/pom.xml
index 1acbabda22592cfb2ffcde828c5885d530ce9ca0..a2c38676d89b960b068be6eaf7ff6016b975c17f 100644
--- a/uw-spring-security-sample-war/pom.xml
+++ b/uw-spring-security-sample-war/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>edu.wisc.uwss</groupId>
 		<artifactId>uw-spring-security</artifactId>
-		<version>1.7.1-SNAPSHOT</version>
+		<version>1.8.0-SNAPSHOT</version>
 	</parent>
 	<artifactId>uw-spring-security-sample-war</artifactId>
 	<name>UW Spring Security Sample War</name>
diff --git a/uw-spring-security-web/pom.xml b/uw-spring-security-web/pom.xml
index b7cff5dd26cc5577855d1f283a1ad5c9e9ca5f5d..1061bfa5e7dce7ce198f6938fa952a1a47fff74b 100644
--- a/uw-spring-security-web/pom.xml
+++ b/uw-spring-security-web/pom.xml
@@ -3,7 +3,7 @@
 	<parent>
 		<groupId>edu.wisc.uwss</groupId>
 		<artifactId>uw-spring-security</artifactId>
-		<version>1.7.1-SNAPSHOT</version>
+		<version>1.8.0-SNAPSHOT</version>
 	</parent>
 	<artifactId>uw-spring-security-web</artifactId>
 	<name>UW Spring Security Web</name>
diff --git a/uw-spring-security-web/src/main/java/edu/wisc/uwss/web/uwframe/UwframeSession.java b/uw-spring-security-web/src/main/java/edu/wisc/uwss/web/uwframe/UwframeSession.java
index 665f5bacbd4f9783f0d761821c27601a92a715b6..bd4c9e171ac60808f6e2d23230338416d6beff55 100644
--- a/uw-spring-security-web/src/main/java/edu/wisc/uwss/web/uwframe/UwframeSession.java
+++ b/uw-spring-security-web/src/main/java/edu/wisc/uwss/web/uwframe/UwframeSession.java
@@ -60,7 +60,7 @@ public class UwframeSession {
    * @param userDetails
    */
   public UwframeSession(Environment environment, UWUserDetails userDetails) {
-    this(environment, userDetails.getUsername(), userDetails.getFullName(), userDetails.getFirstName(), userDetails.getLastName());
+    this(environment, userDetails.getUsername(), userDetails.getDisplayName(), userDetails.getFirstName(), userDetails.getLastName());
   }
   /**
    *