<NME> releasenotes.md
<BEF> # CSLA 6 releases

CSLA 6 is a major new version of CSLA .NET, fully supporting (and requiring) dependency injection and other features of modern .NET.

## CSLA .NET version 6.2.0 release

CSLA .NET version 6.2.0 enhances `ExecuteAsync` to accept parameters, includes bug fixes, and numerous dependency version updates.

* [#1775](https://github.com/MarimerLLC/csla/issues/1775) Enhance data portal `ExecuteAsync` to allow passing parameters
* [#3100](https://github.com/MarimerLLC/csla/issues/3100) Linux build issue fix
* [#2975](https://github.com/MarimerLLC/csla/issues/2975) Linux build issue fix
* [#3083](https://github.com/MarimerLLC/csla/issues/3083) `NameValueList` serialization fix
* [#3044](https://github.com/MarimerLLC/csla/issues/3044) Don't use `WindowsPrincipal` on unsupported platforms
* [#3035](https://github.com/MarimerLLC/csla/issues/3035) Add `ViewModelBase` type to `Csla.Maui` namespace

### Change List

* [Changes in this release](https://github.com/MarimerLLC/csla/issues?q=project%3Amarimerllc%2F6+is%3Aclosed+)

### Contributors

@ajj7060
@bujma
@jasonBock
@rockfordlhotka
@TheCakeMonster

## CSLA .NET version 6.1.0 release

CSLA .NET version 6.1.0 adds support for Maui and includes bug fixes and one breaking change.

* [#2549](https://github.com/MarimerLLC/csla/issues/2549) Add UI helpers for Maui
* [#2672](https://github.com/MarimerLLC/csla/issues/2672) Enhance PropertyChanged behavior in `Csla.Xaml.ViewModelBase`
* [#2764](https://github.com/MarimerLLC/csla/issues/2764) Update snippets NuGet installer for VS2022
* [#2922](https://github.com/MarimerLLC/csla/issues/2922) Blazor no longer requires text-based serialization
* [#2946](https://github.com/MarimerLLC/csla/issues/2946) LocalProxy now properly disposes DI scope and dependencies

* [#1974](https://github.com/MarimerLLC/csla/issues/1974) 🐜 Fix formatting of ErrorText

### NuGet dependencies

## Contributors

### Dependency Updates

* Grpc.Net.Client
* Grpc.Tools
* Newtonsoft.Json
* RabbitMQ.Client
* Microsoft.NETCore.UniversalWindowsPlatform
* Xamarin.Forms
* Microsoft.AspNet.WebApi.Client
* Microsoft.AspNet.WebPages
* Microsoft.Web.Infrastructure
* Microsoft.AspNet.WebApi.Core
* Microsoft.AspNet.Mvc
* Microsoft.AspNet.Razor
* Google.Protobuf
* Microsoft.CodeAnalysis.CSharp

### Contributors

@joshhanson314
@rockfordlhotka
@TheCakeMonster
@jasonbock

## CSLA .NET version 6.0.0 release

CSLA .NET version 6.0.0 is a major release with numerous breaking changes, including:

* Business domain types must have a public constructor
* Public constructors for many types will have parameters provided via depedency injection
* Support for .NET 4.0 and 4.5 has been dropped; .NET 4.6.2 is the minimum required
* The data and object context managers in `Csla.Data` have been removed in favor of using dependency injection

This version supports:

* .NET 6
* .NET Framework 4.6.2 to 4.8
* netstandard 2.0 and 2.1
* Blazor
* Xamarin
* mono

Operating Systems and Platforms:

* Windows (servers and UWP, WPF, Windows Forms)
* Linux (servers and Xamarin)
* iOS and Android (Xamarin)
* Mac (servers and Xamarin)
* Kubernetes and other container-based runtimes
* ASP.NET Core and ASP.NET 5
* Other client and server environments where .NET Core or mono are available

### Change List

* [Changes in this release](https://github.com/MarimerLLC/csla/issues?q=is%3Aclosed+project%3Amarimerllc%2Fcsla%2F11+)
* [Breaking changes](https://github.com/MarimerLLC/csla/issues?q=is%3Aclosed+project%3Amarimerllc%2Fcsla%2F11+label%3A%22flag%2Fbreaking+change%22).

### Upgrade documentation

There is a document describing common issues people will likely encounter when upgrading from CSLA 5 to CSLA 6.

* [Upgrading to CSLA 6](https://github.com/MarimerLLC/csla/blob/main/docs/Upgrading%20to%20CSLA%206.md)

### Contributors

The CSLA community is fantastic! The people who've submitted bugs, helped think through solutions, lobbied for features and enhancements, and submitted pull requests are listed below.

@455986780
@adrianwright109
@ajohnstone-ks
@Art666OTS
@BaHXeLiSiHg
@coder-rr
@danielmartind
@dazinator
@devcs21
@dotMorten
@Eduardo-Micromust
@GreatBarrier86
@j055
@JacoJordaan
@JasonBock
@jhnsartain3
@jonparker
@joshhanson314
@kellyethridge
@michaelcsikos
@MTantos1
@peranborkett
@poepoe12002
@ProDInfo
@RaviPatelTheOne
@rfcdejong
@rockfordlhotka
@russblair
@SachinPNikam
@swegele
@TheCakeMonster

Thank you all so much for your support!

<MSG> Merge pull request #2023 from rockfordlhotka/1743-claimsprincipal

Support only ClaimsPrincipal and ClaimsIdentity
<DFF> @@ -37,6 +37,11 @@ This is a major release with numerous breaking changes, including:
 
 * [#1974](https://github.com/MarimerLLC/csla/issues/1974) 🐜 Fix formatting of ErrorText
 
+
+### Misc
+
+* [#1743](https://github.com/MarimerLLC/csla/issues/1743) 🛑🎉 Use only `ClaimsPrincipal` and `ClaimsIdentity`, as these are the only types supported in modern .NET
+
 ### NuGet dependencies
 
 ## Contributors

{'commit': 'diff --git a/Source/Csla.Validation.Test/AuthorizationTest.cs b/Source/Csla.Validation.Test/AuthorizationTest.cs\nindex 0edf189e2..975eb792d 100644\n--- a/Source/Csla.Validation.Test/AuthorizationTest.cs\n+++ b/Source/Csla.Validation.Test/AuthorizationTest.cs\n@@ -15,10 +15,18 @@ namespace Csla.Validation.Test\n   [TestClass]\n   public class AuthorizationTest\n   {\n+    private static ClaimsPrincipal GetPrincipal(params string[] roles)\n+    {\n+      var identity = new ClaimsIdentity();\n+      foreach (var item in roles)\n+        identity.AddClaim(new Claim(ClaimTypes.Role, item));\n+      return new ClaimsPrincipal(identity);\n+    }\n+\n     [TestInitialize]\n     public void Initialize()\n     {\n-      Thread.CurrentPrincipal = new VPrincipal("NoRole");\n+      Thread.CurrentPrincipal = GetPrincipal("NoRole");\n     }\n \n     [TestCleanup]\n@@ -53,7 +61,7 @@ public void DeleteWhenIsInRoleThrowsException()\n     [TestCategory("SkipWhenLiveUnitTesting")]\n     public void CreateWhenIsInRoleReturnsObject()\n     {\n-      Thread.CurrentPrincipal = new VPrincipal("Administrator", "ProjectManager");\n+      Thread.CurrentPrincipal = GetPrincipal("Administrator", "ProjectManager");\n       var project = DataPortal.Create<Project>();\n       Assert.IsNotNull(project);\n     }\n@@ -61,7 +69,7 @@ public void CreateWhenIsInRoleReturnsObject()\n     [TestMethod]\n     public void GetWhenIsInRoleDeletesObject()\n     {\n-      Thread.CurrentPrincipal = new VPrincipal("Administrator", "ProjectManager");\n+      Thread.CurrentPrincipal = GetPrincipal("Administrator", "ProjectManager");\n       var project = DataPortal.Fetch<Project>(Guid.NewGuid()); \n       Assert.IsNotNull(project);\n     }\n@@ -69,7 +77,7 @@ public void GetWhenIsInRoleDeletesObject()\n     [TestMethod]\n     public void DeleteWhenIsInRoleDeletesObject()\n     {\n-      Thread.CurrentPrincipal = new VPrincipal("Administrator", "ProjectManager");\n+      Thread.CurrentPrincipal = GetPrincipal("Administrator", "ProjectManager");\n       DataPortal.Delete<Project>(Guid.NewGuid());\n       Assert.IsTrue(true);\n     }\n@@ -78,7 +86,7 @@ public void DeleteWhenIsInRoleDeletesObject()\n     [ExpectedException(typeof(SecurityException))]\n     public void SetPropertyWhenNotIsInRoleThrowsException()\n     {\n-      Thread.CurrentPrincipal = new VPrincipal("Administrator");\n+      Thread.CurrentPrincipal = GetPrincipal("Administrator");\n       var project = DataPortal.Fetch<Project>(Guid.NewGuid());\n       project.Name = "My name";\n       Assert.Inconclusive("should never get here.");\n@@ -87,7 +95,7 @@ public void SetPropertyWhenNotIsInRoleThrowsException()\n     [TestMethod]\n     public void SetPropertyWhenIsInRoleSetsValue()\n     {\n-      Thread.CurrentPrincipal = new VPrincipal("Administrator");\n+      Thread.CurrentPrincipal = GetPrincipal("Administrator");\n       var project = DataPortal.Fetch<Project>(Guid.NewGuid());\n       project.Description = "My description";\n       Assert.AreSame("My description", project.Description);\ndiff --git a/Source/Csla.Validation.Test/Csla.Validation.Test.csproj b/Source/Csla.Validation.Test/Csla.Validation.Test.csproj\nindex 5bf21923a..20bb2636a 100644\n--- a/Source/Csla.Validation.Test/Csla.Validation.Test.csproj\n+++ b/Source/Csla.Validation.Test/Csla.Validation.Test.csproj\n@@ -78,8 +78,6 @@\n     <Compile Include="ResourceList.cs" />\n     <Compile Include="ValidationTest.cs" />\n     <Compile Include="Properties\\AssemblyInfo.cs" />\n-    <Compile Include="VIdentity.cs" />\n-    <Compile Include="VPrincipal.cs" />\n   </ItemGroup>\n   <ItemGroup>\n     <ProjectReference Include="..\\Csla\\Csla.csproj">\ndiff --git a/Source/Csla.Validation.Test/ReadOnlyAuthorizationTest.cs b/Source/Csla.Validation.Test/ReadOnlyAuthorizationTest.cs\nindex 2b9044ff6..aacc4b1b3 100644\n--- a/Source/Csla.Validation.Test/ReadOnlyAuthorizationTest.cs\n+++ b/Source/Csla.Validation.Test/ReadOnlyAuthorizationTest.cs\n@@ -1,10 +1,5 @@\n-\ufeffusing System;\n-using System.Collections.Generic;\n-using System.Linq;\n-using System.Security.Claims;\n-using System.Text;\n+\ufeffusing System.Security.Claims;\n using System.Threading;\n-using System.Threading.Tasks;\n using Csla.Security;\n using Microsoft.VisualStudio.TestTools.UnitTesting;\n using ProjectTracker.Library;\n@@ -14,10 +9,18 @@ namespace Csla.Validation.Test\n   [TestClass]\n   public class ReadOnlyAuthorizationTest\n   {\n+    private static ClaimsPrincipal GetPrincipal(params string[] roles)\n+    {\n+      var identity = new ClaimsIdentity();\n+      foreach (var item in roles)\n+        identity.AddClaim(new Claim(ClaimTypes.Role, item));\n+      return new ClaimsPrincipal(identity);\n+    }\n+\n     [TestInitialize]\n     public void Initialize()\n     {\n-      Thread.CurrentPrincipal = new VPrincipal("NoRole");\n+      Thread.CurrentPrincipal = GetPrincipal("NoRole");\n     }\n \n     [TestCleanup]\n@@ -36,7 +39,7 @@ public void GetWhenNotIsInRoleThrowsException()\n     [TestMethod]\n     public void GetWhenIsInRoleReturnsList()\n     {\n-      Thread.CurrentPrincipal = new VPrincipal("Administrator");\n+      Thread.CurrentPrincipal = GetPrincipal("Administrator");\n       var resources = DataPortal.Fetch<ResourceList>();\n       Assert.IsTrue(resources.Count > 0);\n     }\ndiff --git a/Source/Csla.Validation.Test/VIdentity.cs b/Source/Csla.Validation.Test/VIdentity.cs\ndeleted file mode 100644\nindex ed8fe51cd..000000000\n--- a/Source/Csla.Validation.Test/VIdentity.cs\n+++ /dev/null\n@@ -1,23 +0,0 @@\n-\ufeffusing System;\n-using System.Collections.Generic;\n-using System.Linq;\n-using System.Text;\n-using System.Threading.Tasks;\n-using Csla.Core;\n-using Csla.Security;\n-\n-namespace Csla.Validation.Test\n-{\n-  [Serializable]\n-  public class VIdentity : CslaIdentity\n-  {\n-    public VIdentity() { }\n-\n-    public VIdentity(params string[] roles)\n-    {\n-      Name = "Test";\n-      IsAuthenticated = true;\n-      Roles = new MobileList<string>(roles);\n-    }\n-  }\n-}\ndiff --git a/Source/Csla.Validation.Test/VPrincipal.cs b/Source/Csla.Validation.Test/VPrincipal.cs\ndeleted file mode 100644\nindex bca273b52..000000000\n--- a/Source/Csla.Validation.Test/VPrincipal.cs\n+++ /dev/null\n@@ -1,17 +0,0 @@\n-\ufeffusing System;\n-using System.Collections.Generic;\n-using System.Linq;\n-using System.Text;\n-using System.Threading.Tasks;\n-using Csla.Security;\n-\n-namespace Csla.Validation.Test\n-{\n- public class VPrincipal : CslaPrincipal\n-  {\n-   public VPrincipal(params string[] roles) : base(new VIdentity(roles))\n-   {\n-\n-   }\n-  }\n-}\ndiff --git a/Source/Csla.Validation.Test/ValidationTest.cs b/Source/Csla.Validation.Test/ValidationTest.cs\nindex b4bbb121b..8d5e2d62d 100644\n--- a/Source/Csla.Validation.Test/ValidationTest.cs\n+++ b/Source/Csla.Validation.Test/ValidationTest.cs\n@@ -10,10 +10,18 @@ namespace Csla.Validation.Test\n   [TestClass]\n   public class ValidationTest\n   {\n+    private static ClaimsPrincipal GetPrincipal(params string[] roles)\n+    {\n+      var identity = new ClaimsIdentity();\n+      foreach (var item in roles)\n+        identity.AddClaim(new Claim(ClaimTypes.Role, item));\n+      return new ClaimsPrincipal(identity);\n+    }\n+\n     [TestInitialize]\n     public void Initialize()\n     {\n-      Thread.CurrentPrincipal = new VPrincipal("ProjectManager");\n+      Thread.CurrentPrincipal = GetPrincipal("ProjectManager");\n     }\n \n     [TestCleanup]\ndiff --git a/Source/Csla.Web.Shared/ApplicationContextManager.cs b/Source/Csla.Web.Shared/ApplicationContextManager.cs\nindex 9d9bc4e08..4795a51d5 100644\n--- a/Source/Csla.Web.Shared/ApplicationContextManager.cs\n+++ b/Source/Csla.Web.Shared/ApplicationContextManager.cs\n@@ -44,7 +44,7 @@ public System.Security.Principal.IPrincipal GetUser()\n       var result = HttpContext.Current.User;\n       if (result == null)\n       {\n-        result = new Csla.Security.UnauthenticatedPrincipal();\n+        result = new System.Security.Claims.ClaimsPrincipal();\n         SetUser(result);\n       }\n       return result;\ndiff --git a/Source/Csla.Web.Shared/Security/IdentityFactory.cs b/Source/Csla.Web.Shared/Security/IdentityFactory.cs\nindex 1ad0f38e1..5f282702b 100644\n--- a/Source/Csla.Web.Shared/Security/IdentityFactory.cs\n+++ b/Source/Csla.Web.Shared/Security/IdentityFactory.cs\n@@ -1,96 +1 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="IdentityFactory.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>Verifies user credentials and creates principal/identity based</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using Csla.Configuration;\n-using System.Web.Security;\n-using Csla.Core;\n-using Csla.Server;\n-using Csla.Security;\n-\n-namespace Csla.Web.Security\n-{\n-  /// <summary>\n-  /// Verifies user credentials and creates principal/identity based\n-  /// on the ASP.NET Membership provider.\n-  /// </summary>\n-  /// <remarks>\n-  /// If the CslaMembershipUseWebServer config setting is false the\n-  /// call will be delegated to the app server (if any) behind the\n-  /// web server. The default is to use the membership provider and\n-  /// database located on the web server.\n-  /// </remarks>\n-  public class IdentityWebFactory : ObjectFactory\n-  {\n-    /// <summary>\n-    /// Fetches MembershipIdentity from the server\n-    /// </summary>\n-    /// <param name="criteria"><see cref="MembershipIdentity.Criteria"/></param>\n-    /// <returns></returns>\n-    public MembershipIdentity Fetch(MembershipIdentity.Criteria criteria)\n-    {\n-      var config = ConfigurationManager.AppSettings["CslaMembershipUseWebServer"];\n-      if (string.IsNullOrEmpty(config)) config = "True";\n-      var useWebServer = bool.Parse(config);\n-      if (useWebServer)\n-      {\n-        var appFactory = new IdentityAppFactory();\n-        return appFactory.Fetch(criteria);\n-      }\n-      else\n-      {\n-        return Csla.DataPortal.Fetch<MembershipIdentity>(criteria);\n-      }\n-    }\n-  }\n-\n-  /// <summary>\n-  /// Verifies user credentials and creates principal/identity based\n-  /// on the ASP.NET Membership provider.\n-  /// </summary>\n-  public class IdentityAppFactory : ObjectFactory\n-  {\n-    /// <summary>\n-    /// Fetches MembershipIdentity from the server\n-    /// </summary>\n-    /// <param name="criteria"><see cref="MembershipIdentity.Criteria"/></param>\n-    /// <returns></returns>\n-    public MembershipIdentity Fetch(MembershipIdentity.Criteria criteria)\n-    {\n-      Type identityType = Type.GetType(criteria.MembershipIdentityType);\n-      var returnValue = (MembershipIdentity)Activator.CreateInstance(identityType, true);\n-      LoadIdentity(criteria, returnValue);\n-      return returnValue;\n-    }\n-\n-    /// <summary>\n-    /// Verifies the user credentials and loads the identity object with\n-    /// values based on the result.\n-    /// </summary>\n-    /// <param name="criteria">Criteria object.</param>\n-    /// <param name="identity">Instance of MembershipIdentity or subclass.</param>\n-    public void LoadIdentity(MembershipIdentity.Criteria criteria, MembershipIdentity identity)\n-    {\n-      LoadProperty(identity, MembershipIdentity.AuthenticationTypeProperty, "Membership");\n-      if (Membership.ValidateUser(criteria.Name, criteria.Password))\n-      {\n-        LoadProperty(identity, MembershipIdentity.IsAuthenticatedProperty, true);\n-        LoadProperty(identity, MembershipIdentity.NameProperty, criteria.Name);\n-        var roles = new MobileList<string>(Roles.Provider.GetRolesForUser(criteria.Name));\n-        LoadProperty(identity, MembershipIdentity.RolesProperty, roles);\n-        identity.LoadCustomData();\n-      }\n-      else\n-      {\n-        LoadProperty(identity, MembershipIdentity.IsAuthenticatedProperty, false);\n-        LoadProperty(identity, MembershipIdentity.NameProperty, string.Empty);\n-        var roles = new MobileList<string>();\n-        LoadProperty(identity, MembershipIdentity.RolesProperty, roles);\n-      }\n-    }\n-  }\n-}\n\\ No newline at end of file\n+\ufeff\n\\ No newline at end of file\ndiff --git a/Source/Csla.Windows.Shared/ApplicationContextManager.cs b/Source/Csla.Windows.Shared/ApplicationContextManager.cs\nindex b56ce0d47..14692c3c6 100644\n--- a/Source/Csla.Windows.Shared/ApplicationContextManager.cs\n+++ b/Source/Csla.Windows.Shared/ApplicationContextManager.cs\n@@ -28,7 +28,7 @@ public override IPrincipal GetUser()\n       if (_principal == null)\n       {\n         if (ApplicationContext.AuthenticationType != "Windows")\n-          SetUser(new Csla.Security.UnauthenticatedPrincipal());\n+          SetUser(new System.Security.Claims.ClaimsPrincipal());\n         else\n #pragma warning disable CA1416 // Validate platform compatibility\n           SetUser(new WindowsPrincipal(WindowsIdentity.GetCurrent()));\ndiff --git a/Source/Csla.Xaml.Shared/ApplicationContextManager.cs b/Source/Csla.Xaml.Shared/ApplicationContextManager.cs\nindex 476f579ce..d018b5de4 100644\n--- a/Source/Csla.Xaml.Shared/ApplicationContextManager.cs\n+++ b/Source/Csla.Xaml.Shared/ApplicationContextManager.cs\n@@ -30,7 +30,7 @@ public override IPrincipal GetUser()\n           SetUser(new WindowsPrincipal(WindowsIdentity.GetCurrent()));\n #pragma warning restore CA1416 // Validate platform compatibility\n         else\n-          SetUser(new Csla.Security.UnauthenticatedPrincipal());\n+          SetUser(new System.Security.Claims.ClaimsPrincipal());\n       }\n       return _principal;\n     }\ndiff --git a/Source/Csla.test/AppContext/TestContext.cs b/Source/Csla.test/AppContext/TestContext.cs\nindex 739703102..8a5f3e171 100644\n--- a/Source/Csla.test/AppContext/TestContext.cs\n+++ b/Source/Csla.test/AppContext/TestContext.cs\n@@ -29,7 +29,7 @@ public IPrincipal GetUser()\n       IPrincipal result = Thread.CurrentPrincipal;\n       if (result == null)\n       {\n-        result = new Csla.Security.UnauthenticatedPrincipal();\n+        result = new System.Security.Claims.ClaimsPrincipal();\n         SetUser(result);\n       }\n       return result;\ndiff --git a/Source/Csla.test/Authorization/AuthTests.cs b/Source/Csla.test/Authorization/AuthTests.cs\nindex b2f0102ff..23004ca50 100644\n--- a/Source/Csla.test/Authorization/AuthTests.cs\n+++ b/Source/Csla.test/Authorization/AuthTests.cs\n@@ -17,6 +17,7 @@\n using Csla.Test.Security;\n using UnitDriven;\n using System.Diagnostics;\n+using System.Security.Claims;\n \n #if NUNIT\n using NUnit.Framework;\n@@ -37,6 +38,13 @@ namespace Csla.Test.Authorization\n   [TestClass()]\n   public class AuthTests\n   {\n+    private static ClaimsPrincipal GetPrincipal(params string[] roles)\n+    {\n+      var identity = new ClaimsIdentity();\n+      foreach (var item in roles)\n+        identity.AddClaim(new Claim(ClaimTypes.Role, item));\n+      return new ClaimsPrincipal(identity);\n+    }\n \n     private DataPortal.DpRoot root = DataPortal.DpRoot.NewRoot();\n \n@@ -51,9 +59,7 @@ public void TestAuthCloneRules()\n     {\n       ApplicationContext.GlobalContext.Clear();\n \n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n \n       Assert.AreEqual(true, Csla.ApplicationContext.User.IsInRole("Admin"));\n \n@@ -124,9 +130,7 @@ public void TestAuthCloneRules()\n \n       #endregion\n \n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n     }\n \n     [TestMethod()]\n@@ -134,11 +138,9 @@ public void TestAuthBeginEditRules()\n     {\n       ApplicationContext.GlobalContext.Clear();\n \n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n \n-            Assert.AreEqual(true, System.Threading.Thread.CurrentPrincipal.IsInRole("Admin"));\n+      Assert.AreEqual(true, System.Threading.Thread.CurrentPrincipal.IsInRole("Admin"));\n \n       root.Data = "Something new";\n \n@@ -244,9 +246,7 @@ public void TestAuthBeginEditRules()\n \n       #endregion\n \n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n     }\n \n     [TestMethod()]\n@@ -255,26 +255,18 @@ public void TestAuthorizationAfterEditCycle()\n       Csla.ApplicationContext.GlobalContext.Clear();\n       Csla.Test.Security.PermissionsRoot pr = Csla.Test.Security.PermissionsRoot.NewPermissionsRoot();\n \n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       pr.FirstName = "something";\n \n       pr.BeginEdit();\n       pr.FirstName = "ba";\n       pr.CancelEdit();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n \n       Csla.Test.Security.PermissionsRoot prClone = pr.Clone();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       prClone.FirstName = "somethiansdfasdf";\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n     }\n \n     [ExpectedException(typeof(Csla.Security.SecurityException))]\n@@ -303,9 +295,7 @@ public void TestUnauthorizedAccessToSet()\n     public void TestAuthorizedAccess()\n     {\n       Csla.ApplicationContext.GlobalContext.Clear();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n \n       PermissionsRoot pr = PermissionsRoot.NewPermissionsRoot();\n       //should work, because we are now logged in as an admin\n@@ -314,20 +304,16 @@ public void TestAuthorizedAccess()\n \n             Assert.AreEqual(true, System.Threading.Thread.CurrentPrincipal.IsInRole("Admin"));\n       //set to null so the other testmethods continue to throw exceptions\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n \n-            Assert.AreEqual(false, System.Threading.Thread.CurrentPrincipal.IsInRole("Admin"));\n+      Assert.AreEqual(false, System.Threading.Thread.CurrentPrincipal.IsInRole("Admin"));\n     }\n \n     [TestMethod]\n     public void TestAuthExecute()\n     {\n       Csla.ApplicationContext.GlobalContext.Clear();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n \n       PermissionsRoot pr = PermissionsRoot.NewPermissionsRoot();\n       //should work, because we are now logged in as an admin\n@@ -335,11 +321,9 @@ public void TestAuthExecute()\n \n           Assert.AreEqual(true, System.Threading.Thread.CurrentPrincipal.IsInRole("Admin"));\n       //set to null so the other testmethods continue to throw exceptions\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n \n-          Assert.AreEqual(false, System.Threading.Thread.CurrentPrincipal.IsInRole("Admin"));\n+      Assert.AreEqual(false, System.Threading.Thread.CurrentPrincipal.IsInRole("Admin"));\n     }\n \n     [TestMethod]\n@@ -360,9 +344,7 @@ public void TestUnAuthExecute()\n     public void TestAuthRuleSetsOnStaticHasPermissionMethodsWhenAddingAuthzRuleSetExplicitly()\n     {\n       var root = PermissionsRoot.NewPermissionsRoot();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n \n       Assert.IsTrue(System.Threading.Thread.CurrentPrincipal.IsInRole("Admin"));\n       Assert.IsFalse(System.Threading.Thread.CurrentPrincipal.IsInRole("User"));\n@@ -382,18 +364,14 @@ public void TestAuthRuleSetsOnStaticHasPermissionMethodsWhenAddingAuthzRuleSetEx\n       Assert.IsTrue(BusinessRules.HasPermission(AuthorizationActions.DeleteObject, typeof(PermissionsRoot), "custom1"));\n       Assert.IsTrue(BusinessRules.HasPermission(AuthorizationActions.DeleteObject, typeof(PermissionsRoot), "custom2"));\n \n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n     }\n \n     [TestMethod]\n     public void TestAuthRuleSetsOnStaticHasPermissionMethodsWhenAddingAuthzRuleSetUsingApplicationContextRuleSet()\n     {\n       var root = PermissionsRoot2.NewPermissionsRoot();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n \n       Assert.IsTrue(System.Threading.Thread.CurrentPrincipal.IsInRole("Admin"));\n       Assert.IsFalse(System.Threading.Thread.CurrentPrincipal.IsInRole("User"));\n@@ -417,9 +395,7 @@ public void TestAuthRuleSetsOnStaticHasPermissionMethodsWhenAddingAuthzRuleSetUs\n       Assert.IsTrue(BusinessRules.HasPermission(AuthorizationActions.DeleteObject, typeof(PermissionsRoot2), "custom1"));\n       Assert.IsTrue(BusinessRules.HasPermission(AuthorizationActions.DeleteObject, typeof(PermissionsRoot2), "custom2"));\n \n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n     }\n \n     [TestMethod]\ndiff --git a/Source/Csla.test/Authorization/PerTypeAuthorization.cs b/Source/Csla.test/Authorization/PerTypeAuthorization.cs\nindex b59326137..e68790827 100644\n--- a/Source/Csla.test/Authorization/PerTypeAuthorization.cs\n+++ b/Source/Csla.test/Authorization/PerTypeAuthorization.cs\n@@ -35,7 +35,7 @@ public class PerTypeAuthorizationTests\n     [ExpectedException(typeof(Csla.Security.SecurityException))]\n     public void DenyWritePerType()\n     {\n-      Csla.ApplicationContext.User = new Csla.Security.UnauthenticatedPrincipal();\n+      Csla.ApplicationContext.User = new System.Security.Claims.ClaimsPrincipal();\n       PerTypeAuthorization root = new PerTypeAuthorization();\n       root.Test = "test";\n     }\ndiff --git a/Source/Csla.test/Authorization/ReadonlyAuthorizationTests.cs b/Source/Csla.test/Authorization/ReadonlyAuthorizationTests.cs\nindex 0b446a658..bf4bd0710 100644\n--- a/Source/Csla.test/Authorization/ReadonlyAuthorizationTests.cs\n+++ b/Source/Csla.test/Authorization/ReadonlyAuthorizationTests.cs\n@@ -11,6 +11,7 @@\n using Csla.Test.Security;\n using UnitDriven;\n using System.Diagnostics;\n+using System.Security.Claims;\n \n #if NUNIT\n using NUnit.Framework;\n@@ -31,29 +32,31 @@ namespace Csla.Test.Authorization\n   [TestClass()]\n   public class ReadonlyAuthorizationTests\n   {\n+    private static ClaimsPrincipal GetPrincipal(params string[] roles)\n+    {\n+      var identity = new ClaimsIdentity();\n+      foreach (var item in roles)\n+        identity.AddClaim(new Claim(ClaimTypes.Role, item));\n+      return new ClaimsPrincipal(identity);\n+    }\n+\n     [TestMethod()]\n     public void TestAllowInstanceAndShared()\n     {\n       ApplicationContext.GlobalContext.Clear();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       ReadOnlyPerson person = ReadOnlyPerson.GetReadOnlyPerson();\n       Assert.AreEqual(true, Csla.ApplicationContext.User.IsInRole("Admin"));\n       Assert.AreEqual("John", person.FirstName,"Should be able read first name");\n       Assert.AreEqual("Doe", person.LastName, "Should be able read first name");\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n       ApplicationContext.GlobalContext.Clear();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       ReadOnlyPerson clone = person.Clone();\n       Assert.AreEqual(true, Csla.ApplicationContext.User.IsInRole("Admin"));\n       Assert.AreEqual("John", clone.FirstName, "Should be able read first name of clone");\n       Assert.AreEqual("Doe", clone.LastName, "Should be able read first name of clone");\n-\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n     }\n \n     [TestMethod()]\n@@ -62,17 +65,12 @@ public void TestDenyInstanceAndShared()\n     {\n       \n       ApplicationContext.GlobalContext.Clear();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       ReadOnlyPerson person = ReadOnlyPerson.GetReadOnlyPerson();\n       Assert.AreEqual(true, Csla.ApplicationContext.User.IsInRole("Admin"));\n       Assert.AreEqual("!", person.MiddleName, "Should not be able read middle name");\n       Assert.AreEqual("!", person.PlaceOfBirth, "Should not be able read place of birth");\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n-\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n     }\n \n     [TestMethod()]\n@@ -81,16 +79,12 @@ public void TestDenyInstanceAndSharedForClone()\n     {\n \n       ApplicationContext.GlobalContext.Clear();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       ReadOnlyPerson person = ReadOnlyPerson.GetReadOnlyPerson().Clone();\n       Assert.AreEqual(true, Csla.ApplicationContext.User.IsInRole("Admin"));\n       Assert.AreEqual("!", person.MiddleName, "Should not be able read middle name");\n       Assert.AreEqual("!", person.PlaceOfBirth, "Should not be able read place of birth");\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n \n     }\n   }\ndiff --git a/Source/Csla.test/Authorization/TestIdentity.cs b/Source/Csla.test/Authorization/TestIdentity.cs\ndeleted file mode 100644\nindex 0097cbb3a..000000000\n--- a/Source/Csla.test/Authorization/TestIdentity.cs\n+++ /dev/null\n@@ -1,35 +0,0 @@\n-//-----------------------------------------------------------------------\n-// <copyright file="TestIdentity.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>no summary</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-\n-namespace Csla.Test.Security\n-{\n-  [Serializable]\n-  public class TestIdentity : Csla.Security.CslaIdentity\n-  {\n-    public TestIdentity() { }\n-\n-    public TestIdentity(string username, string password)\n-    {\n-      this.IsAuthenticated = true;\n-      this.Name = username;\n-    }\n-\n-    public bool IsInRole(string role)\n-    {\n-      if (role == "Admin")\n-      {\n-        return true;\n-      }\n-      else\n-      {\n-        return false;\n-      }\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Authorization/TestPrincipal.cs b/Source/Csla.test/Authorization/TestPrincipal.cs\ndeleted file mode 100644\nindex 6cf9d31a8..000000000\n--- a/Source/Csla.test/Authorization/TestPrincipal.cs\n+++ /dev/null\n@@ -1,40 +0,0 @@\n-//-----------------------------------------------------------------------\n-// <copyright file="TestPrincipal.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>no summary</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-\n-namespace Csla.Test.Security\n-{\n-    [Serializable()]\n-    public class TestPrincipal : Csla.Security.CslaPrincipal\n-    {\n-      public TestPrincipal() { }\n-        public override bool IsInRole(string role)\n-        {\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-            return ((TestIdentity)Identity).IsInRole(role);\n-#pragma warning restore CS0436 // Type conflicts with imported type\n-        }\n-\n-        private TestPrincipal(System.Security.Principal.IIdentity identity) : base(identity)\n-        {}\n-\n-        public static void SimulateLogin()\n-        {\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-            Csla.ApplicationContext.User = new TestPrincipal(new TestIdentity("User", "password"));\n-#pragma warning restore CS0436 // Type conflicts with imported type\n-#pragma warning restore CS0436 // Type conflicts with imported type\n-        }\n-\n-        public static void SimulateLogout()\n-        {\n-            Csla.ApplicationContext.User = null;\n-        }\n-    }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/BusyStatus/BusyStatusTests.cs b/Source/Csla.test/BusyStatus/BusyStatusTests.cs\nindex 4d6f72336..4c40af7da 100644\n--- a/Source/Csla.test/BusyStatus/BusyStatusTests.cs\n+++ b/Source/Csla.test/BusyStatus/BusyStatusTests.cs\n@@ -9,7 +9,6 @@\n using Csla.DataPortalClient;\n using Csla.Testing.Business.ReadOnlyTest;\n using System;\n-using Csla.Testing.Business.Security;\n using UnitDriven;\n using Csla.Testing.Business.BusyStatus;\n using System.Threading.Tasks;\ndiff --git a/Source/Csla.test/BypassPropertyChecks/BypassPropertyChecksTests.cs b/Source/Csla.test/BypassPropertyChecks/BypassPropertyChecksTests.cs\nindex 88b732f52..0fed53f7c 100644\n--- a/Source/Csla.test/BypassPropertyChecks/BypassPropertyChecksTests.cs\n+++ b/Source/Csla.test/BypassPropertyChecks/BypassPropertyChecksTests.cs\n@@ -9,8 +9,8 @@\n using Csla.DataPortalClient;\n using Csla.Testing.Business.ReadOnlyTest;\n using System;\n-using Csla.Testing.Business.Security;\n using UnitDriven;\n+using System.Security.Claims;\n \n #if NUNIT\n using NUnit.Framework;\n@@ -29,14 +29,19 @@ namespace Csla.Test.BypassPropertyChecks\n   [TestClass]\n   public class BypassPropertyChecksTests : TestBase\n   {\n+    private static ClaimsPrincipal GetPrincipal(params string[] roles)\n+    {\n+      var identity = new ClaimsIdentity();\n+      foreach (var item in roles)\n+        identity.AddClaim(new Claim(ClaimTypes.Role, item));\n+      return new ClaimsPrincipal(identity);\n+    }\n \n     [TestMethod]\n     public void TestBypassReadWriteWithRightsTurnNotificationBackOn()\n     {\n       UnitTestContext context = GetContext();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin", "Random");\n       bool propertyChangedFired = false;\n       BypassBusinessBase testObj = new BypassBusinessBase();\n       testObj.PropertyChanged += (o, e) =>\n@@ -59,9 +64,7 @@ public void TestBypassReadWriteWithRightsTurnNotificationBackOn()\n       context.Assert.AreEqual(true, testObj.IsDirty);\n \n       context.Assert.Success();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new System.Security.Claims.ClaimsPrincipal();\n       context.Complete();\n     }\n \n@@ -70,9 +73,7 @@ public void TestBypassReadWriteWithRightsTurnNotificationBackOn()\n     public void TestBypassReadWriteNoRightsTurnNotificationBackOn()\n     {\n       UnitTestContext context = GetContext();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       bool propertyChangedFired = false;\n \n       BypassBusinessBase testObj = new BypassBusinessBase();\n@@ -88,9 +89,7 @@ public void TestBypassReadWriteNoRightsTurnNotificationBackOn()\n       context.Assert.AreEqual(1, testObj.ReadId2ByPass()); // still one becuase set failed\n       context.Assert.AreEqual(true, testObj.IsDirty);\n       context.Assert.Success();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n       context.Complete();\n     }\n \n@@ -99,9 +98,7 @@ public void TestBypassReadWriteNoRightsTurnNotificationBackOn()\n     public void TestBypassReadWriteNoRights()\n     {\n       UnitTestContext context = GetContext();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       bool propertyChangedFired = false;\n \n       BypassBusinessBase testObj = new BypassBusinessBase();\n@@ -114,9 +111,7 @@ public void TestBypassReadWriteNoRights()\n       context.Assert.AreEqual(false, propertyChangedFired);\n       context.Assert.AreEqual(false, testObj.IsDirty);\n       context.Assert.Success();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n       context.Complete();\n     }\n \n@@ -124,9 +119,7 @@ public void TestBypassReadWriteNoRights()\n     public void TestBypassReadWriteWithRights()\n     {\n       UnitTestContext context = GetContext();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       bool propertyChangedFired = false;\n       BypassBusinessBase testObj = new BypassBusinessBase();\n       testObj.PropertyChanged += (o, e) =>\n@@ -138,9 +131,7 @@ public void TestBypassReadWriteWithRights()\n       context.Assert.AreEqual(true, propertyChangedFired);\n       context.Assert.AreEqual(true, testObj.IsDirty);\n       context.Assert.Success();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n       context.Complete();\n     }\n \n@@ -149,9 +140,7 @@ public void TestBypassReadWriteWithRights()\n     public void TestBypassWriteNoRightsDoNotBypass()\n     {\n       UnitTestContext context = GetContext();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       BypassBusinessBase testObj = new BypassBusinessBase();\n       bool propertyChangedFired = false;\n       testObj.PropertyChanged += (o, e) =>\n@@ -163,9 +152,7 @@ public void TestBypassWriteNoRightsDoNotBypass()\n       context.Assert.AreEqual(true, propertyChangedFired);\n       context.Assert.AreEqual(true, testObj.IsDirty);\n       context.Assert.Success();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n       context.Complete();\n     }\n \n@@ -173,9 +160,7 @@ public void TestBypassWriteNoRightsDoNotBypass()\n     public void TestBypassReadNoRightsDoNotBypass()\n     {\n       UnitTestContext context = GetContext();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       bool propertyChangedFired = false;\n       BypassBusinessBase testObj = new BypassBusinessBase();\n       testObj.PropertyChanged += (o, e) =>\n@@ -188,9 +173,7 @@ public void TestBypassReadNoRightsDoNotBypass()\n       context.Assert.AreEqual(0, testObj.ReadId2()); // 0 becuase we cannot read\n       context.Assert.AreEqual(false, propertyChangedFired);\n       context.Assert.Success();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n       context.Complete();\n     }\n \n@@ -200,9 +183,7 @@ public void TestBypassReadNoRightsDoNotBypass()\n     public void TestBypassReadWriteNoRightsBackingField()\n     {\n       UnitTestContext context = GetContext();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       bool propertyChangedFired = false;\n \n       BypassBusinessBase testObj = new BypassBusinessBase();\n@@ -215,9 +196,7 @@ public void TestBypassReadWriteNoRightsBackingField()\n       context.Assert.AreEqual(1, testObj.ReadId4ByPass());\n       context.Assert.AreEqual(false, propertyChangedFired);\n       context.Assert.Success();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n       context.Complete();\n     }\n \n@@ -225,9 +204,7 @@ public void TestBypassReadWriteNoRightsBackingField()\n     public void TestBypassReadWriteWithRightsBackingField()\n     {\n       UnitTestContext context = GetContext();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       bool propertyChangedFired = false;\n       BypassBusinessBase testObj = new BypassBusinessBase();\n       testObj.PropertyChanged += (o, e) =>\n@@ -239,9 +216,7 @@ public void TestBypassReadWriteWithRightsBackingField()\n       context.Assert.AreEqual(1, testObj.ReadId3());\n       context.Assert.AreEqual(true, propertyChangedFired);\n       context.Assert.Success();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n       context.Complete();\n     }\n \n@@ -250,9 +225,7 @@ public void TestBypassReadWriteWithRightsBackingField()\n     public void TestBypassWriteNoRightsDoNotBypassBackingField()\n     {\n       UnitTestContext context = GetContext();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       BypassBusinessBase testObj = new BypassBusinessBase();\n       bool propertyChangedFired = false;\n       testObj.PropertyChanged += (o, e) =>\n@@ -264,9 +237,7 @@ public void TestBypassWriteNoRightsDoNotBypassBackingField()\n       context.Assert.AreEqual(1, testObj.ReadId4ByPass());\n       context.Assert.AreEqual(true, propertyChangedFired);\n       context.Assert.Success();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n       context.Complete();\n     }\n \n@@ -274,9 +245,7 @@ public void TestBypassWriteNoRightsDoNotBypassBackingField()\n     public void TestBypassReadNoRightsDoNotBypassBackingField()\n     {\n       UnitTestContext context = GetContext();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n       bool propertyChangedFired = false;\n       BypassBusinessBase testObj = new BypassBusinessBase();\n       testObj.PropertyChanged += (o, e) =>\n@@ -289,9 +258,7 @@ public void TestBypassReadNoRightsDoNotBypassBackingField()\n       context.Assert.AreEqual(0, testObj.ReadId4()); // 0 becuase we cannot read\n       context.Assert.AreEqual(false, propertyChangedFired);\n       context.Assert.Success();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n       context.Complete();\n     }\n \n@@ -299,17 +266,13 @@ public void TestBypassReadNoRightsDoNotBypassBackingField()\n     public void TestBypassFactory()\n     {\n       UnitTestContext context = GetContext();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n \n       BypassBusinessBaseUsingFactory obj = BypassBusinessBaseUsingFactory.GetObject();\n       context.Assert.AreEqual(false, obj.IsDirty);\n       context.Assert.AreEqual(7, obj.ReadId2ByPass());\n       context.Assert.Success();\n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n       context.Complete();\n     }\n   }\ndiff --git a/Source/Csla.test/ObjectFactory/ObjectFactoryTests.cs b/Source/Csla.test/ObjectFactory/ObjectFactoryTests.cs\nindex d5ddfa20f..494f80634 100644\n--- a/Source/Csla.test/ObjectFactory/ObjectFactoryTests.cs\n+++ b/Source/Csla.test/ObjectFactory/ObjectFactoryTests.cs\n@@ -44,7 +44,7 @@ public void Cleanup()\n     [TestCategory("SkipWhenLiveUnitTesting")]\n     public void Create()\n     {\n-      Csla.ApplicationContext.User = new Csla.Security.UnauthenticatedPrincipal();\n+      Csla.ApplicationContext.User = new System.Security.Claims.ClaimsPrincipal();\n       Csla.ApplicationContext.DataPortalProxy = "Csla.Testing.Business.TestProxies.AppDomainProxy, Csla.Testing.Business";\n \n       Csla.Server.FactoryDataPortal.FactoryLoader =\n@@ -73,7 +73,7 @@ public void CreateLocal()\n     [TestMethod]\n     public void CreateWithParam()\n     {\n-      Csla.ApplicationContext.User = new Csla.Security.UnauthenticatedPrincipal();\n+      Csla.ApplicationContext.User = new System.Security.Claims.ClaimsPrincipal();\n       Csla.ApplicationContext.DataPortalProxy = "Csla.Testing.Business.TestProxies.AppDomainProxy, Csla.Testing.Business";\n       Csla.Server.FactoryDataPortal.FactoryLoader =\n           new ObjectFactoryLoader();\n@@ -91,7 +91,7 @@ public void CreateWithParam()\n     [ExpectedException(typeof(MissingMethodException))]\n     public void CreateMissing()\n     {\n-      Csla.ApplicationContext.User = new Csla.Security.UnauthenticatedPrincipal();\n+      Csla.ApplicationContext.User = new System.Security.Claims.ClaimsPrincipal();\n       Csla.ApplicationContext.DataPortalProxy = "Csla.Testing.Business.TestProxies.AppDomainProxy, Csla.Testing.Business";\n       Csla.Server.FactoryDataPortal.FactoryLoader =\n           new ObjectFactoryLoader(1);\ndiff --git a/Source/Csla.test/Serialization/SerializationTests.cs b/Source/Csla.test/Serialization/SerializationTests.cs\nindex 9c6076e68..f7ed90ca3 100644\n--- a/Source/Csla.test/Serialization/SerializationTests.cs\n+++ b/Source/Csla.test/Serialization/SerializationTests.cs\n@@ -15,6 +15,7 @@\n using Csla.Test.ValidationRules;\n using UnitDriven;\n using System.Threading.Tasks;\n+using System.Security.Claims;\n \n #if NUNIT\n using NUnit.Framework;\n@@ -52,6 +53,15 @@ public TestItem()\n       }\n     }\n \n+    private static ClaimsPrincipal GetPrincipal(params string[] roles)\n+    {\n+      var identity = new ClaimsIdentity();\n+      foreach (var item in roles)\n+        identity.AddClaim(new Claim(ClaimTypes.Role, item));\n+      return new ClaimsPrincipal(identity);\n+    }\n+\n+\n     [TestMethod]\n     public void SerializeDataPortalException()\n     {\n@@ -252,129 +262,129 @@ public async Task TestValidationRulesAfterSerialization()\n       context.Complete();\n     }\n \n-\t\t[TestMethod()]\n-\t\tpublic void TestSerializationCslaBinaryReaderWriterList()\n-\t\t{\n-\t\t\tvar test = new BinaryReaderWriterTestClassList();\n-\t\t\tBinaryReaderWriterTestClassList result;\n-\t\t\ttest.Setup();\n-\t\t\tvar serialized = MobileFormatter.SerializeToDTO(test);\n-\t\t\tCslaBinaryWriter writer = new CslaBinaryWriter();\n-\t\t\tbyte[] data;\n-\t\t\tusing (var stream = new MemoryStream())\n-\t\t\t{\n-\t\t\t\twriter.Write(stream, serialized);\n-\t\t\t\tdata = stream.ToArray();\n-\t\t\t}\n-\n-\t\t\tCslaBinaryReader reader = new CslaBinaryReader();\n-\t\t\tusing (var stream = new MemoryStream(data))\n-\t\t\t{\n-\t\t\t\tvar deserialized = reader.Read(stream);\n-\t\t\t\tresult = (BinaryReaderWriterTestClassList)MobileFormatter.DeserializeFromDTO(deserialized);\n-\t\t\t}\n-\n-\t\t\tAssert.AreEqual(test.Count, result.Count);\n-\t\t\tfor (int i = 0; i < test.Count; i++)\n-\t\t\t{\n-\t\t\t\tAssert.AreEqual(test[i].CharTest, result[i].CharTest);\n-\t\t\t\tAssert.AreEqual(test[i].DateTimeOffsetTest, result[i].DateTimeOffsetTest);\n-\t\t\t\tAssert.AreEqual(test[i].DateTimeTest, result[i].DateTimeTest);\n-\t\t\t\tAssert.AreEqual(test[i].DecimalTest, result[i].DecimalTest);\n-\t\t\t\tAssert.AreEqual(test[i].DoubleTest, result[i].DoubleTest);\n-\t\t\t\tAssert.AreEqual(test[i].EnumTest, result[i].EnumTest);\n-\t\t\t\tAssert.AreEqual(test[i].GuidTest, result[i].GuidTest);\n-\t\t\t\tAssert.AreEqual(test[i].Int16Test, result[i].Int16Test);\n-\t\t\t\tAssert.AreEqual(test[i].Int32Test, result[i].Int32Test);\n-\t\t\t\tAssert.AreEqual(test[i].Int64Test, result[i].Int64Test);\n-\t\t\t\tAssert.AreEqual(test[i].SByteTest, result[i].SByteTest);\n-\t\t\t\tAssert.AreEqual(test[i].SingleTest, result[i].SingleTest);\n-\t\t\t\tAssert.AreEqual(test[i].StringTest, result[i].StringTest);\n-\t\t\t\tAssert.AreEqual(test[i].TimeSpanTest, result[i].TimeSpanTest);\n-\t\t\t\tAssert.AreEqual(test[i].UInt16Test, result[i].UInt16Test);\n-\t\t\t\tAssert.AreEqual(test[i].UInt32Test, result[i].UInt32Test);\n-\t\t\t\tAssert.AreEqual(test[i].UInt64Test, result[i].UInt64Test);\n-\n-\t\t\t\tAssert.AreEqual(test[i].EmptySmartDateTest, result[i].EmptySmartDateTest);\n-\t\t\t\tAssert.AreEqual(test[i].EmptySmartDateTest.FormatString, result[i].EmptySmartDateTest.FormatString);\n-\t\t\t\tAssert.AreEqual(test[i].EmptySmartDateTest.EmptyIsMin, result[i].EmptySmartDateTest.EmptyIsMin);\n-\t\t\t\tAssert.AreEqual(test[i].EmptySmartDateTest.IsEmpty, result[i].EmptySmartDateTest.IsEmpty);\n-\t\t\t\tAssert.AreEqual(test[i].EmptySmartDateTest.Date, result[i].EmptySmartDateTest.Date);\n-\t\t\t\t\t\t\t\t\t\t\t\t\n-\t\t\t\tAssert.AreEqual(test[i].FilledSmartDateTest, result[i].FilledSmartDateTest);\n-\t\t\t\tAssert.AreEqual(test[i].FilledSmartDateTest.FormatString, result[i].FilledSmartDateTest.FormatString);\n-\t\t\t\tAssert.AreEqual(test[i].FilledSmartDateTest.EmptyIsMin, result[i].FilledSmartDateTest.EmptyIsMin);\n-\t\t\t\tAssert.AreEqual(test[i].FilledSmartDateTest.IsEmpty, result[i].FilledSmartDateTest.IsEmpty);\n-\t\t\t\tAssert.AreEqual(test[i].FilledSmartDateTest.Date, result[i].FilledSmartDateTest.Date);\n-\t\t\t}\n-\t\t}\n-\n-\n-  \t[TestMethod()]\n-\t\tpublic void TestSerializationCslaBinaryReaderWriter()\n-\t\t{\n-\t\t\tvar test = new BinaryReaderWriterTestClass();\n-\t\t\tBinaryReaderWriterTestClass result;\n-\t\t\ttest.Setup();\n-\t\t\tvar serialized = MobileFormatter.SerializeToDTO(test);\n-\t\t\tCslaBinaryWriter writer = new CslaBinaryWriter();\n-\t\t\tbyte[] data;\n-\t\t\tusing (var stream = new MemoryStream())\n-\t\t\t{\n-\t\t\t\twriter.Write(stream, serialized);\n-\t\t\t\tdata = stream.ToArray();\n-\t\t\t}\n-\t\t\t\n-\t\t\tCslaBinaryReader reader = new CslaBinaryReader();\n-\t\t\tusing (var stream = new MemoryStream(data))\n-\t\t\t{\n-\t\t\t\tvar deserialized = reader.Read(stream);\n-\t\t\t\tresult = (BinaryReaderWriterTestClass)MobileFormatter.DeserializeFromDTO(deserialized);\n-\t\t\t}\n-\t\t\tAssert.AreEqual(test.BoolTest, result.BoolTest);\n-\t\t\tAssert.AreEqual(test.ByteArrayTest.Length, result.ByteArrayTest.Length);\n-\t\t\tfor (int i = 0; i < test.ByteArrayTest.Length; i++)\n-\t\t\t{\n-\t\t\t\tAssert.AreEqual(test.ByteArrayTest[i], result.ByteArrayTest[i]);\n-\t\t\t}\n-\t\t\t\n-\t\t\tAssert.AreEqual(test.ByteTest, result.ByteTest);\n-\t\t\tAssert.AreEqual(test.CharArrayTest.Length, result.CharArrayTest.Length);\n-\t\t\tfor (int i = 0; i < test.CharArrayTest.Length; i++)\n-\t\t\t{\n-\t\t\t\tAssert.AreEqual(test.CharArrayTest[i], result.CharArrayTest[i]);\n-\t\t\t}\n-\n-\t\t\tAssert.AreEqual(test.CharTest, result.CharTest);\n-\t\t\tAssert.AreEqual(test.DateTimeOffsetTest, result.DateTimeOffsetTest);\n-\t\t\tAssert.AreEqual(test.DateTimeTest, result.DateTimeTest);\n-\t\t\tAssert.AreEqual(test.DecimalTest, result.DecimalTest);\n-\t\t\tAssert.AreEqual(test.DoubleTest, result.DoubleTest);\n-\t\t\tAssert.AreEqual(test.EnumTest, result.EnumTest);\n-\t\t\tAssert.AreEqual(test.GuidTest, result.GuidTest);\n-\t\t\tAssert.AreEqual(test.Int16Test, result.Int16Test);\n-\t\t\tAssert.AreEqual(test.Int32Test, result.Int32Test);\n-\t\t\tAssert.AreEqual(test.Int64Test, result.Int64Test);\n-\t\t\tAssert.AreEqual(test.SByteTest, result.SByteTest);\n-\t\t\tAssert.AreEqual(test.SingleTest, result.SingleTest);\n-\t\t\tAssert.AreEqual(test.StringTest, result.StringTest);\n-\t\t\tAssert.AreEqual(test.TimeSpanTest, result.TimeSpanTest);\n-\t\t\tAssert.AreEqual(test.UInt16Test, result.UInt16Test);\n-\t\t\tAssert.AreEqual(test.UInt32Test, result.UInt32Test);\n-\t\t\tAssert.AreEqual(test.UInt64Test, result.UInt64Test);\n-\n-\t\t\tAssert.AreEqual(test.EmptySmartDateTest, result.EmptySmartDateTest);\n-\t\t\tAssert.AreEqual(test.EmptySmartDateTest.FormatString, result.EmptySmartDateTest.FormatString);\n-\t\t\tAssert.AreEqual(test.EmptySmartDateTest.EmptyIsMin, result.EmptySmartDateTest.EmptyIsMin);\n-\t\t\tAssert.AreEqual(test.EmptySmartDateTest.IsEmpty, result.EmptySmartDateTest.IsEmpty);\n-\t\t\tAssert.AreEqual(test.EmptySmartDateTest.Date, result.EmptySmartDateTest.Date);\n-\n-\t\t\tAssert.AreEqual(test.FilledSmartDateTest, result.FilledSmartDateTest);\n-\t\t\tAssert.AreEqual(test.FilledSmartDateTest.FormatString, result.FilledSmartDateTest.FormatString);\n-\t\t\tAssert.AreEqual(test.FilledSmartDateTest.EmptyIsMin, result.FilledSmartDateTest.EmptyIsMin);\n-\t\t\tAssert.AreEqual(test.FilledSmartDateTest.IsEmpty, result.FilledSmartDateTest.IsEmpty);\n-\t\t\tAssert.AreEqual(test.FilledSmartDateTest.Date, result.FilledSmartDateTest.Date);\n-\t\t}\n+    [TestMethod()]\n+    public void TestSerializationCslaBinaryReaderWriterList()\n+    {\n+      var test = new BinaryReaderWriterTestClassList();\n+      BinaryReaderWriterTestClassList result;\n+      test.Setup();\n+      var serialized = MobileFormatter.SerializeToDTO(test);\n+      CslaBinaryWriter writer = new CslaBinaryWriter();\n+      byte[] data;\n+      using (var stream = new MemoryStream())\n+      {\n+        writer.Write(stream, serialized);\n+        data = stream.ToArray();\n+      }\n+\n+      CslaBinaryReader reader = new CslaBinaryReader();\n+      using (var stream = new MemoryStream(data))\n+      {\n+        var deserialized = reader.Read(stream);\n+        result = (BinaryReaderWriterTestClassList)MobileFormatter.DeserializeFromDTO(deserialized);\n+      }\n+\n+      Assert.AreEqual(test.Count, result.Count);\n+      for (int i = 0; i < test.Count; i++)\n+      {\n+        Assert.AreEqual(test[i].CharTest, result[i].CharTest);\n+        Assert.AreEqual(test[i].DateTimeOffsetTest, result[i].DateTimeOffsetTest);\n+        Assert.AreEqual(test[i].DateTimeTest, result[i].DateTimeTest);\n+        Assert.AreEqual(test[i].DecimalTest, result[i].DecimalTest);\n+        Assert.AreEqual(test[i].DoubleTest, result[i].DoubleTest);\n+        Assert.AreEqual(test[i].EnumTest, result[i].EnumTest);\n+        Assert.AreEqual(test[i].GuidTest, result[i].GuidTest);\n+        Assert.AreEqual(test[i].Int16Test, result[i].Int16Test);\n+        Assert.AreEqual(test[i].Int32Test, result[i].Int32Test);\n+        Assert.AreEqual(test[i].Int64Test, result[i].Int64Test);\n+        Assert.AreEqual(test[i].SByteTest, result[i].SByteTest);\n+        Assert.AreEqual(test[i].SingleTest, result[i].SingleTest);\n+        Assert.AreEqual(test[i].StringTest, result[i].StringTest);\n+        Assert.AreEqual(test[i].TimeSpanTest, result[i].TimeSpanTest);\n+        Assert.AreEqual(test[i].UInt16Test, result[i].UInt16Test);\n+        Assert.AreEqual(test[i].UInt32Test, result[i].UInt32Test);\n+        Assert.AreEqual(test[i].UInt64Test, result[i].UInt64Test);\n+\n+        Assert.AreEqual(test[i].EmptySmartDateTest, result[i].EmptySmartDateTest);\n+        Assert.AreEqual(test[i].EmptySmartDateTest.FormatString, result[i].EmptySmartDateTest.FormatString);\n+        Assert.AreEqual(test[i].EmptySmartDateTest.EmptyIsMin, result[i].EmptySmartDateTest.EmptyIsMin);\n+        Assert.AreEqual(test[i].EmptySmartDateTest.IsEmpty, result[i].EmptySmartDateTest.IsEmpty);\n+        Assert.AreEqual(test[i].EmptySmartDateTest.Date, result[i].EmptySmartDateTest.Date);\n+                        \n+        Assert.AreEqual(test[i].FilledSmartDateTest, result[i].FilledSmartDateTest);\n+        Assert.AreEqual(test[i].FilledSmartDateTest.FormatString, result[i].FilledSmartDateTest.FormatString);\n+        Assert.AreEqual(test[i].FilledSmartDateTest.EmptyIsMin, result[i].FilledSmartDateTest.EmptyIsMin);\n+        Assert.AreEqual(test[i].FilledSmartDateTest.IsEmpty, result[i].FilledSmartDateTest.IsEmpty);\n+        Assert.AreEqual(test[i].FilledSmartDateTest.Date, result[i].FilledSmartDateTest.Date);\n+      }\n+    }\n+\n+\n+    [TestMethod()]\n+    public void TestSerializationCslaBinaryReaderWriter()\n+    {\n+      var test = new BinaryReaderWriterTestClass();\n+      BinaryReaderWriterTestClass result;\n+      test.Setup();\n+      var serialized = MobileFormatter.SerializeToDTO(test);\n+      CslaBinaryWriter writer = new CslaBinaryWriter();\n+      byte[] data;\n+      using (var stream = new MemoryStream())\n+      {\n+        writer.Write(stream, serialized);\n+        data = stream.ToArray();\n+      }\n+      \n+      CslaBinaryReader reader = new CslaBinaryReader();\n+      using (var stream = new MemoryStream(data))\n+      {\n+        var deserialized = reader.Read(stream);\n+        result = (BinaryReaderWriterTestClass)MobileFormatter.DeserializeFromDTO(deserialized);\n+      }\n+      Assert.AreEqual(test.BoolTest, result.BoolTest);\n+      Assert.AreEqual(test.ByteArrayTest.Length, result.ByteArrayTest.Length);\n+      for (int i = 0; i < test.ByteArrayTest.Length; i++)\n+      {\n+        Assert.AreEqual(test.ByteArrayTest[i], result.ByteArrayTest[i]);\n+      }\n+      \n+      Assert.AreEqual(test.ByteTest, result.ByteTest);\n+      Assert.AreEqual(test.CharArrayTest.Length, result.CharArrayTest.Length);\n+      for (int i = 0; i < test.CharArrayTest.Length; i++)\n+      {\n+        Assert.AreEqual(test.CharArrayTest[i], result.CharArrayTest[i]);\n+      }\n+\n+      Assert.AreEqual(test.CharTest, result.CharTest);\n+      Assert.AreEqual(test.DateTimeOffsetTest, result.DateTimeOffsetTest);\n+      Assert.AreEqual(test.DateTimeTest, result.DateTimeTest);\n+      Assert.AreEqual(test.DecimalTest, result.DecimalTest);\n+      Assert.AreEqual(test.DoubleTest, result.DoubleTest);\n+      Assert.AreEqual(test.EnumTest, result.EnumTest);\n+      Assert.AreEqual(test.GuidTest, result.GuidTest);\n+      Assert.AreEqual(test.Int16Test, result.Int16Test);\n+      Assert.AreEqual(test.Int32Test, result.Int32Test);\n+      Assert.AreEqual(test.Int64Test, result.Int64Test);\n+      Assert.AreEqual(test.SByteTest, result.SByteTest);\n+      Assert.AreEqual(test.SingleTest, result.SingleTest);\n+      Assert.AreEqual(test.StringTest, result.StringTest);\n+      Assert.AreEqual(test.TimeSpanTest, result.TimeSpanTest);\n+      Assert.AreEqual(test.UInt16Test, result.UInt16Test);\n+      Assert.AreEqual(test.UInt32Test, result.UInt32Test);\n+      Assert.AreEqual(test.UInt64Test, result.UInt64Test);\n+\n+      Assert.AreEqual(test.EmptySmartDateTest, result.EmptySmartDateTest);\n+      Assert.AreEqual(test.EmptySmartDateTest.FormatString, result.EmptySmartDateTest.FormatString);\n+      Assert.AreEqual(test.EmptySmartDateTest.EmptyIsMin, result.EmptySmartDateTest.EmptyIsMin);\n+      Assert.AreEqual(test.EmptySmartDateTest.IsEmpty, result.EmptySmartDateTest.IsEmpty);\n+      Assert.AreEqual(test.EmptySmartDateTest.Date, result.EmptySmartDateTest.Date);\n+\n+      Assert.AreEqual(test.FilledSmartDateTest, result.FilledSmartDateTest);\n+      Assert.AreEqual(test.FilledSmartDateTest.FormatString, result.FilledSmartDateTest.FormatString);\n+      Assert.AreEqual(test.FilledSmartDateTest.EmptyIsMin, result.FilledSmartDateTest.EmptyIsMin);\n+      Assert.AreEqual(test.FilledSmartDateTest.IsEmpty, result.FilledSmartDateTest.IsEmpty);\n+      Assert.AreEqual(test.FilledSmartDateTest.Date, result.FilledSmartDateTest.Date);\n+    }\n \n     [TestMethod()]\n     public void TestAuthorizationRulesAfterSerialization()\n@@ -391,9 +401,7 @@ public void TestAuthorizationRulesAfterSerialization()\n         Assert.AreEqual("Property set not allowed", ex.Message);\n       }\n \n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n \n       try\n       {\n@@ -404,9 +412,7 @@ public void TestAuthorizationRulesAfterSerialization()\n         Assert.Fail("exception occurred");\n       }\n \n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n \n       Csla.Test.Security.PermissionsRoot rootClone = root.Clone();\n \n@@ -420,9 +426,7 @@ public void TestAuthorizationRulesAfterSerialization()\n         Assert.AreEqual("Property set not allowed", ex.Message);\n       }\n \n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogin();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = GetPrincipal("Admin");\n \n       try\n       {\n@@ -433,9 +437,7 @@ public void TestAuthorizationRulesAfterSerialization()\n         Assert.Fail("exception occurred");\n       }\n \n-#pragma warning disable CS0436 // Type conflicts with imported type\n-      Csla.Test.Security.TestPrincipal.SimulateLogout();\n-#pragma warning restore CS0436 // Type conflicts with imported type\n+      Csla.ApplicationContext.User = new ClaimsPrincipal();\n \n     }\n \ndiff --git a/Source/Csla.test/Silverlight/ApplicationContext/ClientContextTests.server.cs b/Source/Csla.test/Silverlight/ApplicationContext/ClientContextTests.server.cs\nindex 5a5b873f3..233cafea7 100644\n--- a/Source/Csla.test/Silverlight/ApplicationContext/ClientContextTests.server.cs\n+++ b/Source/Csla.test/Silverlight/ApplicationContext/ClientContextTests.server.cs\n@@ -33,7 +33,7 @@ public void ServerShouldReceiveClientContextValue()\n     {\n       var context = GetContext();\n \n-      Csla.ApplicationContext.User = new UnauthenticatedPrincipal();\n+      Csla.ApplicationContext.User = new System.Security.Claims.ClaimsPrincipal();\n \n       Csla.ApplicationContext.DataPortalProxy = "Csla.Testing.Business.TestProxies.AppDomainProxy, Csla.Testing.Business";\n \ndiff --git a/Source/Csla.test/Silverlight/ApplicationContext/GlobalCOntextTests.server.cs b/Source/Csla.test/Silverlight/ApplicationContext/GlobalCOntextTests.server.cs\nindex bcdcff6b6..e996ee600 100644\n--- a/Source/Csla.test/Silverlight/ApplicationContext/GlobalCOntextTests.server.cs\n+++ b/Source/Csla.test/Silverlight/ApplicationContext/GlobalCOntextTests.server.cs\n@@ -31,7 +31,7 @@ public void ServerShouldReceiveGlobalContextValue()\n     {\n       var context = GetContext();\n \n-      Csla.ApplicationContext.User = new UnauthenticatedPrincipal();\n+      Csla.ApplicationContext.User = new System.Security.Claims.ClaimsPrincipal();\n \n       Csla.ApplicationContext.DataPortalProxy = "Csla.Testing.Business.TestProxies.AppDomainProxy, Csla.Testing.Business";\n \n@@ -56,7 +56,7 @@ public void ServerShouldReceiveGlobalContextValue()\n     public void GlobalContextOnClientShouldBeAffectedByChangeOnServer()\n     {\n       var context = GetContext();\n-      Csla.ApplicationContext.User = new UnauthenticatedPrincipal();\n+      Csla.ApplicationContext.User = new System.Security.Claims.ClaimsPrincipal();\n \n       Csla.ApplicationContext.DataPortalProxy = "Csla.Testing.Business.TestProxies.AppDomainProxy, Csla.Testing.Business";\n \ndiff --git a/Source/Csla.test/Silverlight/NameValueList/NameValueListTests.cs b/Source/Csla.test/Silverlight/NameValueList/NameValueListTests.cs\nindex ce0b52a93..46a2c0263 100644\n--- a/Source/Csla.test/Silverlight/NameValueList/NameValueListTests.cs\n+++ b/Source/Csla.test/Silverlight/NameValueList/NameValueListTests.cs\n@@ -9,7 +9,6 @@\n using Csla.DataPortalClient;\n using Csla.Testing.Business.ReadOnlyTest;\n using System;\n-using Csla.Testing.Business.Security;\n using UnitDriven;\n \n #if NUNIT\ndiff --git a/Source/Csla.test/Silverlight/Security/SecurityTests.clr.cs b/Source/Csla.test/Silverlight/Security/SecurityTests.clr.cs\ndeleted file mode 100644\nindex 4c6dea45a..000000000\n--- a/Source/Csla.test/Silverlight/Security/SecurityTests.clr.cs\n+++ /dev/null\n@@ -1,60 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="SecurityTests.clr.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>no summary</summary>\n-//-----------------------------------------------------------------------\n-#if NUNIT\n-using NUnit.Framework;\n-using TestClass = NUnit.Framework.TestFixtureAttribute;\n-using TestInitialize = NUnit.Framework.SetUpAttribute;\n-using TestCleanup = NUnit.Framework.TearDownAttribute;\n-using TestMethod = NUnit.Framework.TestAttribute;\n-using TestSetup = NUnit.Framework.SetUpAttribute;\n-#elif MSTEST\n-using Microsoft.VisualStudio.TestTools.UnitTesting;\n-#endif\n-\n-using ApplicationContext = Csla.ApplicationContext;\n-\n-namespace Csla.Test.Silverlight.Security\n-{\n-  [TestClass]\n-  public partial class SecurityTests\n-  {\n-    [TestMethod]\n-    public void SetMembershipPrincipalWebServer()\n-    {\n-      Csla.Testing.Business.Security.SilverlightPrincipal.LoginUsingMembershipProviderWebServer("sergeyb", "pwd");\n-      Assert.IsNotNull(Csla.ApplicationContext.User);\n-      Assert.AreEqual(true, Csla.ApplicationContext.User.Identity.IsAuthenticated);\n-      Assert.AreEqual("sergeyb", Csla.ApplicationContext.User.Identity.Name);\n-      Assert.AreEqual(true, Csla.ApplicationContext.User.IsInRole("Admin"));\n-\n-    }\n-\n-    [TestMethod]\n-    public void SetMembershipPrincipalDataPortal()\n-    {\n-      Csla.Testing.Business.Security.SilverlightPrincipal.LoginUsingMembershipProviderDataPortal("sergeyb", "pwd");\n-      Assert.IsNotNull(Csla.ApplicationContext.User);\n-      Assert.AreEqual(true, Csla.ApplicationContext.User.Identity.IsAuthenticated);\n-      Assert.AreEqual("sergeyb", Csla.ApplicationContext.User.Identity.Name);\n-      Assert.AreEqual(true, Csla.ApplicationContext.User.IsInRole("Admin"));\n-\n-    }\n-\n-    [TestMethod]\n-    public void SetInvalidMembershipPrincipal()\n-    {\n-\n-      Csla.Testing.Business.Security.SilverlightPrincipal.LoginUsingMembershipProviderDataPortal("invalidusername", "pwd");\n-      Assert.IsNotNull(Csla.ApplicationContext.User);\n-      Assert.AreEqual(false, Csla.ApplicationContext.User.Identity.IsAuthenticated);\n-      Assert.AreEqual("", Csla.ApplicationContext.User.Identity.Name);\n-      Assert.AreEqual(false, Csla.ApplicationContext.User.IsInRole("Admin"));\n-    }\n-\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Silverlight/Security/SecurityTests.cs b/Source/Csla.test/Silverlight/Security/SecurityTests.cs\ndeleted file mode 100644\nindex 6da69233b..000000000\n--- a/Source/Csla.test/Silverlight/Security/SecurityTests.cs\n+++ /dev/null\n@@ -1,26 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="SecurityTests.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>no summary</summary>\n-//-----------------------------------------------------------------------\n-using UnitDriven;\n-\n-#if NUNIT\n-using TestClass = NUnit.Framework.TestFixtureAttribute;\n-\n-#elif MSTEST\n-using Microsoft.VisualStudio.TestTools.UnitTesting;\n-#endif\n-\n-namespace Csla.Test.Silverlight.Security\n-{\n-  [TestClass]\n-  public partial class SecurityTests : TestBase\n-  {\n-    protected string AdminRoleName = "Admin Role";\n-    protected string WcfProxyTypeName = "Csla.DataPortalClient.SynchronizedWcfProxy`1, Csla, Version=3.6.0.0, Culture=neutral, PublicKeyToken=93be5fdc093e4c30";\n-\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Silverlight/Security/SecurityTests.server.cs b/Source/Csla.test/Silverlight/Security/SecurityTests.server.cs\ndeleted file mode 100644\nindex 44d3af57d..000000000\n--- a/Source/Csla.test/Silverlight/Security/SecurityTests.server.cs\n+++ /dev/null\n@@ -1,70 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="SecurityTests.server.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>no summary</summary>\n-//-----------------------------------------------------------------------\n-using System.Configuration.Provider;\n-using System.Reflection;\n-using System.Web.Security;\n-using Csla.Testing.Business.Security;\n-using UnitDriven;\n-\n-#if NUNIT\n-using NUnit.Framework;\n-using TestClass = NUnit.Framework.TestFixtureAttribute;\n-using TestInitialize = NUnit.Framework.SetUpAttribute;\n-using TestCleanup = NUnit.Framework.TearDownAttribute;\n-using TestMethod = NUnit.Framework.TestAttribute;\n-using TestSetup = NUnit.Framework.SetUpAttribute;\n-#elif MSTEST\n-using Microsoft.VisualStudio.TestTools.UnitTesting;\n-#endif\n-\n-namespace Csla.Test.Silverlight.Security\n-{\n-  public partial class SecurityTests\n-  {\n-\n-    private void InitMockRoleProvider()\n-    {\n-      var role = new MockRoleProvider();\n-      role.Initialize("MockRoleProvider",null);\n-      typeof(ProviderCollection).GetField("_ReadOnly", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(Roles.Providers, false);\n-      Roles.Providers.Clear();\n-      Roles.Providers.Add(role);\n-    }\n-\n-    private void InitMockMembershipProvider()\n-    {\n-      //Little reflection to assure that the Membership.Providers can be modified\n-      var provider = new MockMembershipProvider();\n-      provider.Initialize("MockMembershipProvider",null);\n-      typeof(ProviderCollection).GetField("_ReadOnly", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(Membership.Providers, false);\n-      Membership.Providers.Clear();\n-      Membership.Providers.Add(provider);\n-    }\n-\n-    [TestMethod]\n-    \n-    public void SetCSLAPrincipalLocal()\n-    {\n-      SilverlightPrincipal.Logout();\n-      SilverlightPrincipal.LoginUsingCSLA(SilverlightPrincipal.VALID_TEST_UID, SilverlightPrincipal.VALID_TEST_PWD);\n-      Assert.IsNotNull(Csla.ApplicationContext.User);\n-      Assert.AreEqual(true, Csla.ApplicationContext.User.Identity.IsAuthenticated);\n-      Assert.AreEqual("SilverlightIdentity", Csla.ApplicationContext.User.Identity.Name);\n-      Assert.AreEqual("SilverLight", Csla.ApplicationContext.User.Identity.AuthenticationType);\n-      Assert.AreEqual(true, Csla.ApplicationContext.User.IsInRole(AdminRoleName));\n-\n-      SilverlightPrincipal.Logout();\n-      SilverlightPrincipal.LoginUsingCSLA("invalidusername", SilverlightPrincipal.VALID_TEST_PWD);\n-      Assert.IsNotNull(Csla.ApplicationContext.User);\n-      Assert.AreEqual(false, Csla.ApplicationContext.User.Identity.IsAuthenticated);\n-      Assert.AreEqual("", Csla.ApplicationContext.User.Identity.Name);\n-      Assert.AreEqual(false, Csla.ApplicationContext.User.IsInRole(AdminRoleName));\n-      Assert.AreEqual("Csla", Csla.ApplicationContext.User.Identity.AuthenticationType);\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Silverlight/Server/NameValueList/BasicNameValueList.cs b/Source/Csla.test/Silverlight/Server/NameValueList/BasicNameValueList.cs\nindex e54c855eb..32ece3035 100644\n--- a/Source/Csla.test/Silverlight/Server/NameValueList/BasicNameValueList.cs\n+++ b/Source/Csla.test/Silverlight/Server/NameValueList/BasicNameValueList.cs\n@@ -6,8 +6,6 @@\n // <summary>no summary</summary>\n //-----------------------------------------------------------------------\n using System;\n-using Csla.Silverlight;\n-using Csla.Serialization;\n using Csla;\n \n namespace cslalighttest.NameValueList\ndiff --git a/Source/Csla.test/Silverlight/Server/ObjectFactory/BusinessItem.cs b/Source/Csla.test/Silverlight/Server/ObjectFactory/BusinessItem.cs\nindex 7bd9047d1..d9cff11d4 100644\n--- a/Source/Csla.test/Silverlight/Server/ObjectFactory/BusinessItem.cs\n+++ b/Source/Csla.test/Silverlight/Server/ObjectFactory/BusinessItem.cs\n@@ -6,10 +6,6 @@\n // <summary>no summary</summary>\n //-----------------------------------------------------------------------\n using System;\n-using Csla.Silverlight;\n-using Csla.Serialization;\n-using Csla;\n-using Csla.Server;\n \n namespace Csla.Testing.Business.ObjectFactory\n {\ndiff --git a/Source/Csla.test/Silverlight/Server/ReadOnlyTests/ReadOnlyPerson.cs b/Source/Csla.test/Silverlight/Server/ReadOnlyTests/ReadOnlyPerson.cs\nindex 5a4c3ccb1..a23a0b476 100644\n--- a/Source/Csla.test/Silverlight/Server/ReadOnlyTests/ReadOnlyPerson.cs\n+++ b/Source/Csla.test/Silverlight/Server/ReadOnlyTests/ReadOnlyPerson.cs\n@@ -6,11 +6,6 @@\n // <summary>no summary</summary>\n //-----------------------------------------------------------------------\n using System;\n-using System.Collections.Generic;\n-using Csla;\n-using Csla.Serialization;\n-using Csla.Silverlight;\n-using Csla.Core.FieldManager;\n \n namespace Csla.Testing.Business.ReadOnlyTest\n {\ndiff --git a/Source/Csla.test/Silverlight/Server/ReadOnlyTests/ReadOnlyPersonList.cs b/Source/Csla.test/Silverlight/Server/ReadOnlyTests/ReadOnlyPersonList.cs\nindex 6faba5578..060e28e4f 100644\n--- a/Source/Csla.test/Silverlight/Server/ReadOnlyTests/ReadOnlyPersonList.cs\n+++ b/Source/Csla.test/Silverlight/Server/ReadOnlyTests/ReadOnlyPersonList.cs\n@@ -6,14 +6,6 @@\n // <summary>no summary</summary>\n //-----------------------------------------------------------------------\n using System;\n-using System.Collections.Generic;\n-using Csla;\n-using Csla.Serialization;\n-using Csla.Silverlight;\n-using Csla.Core.FieldManager;\n-using System.Linq;\n-using System.Text;\n-using Csla.DataPortalClient;\n \n namespace Csla.Testing.Business.ReadOnlyTest\n {\ndiff --git a/Source/Csla.test/Silverlight/Server/Security/MockMembershipProvider.cs b/Source/Csla.test/Silverlight/Server/Security/MockMembershipProvider.cs\ndeleted file mode 100644\nindex f3ffcdf68..000000000\n--- a/Source/Csla.test/Silverlight/Server/Security/MockMembershipProvider.cs\n+++ /dev/null\n@@ -1,163 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="MockMembershipProvider.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>Mock implementation of a MembershipProvider that gives us predetermined responses for our tests</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Web.Security;\n-\n-namespace Csla.Testing.Business.Security\n-{\n-  /// <summary>\n-  /// Mock implementation of a MembershipProvider that gives us predetermined responses for our tests\n-  /// </summary>\n-  public class MockMembershipProvider : MembershipProvider\n-  {\n-    public override bool ValidateUser(string username, string password)\n-    {\n-      return (username == "user" && password == "1234") ||\n-        (username == "admin" && password == "12345");\n-    }\n-\n-    string _ApplicationName;\n-    public override string ApplicationName\n-    {\n-      get\n-      {\n-        return _ApplicationName;\n-      }\n-      set\n-      {\n-        _ApplicationName = value;\n-      }\n-    }\n-\n-    public override bool ChangePassword(string username, string oldPassword, string newPassword)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override bool DeleteUser(string username, bool deleteAllRelatedData)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override bool EnablePasswordReset\n-    {\n-      get { throw new NotImplementedException(); }\n-    }\n-\n-    public override bool EnablePasswordRetrieval\n-    {\n-      get { throw new NotImplementedException(); }\n-    }\n-\n-    public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override int GetNumberOfUsersOnline()\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override string GetPassword(string username, string answer)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override MembershipUser GetUser(string username, bool userIsOnline)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override string GetUserNameByEmail(string email)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override int MaxInvalidPasswordAttempts\n-    {\n-      get { throw new NotImplementedException(); }\n-    }\n-\n-    public override int MinRequiredNonAlphanumericCharacters\n-    {\n-      get { throw new NotImplementedException(); }\n-    }\n-\n-    public override int MinRequiredPasswordLength\n-    {\n-      get { throw new NotImplementedException(); }\n-    }\n-\n-    public override int PasswordAttemptWindow\n-    {\n-      get { throw new NotImplementedException(); }\n-    }\n-\n-    public override MembershipPasswordFormat PasswordFormat\n-    {\n-      get { throw new NotImplementedException(); }\n-    }\n-\n-    public override string PasswordStrengthRegularExpression\n-    {\n-      get { throw new NotImplementedException(); }\n-    }\n-\n-    public override bool RequiresQuestionAndAnswer\n-    {\n-      get { throw new NotImplementedException(); }\n-    }\n-\n-    public override bool RequiresUniqueEmail\n-    {\n-      get { throw new NotImplementedException(); }\n-    }\n-\n-    public override string ResetPassword(string username, string answer)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override bool UnlockUser(string userName)\n-    {\n-      throw new NotImplementedException();\n-    }\n-\n-    public override void UpdateUser(MembershipUser user)\n-    {\n-      throw new NotImplementedException();\n-    }\n-  }\n-\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Silverlight/Server/Security/MockRoleProvider.cs b/Source/Csla.test/Silverlight/Server/Security/MockRoleProvider.cs\ndeleted file mode 100644\nindex ca75c77a9..000000000\n--- a/Source/Csla.test/Silverlight/Server/Security/MockRoleProvider.cs\n+++ /dev/null\n@@ -1,150 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="MockRoleProvider.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>Gets a value indicating whether the specified user is in the specified role for the configured applicationName.</summary>\n-//-----------------------------------------------------------------------\n-using System.Web.Security;\n-\n-namespace Csla.Testing.Business.Security\n-{\n-  public class MockRoleProvider : RoleProvider\n-  {\n-    /// <summary>\n-    /// Gets a value indicating whether the specified user is in the specified role for the configured applicationName.\n-    /// </summary>\n-    /// <returns>\n-    /// true if the specified user is in the specified role for the configured applicationName; otherwise, false.\n-    /// </returns>\n-    /// <param name="username">The user name to search for.</param>\n-    /// <param name="roleName">The role to search in.</param>\n-    public override bool IsUserInRole(string username, string roleName)\n-    {\n-      if (username == "user" && roleName == "User Role") return true;\n-\n-      return username == "admin" && (roleName == "Admin Role" || roleName == "UserRole");\n-    }\n-\n-    /// <summary>\n-    /// Gets a list of the roles that a specified user is in for the configured applicationName.\n-    /// </summary>\n-    /// <returns>\n-    /// A string array containing the names of all the roles that the specified user is in for the configured applicationName.\n-    /// </returns>\n-    /// <param name="username">The user to return a list of roles for.</param>\n-    public override string[] GetRolesForUser(string username)\n-    {\n-      if (username == "user")\n-        return new[] { "User Role" };\n-\n-      return\n-        username == "admin" ?\n-          new[] { "Admin Role", "User Role" } :\n-          new string[] { };\n-    }\n-\n-    /// <summary>\n-    /// Adds a new role to the data source for the configured applicationName.\n-    /// </summary>\n-    /// <param name="roleName">The name of the role to create.</param>\n-    public override void CreateRole(string roleName)\n-    {\n-      throw new System.NotImplementedException();\n-    }\n-\n-    /// <summary>\n-    /// Removes a role from the data source for the configured applicationName.\n-    /// </summary>\n-    /// <returns>\n-    /// true if the role was successfully deleted; otherwise, false.\n-    /// </returns>\n-    /// <param name="roleName">The name of the role to delete.</param>\n-    /// <param name="throwOnPopulatedRole">If true, throw an exception if <paramref name="roleName" /> has one or more members and do not delete <paramref name="roleName" />.</param>\n-    public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)\n-    {\n-      throw new System.NotImplementedException();\n-    }\n-\n-    /// <summary>\n-    /// Gets a value indicating whether the specified role name already exists in the role data source for the configured applicationName.\n-    /// </summary>\n-    /// <returns>\n-    /// true if the role name already exists in the data source for the configured applicationName; otherwise, false.\n-    /// </returns>\n-    /// <param name="roleName">The name of the role to search for in the data source.</param>\n-    public override bool RoleExists(string roleName)\n-    {\n-      throw new System.NotImplementedException();\n-    }\n-\n-    /// <summary>\n-    /// Adds the specified user names to the specified roles for the configured applicationName.\n-    /// </summary>\n-    /// <param name="usernames">A string array of user names to be added to the specified roles. </param>\n-    /// <param name="roleNames">A string array of the role names to add the specified user names to.</param>\n-    public override void AddUsersToRoles(string[] usernames, string[] roleNames)\n-    {\n-      throw new System.NotImplementedException();\n-    }\n-\n-    /// <summary>\n-    /// Removes the specified user names from the specified roles for the configured applicationName.\n-    /// </summary>\n-    /// <param name="usernames">A string array of user names to be removed from the specified roles. </param>\n-    /// <param name="roleNames">A string array of role names to remove the specified user names from.</param>\n-    public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)\n-    {\n-      throw new System.NotImplementedException();\n-    }\n-\n-    /// <summary>\n-    /// Gets a list of users in the specified role for the configured applicationName.\n-    /// </summary>\n-    /// <returns>\n-    /// A string array containing the names of all the users who are members of the specified role for the configured applicationName.\n-    /// </returns>\n-    /// <param name="roleName">The name of the role to get the list of users for.</param>\n-    public override string[] GetUsersInRole(string roleName)\n-    {\n-      throw new System.NotImplementedException();\n-    }\n-\n-    /// <summary>\n-    /// Gets a list of all the roles for the configured applicationName.\n-    /// </summary>\n-    /// <returns>\n-    /// A string array containing the names of all the roles stored in the data source for the configured applicationName.\n-    /// </returns>\n-    public override string[] GetAllRoles()\n-    {\n-      throw new System.NotImplementedException();\n-    }\n-\n-    /// <summary>\n-    /// Gets an array of user names in a role where the user name contains the specified user name to match.\n-    /// </summary>\n-    /// <returns>\n-    /// A string array containing the names of all the users where the user name matches <paramref name="usernameToMatch" /> and the user is a member of the specified role.\n-    /// </returns>\n-    /// <param name="roleName">The role to search in.</param>\n-    /// <param name="usernameToMatch">The user name to search for.</param>\n-    public override string[] FindUsersInRole(string roleName, string usernameToMatch)\n-    {\n-      throw new System.NotImplementedException();\n-    }\n-\n-    /// <summary>\n-    /// Gets or sets the name of the application to store and retrieve role information for.\n-    /// </summary>\n-    /// <returns>\n-    /// The name of the application to store and retrieve role information for.\n-    /// </returns>\n-    public override string ApplicationName\n-    {\n-      get { throw new System.NotImplementedException(); }\n-      set { throw new System.NotImplementedException(); }\n-    }\n-  }\n-\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Silverlight/Server/Security/SilverlightIdentity.cs b/Source/Csla.test/Silverlight/Server/Security/SilverlightIdentity.cs\ndeleted file mode 100644\nindex db9c0d627..000000000\n--- a/Source/Csla.test/Silverlight/Server/Security/SilverlightIdentity.cs\n+++ /dev/null\n@@ -1,43 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="SilverlightIdentity.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>no summary</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Collections.Generic;\n-using System.Linq;\n-using System.Text;\n-using Csla.Serialization;\n-using System.Runtime.Serialization;\n-using Csla.DataPortalClient;\n-using Csla.Core;\n-\n-namespace Csla.Testing.Business.Security\n-{\n-  [Serializable()]\n-  public class SilverlightIdentity : Csla.Security.CslaIdentity\n-  {\n-\n-    public SilverlightIdentity() {}\n-\n-    protected void DataPortal_Fetch(object criteria)\n-    {\n-      if (((SilverlightPrincipal.Criteria)criteria).Name == "invalidusername")\n-      {\n-        Roles = new MobileList<string>();\n-        IsAuthenticated = false;\n-        Name = string.Empty;\n-        AuthenticationType = "Csla";\n-      }\n-      else\n-      {\n-        Roles = new MobileList<string>(new string[] { "Admin Role", "User Role" });\n-        IsAuthenticated = true;\n-        Name = "SilverlightIdentity";\n-        AuthenticationType = "SilverLight";\n-      }\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Silverlight/Server/Security/SilverlightMembershipIdentity.cs b/Source/Csla.test/Silverlight/Server/Security/SilverlightMembershipIdentity.cs\ndeleted file mode 100644\nindex cc4c3c4de..000000000\n--- a/Source/Csla.test/Silverlight/Server/Security/SilverlightMembershipIdentity.cs\n+++ /dev/null\n@@ -1,32 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="SilverlightMembershipIdentity.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>no summary</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Collections.Generic;\n-using System.Linq;\n-using System.Text;\n-using Csla.Serialization;\n-using System.Runtime.Serialization;\n-using Csla.DataPortalClient;\n-using Csla.Core;\n-\n-namespace Csla.Testing.Business.Security\n-{\n-  [Serializable()]\n-  public class SilverlightMembershipIdentity : Csla.Security.MembershipIdentity\n-  {\n-\n-    public SilverlightMembershipIdentity() { }\n-\n-    public override void LoadCustomData()\n-    {\n-      //This now comes from IdentityFactory - built in\n-      //Roles = new MobileList<string>(new string[2] { "Admin", "User" });\n-      //AuthenticationType = "SL";\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Silverlight/Server/Security/SilverlightPrincipal.cs b/Source/Csla.test/Silverlight/Server/Security/SilverlightPrincipal.cs\ndeleted file mode 100644\nindex 5174af9a2..000000000\n--- a/Source/Csla.test/Silverlight/Server/Security/SilverlightPrincipal.cs\n+++ /dev/null\n@@ -1,71 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="SilverlightPrincipal.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>no summary</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Security.Principal;\n-\n-namespace Csla.Testing.Business.Security\n-{\n-  [Serializable]\n-  public partial class SilverlightPrincipal : Csla.Security.CslaPrincipal\n-  {\n-    public const string VALID_TEST_UID = "user";\n-    public const string VALID_TEST_PWD = "1234";\n-\n-    public SilverlightPrincipal() { }\n-    private SilverlightPrincipal(IIdentity identity) : base(identity) { }\n-    private static bool SetPrincipal(IIdentity identity)\n-    {\n-      SilverlightPrincipal principal = new SilverlightPrincipal(identity);\n-      Csla.ApplicationContext.User = principal;\n-      return identity.IsAuthenticated;\n-    }\n-\n-    public override bool IsInRole(string role)\n-    {\n-      var check = Identity as Csla.Security.ICheckRoles;\n-      \n-      return check != null && check.IsInRole(role);\n-    }\n-\n-    [Serializable]\n-    public class Criteria : Core.MobileObject\n-    {\n-      private Criteria() { }\n-      public string Name { get; set; }\n-      public string Password { get; set; }\n-      public string ProviderType { get; set; }\n-      public Criteria(string name, string password)\n-      {\n-        Name = name;\n-        Password = password;\n-        ProviderType = string.Empty;\n-      }\n-      public Criteria(string name, string password, string providerType)\n-      {\n-        Name = name;\n-        Password = password;\n-        ProviderType = providerType;\n-      }\n-\n-      protected override void OnGetState(Serialization.Mobile.SerializationInfo info, Core.StateMode mode)\n-      {\n-        info.AddValue("SilverlightPrincipal.Criteria.Name", Name);\n-        info.AddValue("SilverlightPrincipal.Criteria.Password", Password);\n-        info.AddValue("SilverlightPrincipal.Criteria.ProviderType", ProviderType);\n-        base.OnGetState(info, mode);\n-      }\n-      protected override void OnSetState(Serialization.Mobile.SerializationInfo info, Core.StateMode mode)\n-      {\n-        base.OnSetState(info, mode);\n-        Name = info.GetValue<string>("SilverlightPrincipal.Criteria.Name");\n-        Password = info.GetValue<string>("SilverlightPrincipal.Criteria.Password");\n-        ProviderType = info.GetValue<string>("SilverlightPrincipal.Criteria.ProviderType");\n-      }\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Silverlight/Server/Security/SilverlightPrincipal.server.cs b/Source/Csla.test/Silverlight/Server/Security/SilverlightPrincipal.server.cs\ndeleted file mode 100644\nindex dd0a1fa30..000000000\n--- a/Source/Csla.test/Silverlight/Server/Security/SilverlightPrincipal.server.cs\n+++ /dev/null\n@@ -1,39 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="SilverlightPrincipal.server.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>no summary</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using Csla.Security;\n-namespace Csla.Testing.Business.Security\n-{\n-  public partial class SilverlightPrincipal \n-  {\n-\n-    public static void LoginUsingCSLA(string name, string password)\n-    {\n-      var identity = CslaIdentity.GetCslaIdentity<SilverlightIdentity>(new Criteria(name, password));\n-      SetPrincipal(identity);\n-    }\n-\n-    public static void Logout()\n-    {\n-      var identity = SilverlightIdentity.UnauthenticatedIdentity();\n-      SetPrincipal(identity);\n-    }\n-\n-    public static void LoginUsingMembershipProviderDataPortal(string name, string password)\n-    {\n-      var identity = MembershipIdentity.GetMembershipIdentity<SilverlightMembershipIdentity>(name, password);\n-      SetPrincipal(identity);\n-    }\n-\n-    public static void LoginUsingMembershipProviderWebServer(string name, string password)\n-    {\n-      SilverlightMembershipIdentity identity = MembershipIdentity.GetMembershipIdentity<SilverlightMembershipIdentity>(name, password);\n-      SetPrincipal(identity);\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Silverlight/Server/Security/SilverlightWindowsIdentity.cs b/Source/Csla.test/Silverlight/Server/Security/SilverlightWindowsIdentity.cs\ndeleted file mode 100644\nindex 77c5d17eb..000000000\n--- a/Source/Csla.test/Silverlight/Server/Security/SilverlightWindowsIdentity.cs\n+++ /dev/null\n@@ -1,28 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="SilverlightWindowsIdentity.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>no summary</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Collections.Generic;\n-using System.Linq;\n-using System.Text;\n-using Csla.Serialization;\n-using System.Runtime.Serialization;\n-using Csla.DataPortalClient;\n-namespace Csla.Testing.Business.Security\n-{\n-  [Serializable()]\n-    public class SilverlightWindowsIdentity : Csla.Silverlight.Security.WindowsIdentity\n-  {\n-    protected SilverlightWindowsIdentity() { }\n-\n-\n-    private void DataPortal_Fetch()\n-    {\n-      base.PopulateWindowsIdentity();\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Silverlight/Server/Security/TestMembershipProvider.cs b/Source/Csla.test/Silverlight/Server/Security/TestMembershipProvider.cs\ndeleted file mode 100644\nindex 707c4e8c6..000000000\n--- a/Source/Csla.test/Silverlight/Server/Security/TestMembershipProvider.cs\n+++ /dev/null\n@@ -1,182 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="TestMembershipProvider.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>no summary</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Data;\n-using System.Configuration;\n-using System.Linq;\n-using System.Web;\n-using System.Web.Security;\n-using System.Web.UI;\n-using System.Web.UI.HtmlControls;\n-using System.Web.UI.WebControls;\n-using System.Web.UI.WebControls.WebParts;\n-using System.Xml.Linq;\n-\n-namespace Csla.Testing.Business.Security\n-{\n-  public class TestMembershipProvider : MembershipProvider\n-  {\n-    public override bool ValidateUser(\n-  string username, string password)\n-    {\n-      if (username == "invalidusername")\n-      {\n-        return false;\n-      }\n-      else\n-      {\n-        return true;\n-      }\n-    }\n-\n-    #region Non-Implemented Members\n-\n-    // the following members must be implemented due to the abstract class MembershipProvider,\n-    // but not required to be functional for using the Login control.\n-    public override bool ChangePassword(string username, string oldPassword, string newPassword)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override bool DeleteUser(string username, bool deleteAllRelatedData)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override bool EnablePasswordReset\n-    {\n-      get { throw new NotSupportedException("The method or operation is not implemented."); }\n-    }\n-\n-    public override bool EnablePasswordRetrieval\n-    {\n-      get { throw new NotSupportedException("The method or operation is not implemented."); }\n-    }\n-\n-    public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override int GetNumberOfUsersOnline()\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override string GetPassword(string username, string answer)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override MembershipUser GetUser(string username, bool userIsOnline)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override string GetUserNameByEmail(string email)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override int MaxInvalidPasswordAttempts\n-    {\n-      get { throw new NotSupportedException("The method or operation is not implemented."); }\n-    }\n-\n-    public override int MinRequiredNonAlphanumericCharacters\n-    {\n-      get { throw new NotSupportedException("The method or operation is not implemented."); }\n-    }\n-\n-    public override int MinRequiredPasswordLength\n-    {\n-      get { throw new NotSupportedException("The method or operation is not implemented."); }\n-    }\n-\n-    public override int PasswordAttemptWindow\n-    {\n-      get { throw new NotSupportedException("The method or operation is not implemented."); }\n-    }\n-\n-    public override MembershipPasswordFormat PasswordFormat\n-    {\n-      get { throw new NotSupportedException("The method or operation is not implemented."); }\n-    }\n-\n-    public override string PasswordStrengthRegularExpression\n-    {\n-      get { throw new NotSupportedException("The method or operation is not implemented."); }\n-    }\n-\n-    public override bool RequiresQuestionAndAnswer\n-    {\n-      get { throw new NotSupportedException("The method or operation is not implemented."); }\n-    }\n-\n-    public override bool RequiresUniqueEmail\n-    {\n-      get { throw new NotSupportedException("The method or operation is not implemented."); }\n-    }\n-\n-    public override string ResetPassword(string username, string answer)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override bool UnlockUser(string userName)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override void UpdateUser(MembershipUser user)\n-    {\n-      throw new NotSupportedException("The method or operation is not implemented.");\n-    }\n-\n-    public override string ApplicationName\n-    {\n-      get\n-      {\n-        throw new NotSupportedException("The method or operation is not implemented.");\n-      }\n-      set\n-      {\n-        throw new NotSupportedException("The method or operation is not implemented.");\n-      }\n-    }\n-\n-    #endregion\n-\n-  }\n-\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla.test/Silverlight/Server/TestProxies/AppDomainProxy.cs b/Source/Csla.test/Silverlight/Server/TestProxies/AppDomainProxy.cs\nindex 99926ffcf..47ce55f8a 100644\n--- a/Source/Csla.test/Silverlight/Server/TestProxies/AppDomainProxy.cs\n+++ b/Source/Csla.test/Silverlight/Server/TestProxies/AppDomainProxy.cs\n@@ -177,9 +177,6 @@ private class UpdateTask\n \n     public async Task<DataPortalResult> Update(object obj, DataPortalContext context, bool isSync)\n     {\n-      //Security.BusinessPrincipal\n-      //var temp = new DataPortalContext(new UnauthenticatedPrincipal(), context.IsRemotePortal);\n-\n       var task = \n         new UpdateTask\n           {\ndiff --git a/Source/Csla.test/Silverlight/Server/csla.silverlight.server.test.csproj b/Source/Csla.test/Silverlight/Server/csla.silverlight.server.test.csproj\nindex 04f93ba9e..38fe588a1 100644\n--- a/Source/Csla.test/Silverlight/Server/csla.silverlight.server.test.csproj\n+++ b/Source/Csla.test/Silverlight/Server/csla.silverlight.server.test.csproj\n@@ -111,12 +111,6 @@\n     <Reference Include="System.Xml" />\n   </ItemGroup>\n   <ItemGroup>\n-    <Compile Include="..\\..\\Authorization\\TestIdentity.cs">\n-      <Link>Security\\TestIdentity.cs</Link>\n-    </Compile>\n-    <Compile Include="..\\..\\Authorization\\TestPrincipal.cs">\n-      <Link>Security\\TestPrincipal.cs</Link>\n-    </Compile>\n     <Compile Include="..\\..\\LogicalExecutionLocation\\LocationBusinessBase.cs">\n       <Link>LogicalExecutionLocation\\LocationBusinessBase.cs</Link>\n     </Compile>\n@@ -160,13 +154,6 @@\n     <Compile Include="ReadOnlyTests\\ReadOnlyPerson.cs" />\n     <Compile Include="ReadOnlyTests\\ReadOnlyPerson.partial.cs" />\n     <Compile Include="ReadOnlyTests\\ReadOnlyPersonList.cs" />\n-    <Compile Include="Security\\MockMembershipProvider.cs" />\n-    <Compile Include="Security\\MockRoleProvider.cs" />\n-    <Compile Include="Security\\SilverlightIdentity.cs" />\n-    <Compile Include="Security\\SilverlightMembershipIdentity.cs" />\n-    <Compile Include="Security\\SilverlightPrincipal.cs" />\n-    <Compile Include="Security\\SilverlightPrincipal.server.cs" />\n-    <Compile Include="Security\\SilverlightWindowsIdentity.cs" />\n     <Compile Include="TestProxies\\AppDomainProxy.cs" />\n     <Compile Include="Validation\\RootThrowsException.cs" />\n     <Compile Include="Validation\\RuleWithCyrillic.cs" />\ndiff --git a/Source/Csla.test/Threading/BackgroundWorkerTests.cs b/Source/Csla.test/Threading/BackgroundWorkerTests.cs\nindex 888efc910..c8fbac757 100644\n--- a/Source/Csla.test/Threading/BackgroundWorkerTests.cs\n+++ b/Source/Csla.test/Threading/BackgroundWorkerTests.cs\n@@ -8,6 +8,7 @@\n using System;\n using System.ComponentModel;\n using System.Globalization;\n+using System.Security.Claims;\n using System.Security.Principal;\n using System.Threading;\n #if MSTEST\n@@ -98,7 +99,7 @@ public void BackgroundWorker_RunWorkerAsync_CallsDoWorkAndWorkerCompleted()\n \n           var UIThreadid = Thread.CurrentThread.ManagedThreadId;\n \n-          Csla.ApplicationContext.User = new MyPrincipal();\n+          Csla.ApplicationContext.User = new ClaimsPrincipal();\n           Csla.ApplicationContext.ClientContext["BWTEST"] = "TEST";\n           Csla.ApplicationContext.GlobalContext["BWTEST"] = "TEST";\n \n@@ -115,7 +116,7 @@ public void BackgroundWorker_RunWorkerAsync_CallsDoWorkAndWorkerCompleted()\n             context.Assert.IsFalse(Thread.CurrentThread.ManagedThreadId == UIThreadid);\n \n             // make sure that user, clientcontext, globalcontext, currentCulture and currentUIculture are sent \n-            context.Assert.IsTrue(Csla.ApplicationContext.User is MyPrincipal);\n+            context.Assert.IsTrue(Csla.ApplicationContext.User is ClaimsPrincipal);\n             context.Assert.AreEqual("TEST", Csla.ApplicationContext.GlobalContext["BWTEST"]);\n             context.Assert.AreEqual("TEST", Csla.ApplicationContext.ClientContext["BWTEST"]);\n             context.Assert.AreEqual("FR", Thread.CurrentThread.CurrentCulture.Name.ToUpper());\ndiff --git a/Source/Csla.test/Threading/MyIdentity.cs b/Source/Csla.test/Threading/MyIdentity.cs\ndeleted file mode 100644\nindex 38c55ecd7..000000000\n--- a/Source/Csla.test/Threading/MyIdentity.cs\n+++ /dev/null\n@@ -1,14 +0,0 @@\n-\ufeffusing System;\n-\n-\n-namespace Csla.Test.Threading\n-{\n-  [Serializable]\n-  public class MyIdentity : Csla.Security.CslaIdentity\n-  {\n-    public MyIdentity(string name)\n-    {\n-      this.Name = name;\n-    }\n-  }\n-}\ndiff --git a/Source/Csla.test/Threading/MyPrincipal.cs b/Source/Csla.test/Threading/MyPrincipal.cs\ndeleted file mode 100644\nindex ff5473c40..000000000\n--- a/Source/Csla.test/Threading/MyPrincipal.cs\n+++ /dev/null\n@@ -1,22 +0,0 @@\n-\ufeffusing System;\n-using System.Linq;\n-\n-namespace Csla.Test.Threading\n-{\n-  [Serializable]\n-  public class MyPrincipal : Csla.Security.CslaPrincipal\n-  {\n-    private string[] Roles { get; set; }\n-\n-    public MyPrincipal()\n-      : base(new MyIdentity("Demo"))\n-    {\n-      this.Roles = new string[] { "Admin", "Tester" };\n-    }\n-\n-    public override bool IsInRole(string role)\n-    {\n-      return Roles.Contains(role);\n-    }\n-  }\n-}\ndiff --git a/Source/Csla.test/Utilities/CorerseValueTests.cs b/Source/Csla.test/Utilities/CorerseValueTests.cs\nindex 416794b96..5d8bded36 100644\n--- a/Source/Csla.test/Utilities/CorerseValueTests.cs\n+++ b/Source/Csla.test/Utilities/CorerseValueTests.cs\n@@ -9,7 +9,6 @@\n using Csla.DataPortalClient;\n using Csla.Testing.Business.ReadOnlyTest;\n using System;\n-using Csla.Testing.Business.Security;\n using UnitDriven;\n \n #if NUNIT\ndiff --git a/Source/Csla.test/csla.test.csproj b/Source/Csla.test/csla.test.csproj\nindex 6fe817e6d..667ea85ee 100644\n--- a/Source/Csla.test/csla.test.csproj\n+++ b/Source/Csla.test/csla.test.csproj\n@@ -127,8 +127,6 @@\n     <Compile Include="Authorization\\ReadonlyAuthorizationTests.cs" />\n     <Compile Include="Authorization\\ReadOnlyPerson.cs" />\n     <Compile Include="Authorization\\RootException.cs" />\n-    <Compile Include="Authorization\\TestIdentity.cs" />\n-    <Compile Include="Authorization\\TestPrincipal.cs" />\n     <Compile Include="BasicModern\\BasicModernTests.cs" />\n     <Compile Include="BasicModern\\Child.cs" />\n     <Compile Include="BasicModern\\ChildList.cs" />\n@@ -313,8 +311,6 @@\n     <Compile Include="Silverlight\\ReadOnly\\MockReadOnlyList.cs" />\n     <Compile Include="Silverlight\\ReadOnly\\ReadOnlyTests.cs" />\n     <Compile Include="Silverlight\\Rollback\\RollbackRoot.cs" />\n-    <Compile Include="Silverlight\\Security\\SecurityTests.server.cs" />\n-    <Compile Include="Silverlight\\Security\\SecurityTests.cs" />\n     <Compile Include="Silverlight\\Serialization\\Address.cs" />\n     <Compile Include="Silverlight\\Serialization\\AddressBase.cs" />\n     <Compile Include="Silverlight\\Serialization\\AddressList.cs" />\n@@ -344,8 +340,6 @@\n     <Compile Include="Threading\\BackgroundWorkerSyncContextHelper.cs" />\n     <Compile Include="Threading\\BackgroundWorkerTests.cs" />\n     <Compile Include="Threading\\BusyLockTests.cs" />\n-    <Compile Include="Threading\\MyIdentity.cs" />\n-    <Compile Include="Threading\\MyPrincipal.cs" />\n     <Compile Include="Utilities\\CorerseValueTests.cs" />\n     <Compile Include="Utilities\\UtilitiesTestHelper.cs" />\n     <Compile Include="ValidationRules\\AsyncRuleRoot.cs" />\ndiff --git a/Source/Csla/ApplicationContext.cs b/Source/Csla/ApplicationContext.cs\nindex 133e8faa3..433cffb07 100644\n--- a/Source/Csla/ApplicationContext.cs\n+++ b/Source/Csla/ApplicationContext.cs\n@@ -525,11 +525,7 @@ public enum ExecutionLocations\n       /// <summary>\n       /// The code is executing on the application server.\n       /// </summary>\n-      Server,\n-      /// <summary>\n-      /// The code is executing on the Silverlight client.\n-      /// </summary>\n-      MobileClient\n+      Server\n     }\n \n     /// <summary>\ndiff --git a/Source/Csla/BusinessListBase.cs b/Source/Csla/BusinessListBase.cs\nindex 9d3e0cc7f..c869dbacd 100644\n--- a/Source/Csla/BusinessListBase.cs\n+++ b/Source/Csla/BusinessListBase.cs\n@@ -470,14 +470,6 @@ private void CopyState(int parentEditLevel)\n       // we are going a level deeper in editing\n       _editLevel += 1;\n \n-      // JMC 6/24/08\n-      // This used to be a foreach loop but there appears to be a bug\n-      // in the silverlight runtime (SL2 B2) since calling foreach here will result\n-      // in SEHException with the error code -2147467259, or Error Unkown.\n-      // Iterating on this collection outside of this call will result in\n-      // behavior as expected but for some reason doing it here results in\n-      // an unknown exception.\n-\n       // cascade the call to all child objects\n       for (int x = 0; x < this.Count; x++)\n       {\ndiff --git a/Source/Csla/Core/ApplicationContextManager.cs b/Source/Csla/Core/ApplicationContextManager.cs\nindex c6ae35b0f..a949fc415 100644\n--- a/Source/Csla/Core/ApplicationContextManager.cs\n+++ b/Source/Csla/Core/ApplicationContextManager.cs\n@@ -40,7 +40,7 @@ public virtual IPrincipal GetUser()\n       IPrincipal result = Thread.CurrentPrincipal;\n       if (result == null)\n       {\n-        result = new Csla.Security.UnauthenticatedPrincipal();\n+        result = new System.Security.Claims.ClaimsPrincipal();\n         SetUser(result);\n       }\n       return result;\ndiff --git a/Source/Csla/Core/ApplicationContextManagerTls.cs b/Source/Csla/Core/ApplicationContextManagerTls.cs\nindex 48cd33093..0e1b18a13 100644\n--- a/Source/Csla/Core/ApplicationContextManagerTls.cs\n+++ b/Source/Csla/Core/ApplicationContextManagerTls.cs\n@@ -40,7 +40,7 @@ public virtual IPrincipal GetUser()\n       IPrincipal result = Thread.CurrentPrincipal;\n       if (result == null)\n       {\n-        result = new Csla.Security.UnauthenticatedPrincipal();\n+        result = new System.Security.Claims.ClaimsPrincipal();\n         SetUser(result);\n       }\n       return result;\ndiff --git a/Source/Csla/Core/ObjectCloner.cs b/Source/Csla/Core/ObjectCloner.cs\nindex 7ed04009e..b0beb6000 100644\n--- a/Source/Csla/Core/ObjectCloner.cs\n+++ b/Source/Csla/Core/ObjectCloner.cs\n@@ -32,7 +32,7 @@ public static class ObjectCloner\n     /// </para>. You may also choose to use the Microsoft .NET 3.0\n     /// System.Runtime.Serialization.NetDataContractSerializer\n     /// NetDataContractSerializer provided as part of WCF.\n-    /// <para>In UWP, Windows Phone, and Silverlight the only\n+    /// <para>In UWP and Blazor the only\n     /// option is to use the CSLA .NET MobileFormatter\n     /// for serialization as the other serializers don\'t\n     /// exist.</para>\ndiff --git a/Source/Csla/Csla.csproj b/Source/Csla/Csla.csproj\nindex 81e6ce03a..88d833c26 100644\n--- a/Source/Csla/Csla.csproj\n+++ b/Source/Csla/Csla.csproj\n@@ -19,8 +19,6 @@\n     <EmbeddedResource Remove="Properties\\CslaPrivate.resx" />\n     <Compile Remove="Service References\\**\\*.cs" />\n     <None Include="Service References\\**\\*.cs" />\n-    <Compile Remove="Silverlight\\**\\*.cs" />\n-    <Compile Include="Silverlight\\Security\\WindowsIdentity.cs" />\n     </ItemGroup>\n \n   <ItemGroup Condition="$(TargetFramework.StartsWith(&quot;net4&quot;))">\ndiff --git a/Source/Csla/LazySingleton.cs b/Source/Csla/LazySingleton.cs\nindex ceb0437e5..72f16a281 100644\n--- a/Source/Csla/LazySingleton.cs\n+++ b/Source/Csla/LazySingleton.cs\n@@ -4,7 +4,7 @@\n namespace Csla\n {\n   /// <summary>\n-  /// An alternative to Lazy&lt;T&gt; that works on .NET, Silverlight and Windows Phone\n+  /// An alternative to Lazy&lt;T&gt; \n   /// </summary>\n   /// <typeparam name="T"></typeparam>\n   public sealed class LazySingleton<T> where T : class\ndiff --git a/Source/Csla/Rules/RuleUri.cs b/Source/Csla/Rules/RuleUri.cs\nindex 88e6a8666..d009928aa 100644\n--- a/Source/Csla/Rules/RuleUri.cs\n+++ b/Source/Csla/Rules/RuleUri.cs\n@@ -8,7 +8,6 @@\n using System;\n using System.Collections.Generic;\n using System.Text;\n-using Csla.Reflection;\n \n namespace Csla.Rules\n {\n@@ -190,11 +189,7 @@ private static string GetTypeName(IBusinessRuleBase rule)\n     /// <returns></returns>\n     private static string GetTypeName(Type type)\n     {\n-#if NETFX_CORE\n-      if (!type.IsGenericType())\n-#else\n       if (!type.IsGenericType)\n-#endif\n       {\n         return type.FullName;\n       }\n@@ -203,20 +198,12 @@ private static string GetTypeName(Type type)\n         var sb = new StringBuilder();\n         if (!string.IsNullOrEmpty(type.Namespace)) \n           sb.Append(type.Namespace + ".");\n-#if NETFX_CORE\n-        var typeName = type.Name();\n-#else\n         var typeName = type.Name;\n-#endif\n         sb.Append(typeName.Replace("`1", ""));\n         foreach (var t in type.GetGenericArguments())\n         {\n           sb.Append("-");\n-#if NETFX_CORE\n-          if (t.IsGenericType())\n-#else\n           if (t.IsGenericType) \n-#endif\n             sb.Append(GetTypeName(t));\n           else \n             sb.Append(t.FullName);\n@@ -237,21 +224,11 @@ public static class UriExtensions\n     /// </summary>\n     /// <param name="uri">URI to parse.</param>\n     /// <returns>\n-    /// On .NET returns the Segments property. On Silverlight\n-    /// parses the path by / and returns a string array comparable\n-    /// to the .NET Segments property.\n+    /// Returns the Segments property. \n     /// </returns>\n     public static string[] Parts(this System.Uri uri)\n     {\n-#if (ANDROID || IOS) || NETFX_CORE\n-      var path = uri.LocalPath.Split(\'/\');\n-      string[] result = new string[path.Length - 1];\n-      for (int i = 0; i < path.Length - 1; i++)\n-        result[i] = path[i + 1];\n-      return result;\n-#else\n       return uri.Segments;\n-#endif\n     }\n   }\n \ndiff --git a/Source/Csla/Security/CslaIdentity.cs b/Source/Csla/Security/CslaIdentity.cs\ndeleted file mode 100644\nindex 0c068c8ca..000000000\n--- a/Source/Csla/Security/CslaIdentity.cs\n+++ /dev/null\n@@ -1,145 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="CslaIdentity.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>Provides a base class to simplify creation of</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Linq.Expressions;\n-using System.Security.Principal;\n-using System.Collections.Generic;\n-using Csla.Core.FieldManager;\n-using System.Runtime.Serialization;\n-using System.Reflection;\n-using Csla.Core;\n-using Csla.Reflection;\n-using System.Threading.Tasks;\n-\n-namespace Csla.Security\n-{\n-  /// <summary>\n-  /// Provides a base class to simplify creation of\n-  /// a .NET identity object for use with CslaPrincipal.\n-  /// </summary>\n-  [Serializable]\n-  public abstract class CslaIdentity : CslaIdentityBase<CslaIdentity>,\n-    ICslaIdentity\n-  {\n-    /// <summary>\n-    /// Invokes the data portal to get an instance of\n-    /// the identity object.\n-    /// </summary>\n-    /// <typeparam name="T">\n-    /// Type of the CslaIdentity subclass to retrieve.\n-    /// </typeparam>\n-    /// <param name="criteria">\n-    /// Object containing the user\'s credentials.\n-    /// </param>\n-    /// <returns></returns>\n-    public static T GetCslaIdentity<T>(object criteria)\n-      where T : CslaIdentity\n-    {\n-      return DataPortal.Fetch<T>(criteria);\n-    }\n-\n-    /// <summary>\n-    /// Invokes the data portal to get an instance of\n-    /// the identity object.\n-    /// </summary>\n-    /// <typeparam name="T">\n-    /// Type of the CslaIdentity subclass to retrieve.\n-    /// </typeparam>\n-    /// <param name="criteria">\n-    /// Object containing the user\'s credentials.\n-    /// </param>\n-    /// <returns></returns>\n-    public static async Task<T> GetCslaIdentityAsync<T>(object criteria)\n-      where T : CslaIdentity\n-    {\n-      return await DataPortal.FetchAsync<T>(criteria);\n-    }\n-  }\n-\n-  /// <summary>\n-  /// Provides a base class to simplify creation of\n-  /// a .NET identity object for use with CslaPrincipal.\n-  /// </summary>\n-  [Serializable]\n-  public abstract class CslaIdentityBase<T> :\n-    ReadOnlyBase<T>, IIdentity, ICheckRoles,\n-    ICslaIdentity\n-    where T : CslaIdentityBase<T>\n-  {\n-    /// <summary>\n-    /// Creates an instance of the class.\n-    /// </summary>\n-    /// <returns></returns>\n-    public static UnauthenticatedIdentity UnauthenticatedIdentity()\n-    {\n-      return new Csla.Security.UnauthenticatedIdentity();\n-    }\n-\n-    /// <summary>\n-    /// Property info for Roles property\n-    /// </summary>\n-    public static readonly PropertyInfo<MobileList<string>> RolesProperty = RegisterProperty<MobileList<string>>(c => c.Roles);\n-    /// <summary>\n-    /// Gets or sets the list of roles for this user.\n-    /// </summary>\n-    public MobileList<string> Roles\n-    {\n-      get { return GetProperty(RolesProperty); }\n-      protected set { LoadProperty(RolesProperty, value); }\n-    }\n-\n-    bool ICheckRoles.IsInRole(string role)\n-    {\n-      var roles = ReadProperty<MobileList<string>>(RolesProperty);\n-      if (roles != null)\n-        return roles.Contains(role);\n-      else\n-        return false;\n-    }\n-\n-    /// <summary>\n-    /// Property info for Authentication property\n-    /// </summary>\n-    public static readonly PropertyInfo<string> AuthenticationTypeProperty = RegisterProperty<string>(c => c.AuthenticationType, "AuthenticationType", "Csla");\n-    /// <summary>\n-    /// Gets the authentication type for this identity.\n-    /// </summary>\n-    public string AuthenticationType\n-    {\n-      get { return GetProperty<string>(AuthenticationTypeProperty); }\n-      protected set { LoadProperty<string>(AuthenticationTypeProperty, value); }\n-    }\n-\n-    /// <summary>\n-    /// \n-    /// </summary>\n-    public static readonly PropertyInfo<bool> IsAuthenticatedProperty = RegisterProperty<bool>(c => c.IsAuthenticated);\n-    /// <summary>\n-    /// Gets a value indicating whether this identity represents\n-    /// an authenticated user.\n-    /// </summary>\n-    public bool IsAuthenticated\n-    {\n-      get { return GetProperty<bool>(IsAuthenticatedProperty); }\n-      protected set { LoadProperty<bool>(IsAuthenticatedProperty, value); }\n-    }\n-\n-    /// <summary>\n-    /// Property info for Name property\n-    /// </summary>\n-    public static readonly PropertyInfo<string> NameProperty = RegisterProperty<string>(c => c.Name);\n-    /// <summary>\n-    /// Gets the username value.\n-    /// </summary>\n-    public string Name\n-    {\n-      get { return GetProperty<string>(NameProperty); }\n-      protected set { LoadProperty<string>(NameProperty, value); }\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla/Security/CslaPrincipal.cs b/Source/Csla/Security/CslaPrincipal.cs\ndeleted file mode 100644\nindex d01e56473..000000000\n--- a/Source/Csla/Security/CslaPrincipal.cs\n+++ /dev/null\n@@ -1,84 +0,0 @@\n-//-----------------------------------------------------------------------\n-// <copyright file="CslaPrincipal.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>Base class from which custom principal</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Security.Principal;\n-using Csla.Serialization.Mobile;\n-\n-namespace Csla.Security\n-{\n-  /// <summary>\n-  /// Base class from which custom principal\n-  /// objects should inherit to operate\n-  /// properly with the data portal.\n-  /// </summary>\n-  [Serializable()]\n-  public class CslaPrincipal : Csla.Core.MobileObject, IPrincipal, ICslaPrincipal\n-  {\n-    private IIdentity _identity;\n-\n-    /// <summary>\n-    /// Creates an instance of the object.\n-    /// </summary>\n-    protected CslaPrincipal() { _identity = new UnauthenticatedIdentity(); }\n-\n-    /// <summary>\n-    /// Returns the user\'s identity object.\n-    /// </summary>\n-    public virtual IIdentity Identity\n-    {\n-      get { return _identity; }\n-    }\n-\n-    /// <summary>\n-    /// Returns a value indicating whether the\n-    /// user is in a given role.\n-    /// </summary>\n-    /// <param name="role">Name of the role.</param>\n-    public virtual bool IsInRole(string role)\n-    {\n-      var check = _identity as ICheckRoles;\n-      if (check != null)\n-        return check.IsInRole(role);\n-      else\n-        return false;\n-    }\n-\n-    /// <summary>\n-    /// Creates an instance of the object.\n-    /// </summary>\n-    /// <param name="identity">Identity object for the user.</param>\n-    protected CslaPrincipal(IIdentity identity)\n-    {\n-      _identity = identity;\n-    }\n-\n-    /// <summary>\n-    /// Override this method to get custom field values\n-    /// from the serialization stream.\n-    /// </summary>\n-    /// <param name="info">Serialization info.</param>\n-    /// <param name="mode">Serialization mode.</param>\n-    protected override void OnGetState(Csla.Serialization.Mobile.SerializationInfo info, Csla.Core.StateMode mode)\n-    {\n-      info.AddValue("CslaPrincipal.Identity", MobileFormatter.Serialize(_identity));\n-      base.OnGetState(info, mode);\n-    }\n-\n-    /// <summary>\n-    /// Override this method to set custom field values\n-    /// ito the serialization stream.\n-    /// </summary>\n-    /// <param name="info">Serialization info.</param>\n-    /// <param name="mode">Serialization mode.</param>\n-    protected override void OnSetState(Csla.Serialization.Mobile.SerializationInfo info, Csla.Core.StateMode mode)\n-    {\n-      base.OnSetState(info, mode);\n-      _identity = (IIdentity)MobileFormatter.Deserialize(info.GetValue<byte[]>("CslaPrincipal.Identity"));\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla/Security/ICslaIdentity.cs b/Source/Csla/Security/ICslaIdentity.cs\nindex 47690b7b6..bdaccc04b 100644\n--- a/Source/Csla/Security/ICslaIdentity.cs\n+++ b/Source/Csla/Security/ICslaIdentity.cs\n@@ -1,16 +1,18 @@\n-\ufeffusing System;\n-using System.Collections.Generic;\n-using System.Linq;\n+\ufeff//-----------------------------------------------------------------------\n+// <copyright file="ICslaIdentity.cs" company="Marimer LLC">\n+//     Copyright (c) Marimer LLC. All rights reserved.\n+//     Website: https://cslanet.com\n+// </copyright>\n+// <summary>Provides a base class to simplify creation of</summary>\n+//-----------------------------------------------------------------------\n using System.Security.Principal;\n-using System.Text;\n-using System.Threading.Tasks;\n using Csla.Core;\n \n namespace Csla.Security\n {\n   /// <summary>\n-  /// Provides a base class to simplify creation of\n-  /// a .NET identity object for use with CslaPrincipal.\n+  /// Provides a base type to simplify creation of\n+  /// a .NET identity object for use with ICslaPrincipal.\n   /// </summary>\n   public interface ICslaIdentity\n     : IReadOnlyBase, IIdentity, ICheckRoles \ndiff --git a/Source/Csla/Security/ICslaPrincipal.cs b/Source/Csla/Security/ICslaPrincipal.cs\nindex 0870bfd59..5131d97ec 100644\n--- a/Source/Csla/Security/ICslaPrincipal.cs\n+++ b/Source/Csla/Security/ICslaPrincipal.cs\n@@ -1,9 +1,11 @@\n-\ufeffusing System;\n-using System.Collections.Generic;\n-using System.Linq;\n+\ufeff//-----------------------------------------------------------------------\n+// <copyright file="ICslaPrincipal.cs" company="Marimer LLC">\n+//     Copyright (c) Marimer LLC. All rights reserved.\n+//     Website: https://cslanet.com\n+// </copyright>\n+// <summary>Defines the base requirements for the interface of any</summary>\n+//-----------------------------------------------------------------------\n using System.Security.Principal;\n-using System.Text;\n-using System.Threading.Tasks;\n \n namespace Csla.Security\n {\ndiff --git a/Source/Csla/Security/MembershipIdentity.cs b/Source/Csla/Security/MembershipIdentity.cs\ndeleted file mode 100644\nindex 183ed5aac..000000000\n--- a/Source/Csla/Security/MembershipIdentity.cs\n+++ /dev/null\n@@ -1,213 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="MembershipIdentity.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>Implements a .NET identity object that automatically</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Security.Principal;\n-using System.Collections.Generic;\n-using Csla.Core.FieldManager;\n-using System.Runtime.Serialization;\n-using Csla.DataPortalClient;\n-using Csla.Core;\n-\n-namespace Csla.Security\n-{\n-  /// <summary>\n-  /// Implements a .NET identity object that automatically\n-  /// authenticates against the ASP.NET membership provider.\n-  /// </summary>\n-  [Csla.Server.MobileFactory("Csla.Web.Security.IdentityWebFactory,Csla.Web")]\n-  [Csla.Server.ObjectFactory("Csla.Web.Security.IdentityAppFactory,Csla.Web")]\n-  [Serializable]\n-  public class MembershipIdentity : ReadOnlyBase<MembershipIdentity>, IIdentity, ICheckRoles\n-  {\n-    private static int _forceInit = 0;\n-\n-    /// <summary>\n-    /// Creates an instance of the class.\n-    /// </summary>\n-    protected MembershipIdentity()\n-    {\n-      _forceInit = _forceInit + 0;\n-    }\n-\n-    /// <summary>\n-    /// Method invoked when the object is deserialized.\n-    /// </summary>\n-    /// <param name="context">Serialization context.</param>\n-    protected override void OnDeserialized(StreamingContext context)\n-    {\n-      _forceInit = _forceInit + 0;\n-      base.OnDeserialized(context);\n-    }\n-\n-    /// <summary>\n-    /// Authenticates the user\'s credentials against the ASP.NET\n-    /// membership provider.\n-    /// </summary>\n-    /// <typeparam name="T">\n-    /// Type of object (subclass of MembershipIdentity) to retrieve.\n-    /// </typeparam>\n-    /// <param name="userName">Username to authenticate.</param>\n-    /// <param name="password">Password to authenticate.</param>\n-    /// <returns></returns>\n-    public static T GetMembershipIdentity<T>(string userName, string password) where T : MembershipIdentity\n-    {\n-      return DataPortal.Fetch<T>(new Criteria(userName, password, typeof(T)));\n-    }\n-\n-    /// <summary>\n-    /// Gets or sets a list of roles for this user.\n-    /// </summary>\n-    public static readonly PropertyInfo<MobileList<string>> RolesProperty = RegisterProperty<MobileList<string>>(c => c.Roles);\n-    /// <summary>\n-    /// Gets or sets a list of roles for this user.\n-    /// </summary>\n-    protected internal MobileList<string> Roles\n-    {\n-      get { return GetProperty(RolesProperty); }\n-      set { LoadProperty(RolesProperty, value); }\n-    }\n-\n-    bool ICheckRoles.IsInRole(string role)\n-    {\n-      var roles = GetProperty<MobileList<string>>(RolesProperty);\n-      if (roles != null)\n-        return roles.Contains(role);\n-      else\n-        return false;\n-    }\n-\n-    /// <summary>\n-    /// Gets the authentication type for this identity.\n-    /// </summary>\n-    public static readonly PropertyInfo<string> AuthenticationTypeProperty = RegisterProperty<string>(c => c.AuthenticationType);\n-    /// <summary>\n-    /// Gets the authentication type for this identity.\n-    /// </summary>\n-    public string AuthenticationType\n-    {\n-      get { return GetProperty(AuthenticationTypeProperty); }\n-      protected set { LoadProperty(AuthenticationTypeProperty, value); }\n-    }\n-\n-    /// <summary>\n-    /// Gets a value indicating whether this identity represents\n-    /// an authenticated user.\n-    /// </summary>\n-    public static readonly PropertyInfo<bool> IsAuthenticatedProperty = RegisterProperty<bool>(c => c.IsAuthenticated);\n-    /// <summary>\n-    /// Gets a value indicating whether this identity represents\n-    /// an authenticated user.\n-    /// </summary>\n-    public bool IsAuthenticated\n-    {\n-      get { return GetProperty(IsAuthenticatedProperty); }\n-      protected set { LoadProperty(IsAuthenticatedProperty, value); }\n-    }\n-\n-    /// <summary>\n-    /// Gets the username value.\n-    /// </summary>\n-    public static readonly PropertyInfo<string> NameProperty = RegisterProperty<string>(c => c.Name);\n-    /// <summary>\n-    /// Gets the username value.\n-    /// </summary>\n-    public string Name\n-    {\n-      get { return GetProperty(NameProperty); }\n-      protected set { LoadProperty(NameProperty, value); }\n-    }\n-\n-    /// <summary>\n-    /// Override this method in a subclass to load custom\n-    /// data beyond the automatically loaded values from\n-    /// the membership and role providers.\n-    /// </summary>\n-    [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)]\n-    public virtual void LoadCustomData() { }\n-\n-    /// <summary>\n-    /// Criteria object containing the user credentials\n-    /// to be authenticated.\n-    /// </summary>\n-    [Serializable()]\n-    public class Criteria : Csla.Core.MobileObject\n-    {\n-      private string _name;\n-      private string _password;\n-      private string _membershipIdentityType;\n-      private Criteria() { }\n-      /// <summary>\n-      /// Gets or sets the username.\n-      /// </summary>\n-      public string Name\n-      {\n-        get { return _name; }\n-        set { _name = value; }\n-      }\n-\n-      /// <summary>\n-      /// Gets or sets the password.\n-      /// </summary>\n-      public string Password\n-      {\n-        get { return _password; }\n-        set { _password = value; }\n-      }\n-\n-      /// <summary>\n-      /// Gets or sets the membership identity type.\n-      /// </summary>\n-      public string MembershipIdentityType\n-      {\n-        get { return _membershipIdentityType; }\n-        set { _membershipIdentityType = value; }\n-      }\n-\n-      /// <summary>\n-      /// Creates an instance of the class.\n-      /// </summary>\n-      /// <param name="name">Username.</param>\n-      /// <param name="password">Password.</param>\n-      /// <param name="membershipIdentityType">Membership identity type.</param>\n-      public Criteria(string name, string password, Type membershipIdentityType)\n-      {\n-        Name = name;\n-        Password = password;\n-        MembershipIdentityType = membershipIdentityType.AssemblyQualifiedName;\n-      }\n-\n-      /// <summary>\n-      /// Override this method to get custom field values\n-      /// from the serialization stream.\n-      /// </summary>\n-      /// <param name="info">Serialization info.</param>\n-      /// <param name="mode">Serialization mode.</param>\n-      protected override void OnGetState(Csla.Serialization.Mobile.SerializationInfo info, Csla.Core.StateMode mode)\n-      {\n-        info.AddValue("MembershipIdentity.Criteria.Name", Name);\n-        info.AddValue("MembershipIdentity.Criteria.Password", Password);\n-        info.AddValue("MembershipIdentity.Criteria.MembershipIdentityType", MembershipIdentityType);\n-        base.OnGetState(info, mode);\n-      }\n-\n-      /// <summary>\n-      /// Override this method to set custom field values\n-      /// into the serialization stream.\n-      /// </summary>\n-      /// <param name="info">Serialization info.</param>\n-      /// <param name="mode">Serialization mode.</param>\n-      protected override void OnSetState(Csla.Serialization.Mobile.SerializationInfo info, Csla.Core.StateMode mode)\n-      {\n-        base.OnSetState(info, mode);\n-        Name = info.GetValue<string>("MembershipIdentity.Criteria.Name");\n-        Password = info.GetValue<string>("MembershipIdentity.Criteria.Password");\n-        MembershipIdentityType = info.GetValue<string>("MembershipIdentity.Criteria.MembershipIdentityType");\n-      }\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla/Security/UnauthenticatedIdentity.cs b/Source/Csla/Security/UnauthenticatedIdentity.cs\ndeleted file mode 100644\nindex 4847dd332..000000000\n--- a/Source/Csla/Security/UnauthenticatedIdentity.cs\n+++ /dev/null\n@@ -1,44 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="UnauthenticatedIdentity.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>Implementation of a .NET identity object representing</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Security.Principal;\n-using System.Collections.Generic;\n-using Csla.Core.FieldManager;\n-using System.Runtime.Serialization;\n-using Csla.Core;\n-\n-namespace Csla.Security\n-{\n-  /// <summary>\n-  /// Implementation of a .NET identity object representing\n-  /// an unauthenticated user. Used by the\n-  /// UnauthenticatedPrincipal class.\n-  /// </summary>\n-  [Serializable()]\n-  public sealed class UnauthenticatedIdentity : CslaIdentityBase<UnauthenticatedIdentity>\n-  {\n-    /// <summary>\n-    /// Creates an instance of the object.\n-    /// </summary>\n-    public UnauthenticatedIdentity()\n-    {\n-    }\n-\n-    /// <summary>\n-    /// Initialize the object.\n-    /// </summary>\n-    protected override void Initialize()\n-    {\n-      base.Initialize ();\n-      IsAuthenticated = false;\n-      Name = string.Empty;\n-      AuthenticationType = string.Empty;\n-      Roles = new MobileList<string>();\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla/Security/UnauthenticatedPrincipal.cs b/Source/Csla/Security/UnauthenticatedPrincipal.cs\ndeleted file mode 100644\nindex 00b7d5852..000000000\n--- a/Source/Csla/Security/UnauthenticatedPrincipal.cs\n+++ /dev/null\n@@ -1,36 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="UnauthenticatedPrincipal.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>Implementation of a .NET principal object that represents</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Security.Principal;\n-namespace Csla.Security\n-{\n-  /// <summary>\n-  /// Implementation of a .NET principal object that represents\n-  /// an unauthenticated user. Contains an UnauthenticatedIdentity\n-  /// object.\n-  /// </summary>\n-  [Serializable]\n-  public sealed class UnauthenticatedPrincipal : CslaPrincipal\n-  {\n-    /// <summary>\n-    /// Creates an instance of the object.\n-    /// </summary>\n-    public UnauthenticatedPrincipal() : base(new UnauthenticatedIdentity()) { }\n-\n-    /// <summary>\n-    /// Returns a value indicating whether the user is in the\n-    /// specified role.\n-    /// </summary>\n-    /// <param name="role">Role name.</param>\n-    /// <returns></returns>\n-    public override bool IsInRole(string role)\n-    {\n-      return base.IsInRole(role);\n-    }\n-  }\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla/Serialization/Mobile/MobileFormatter.cs b/Source/Csla/Serialization/Mobile/MobileFormatter.cs\nindex f4e52938e..765f065f9 100644\n--- a/Source/Csla/Serialization/Mobile/MobileFormatter.cs\n+++ b/Source/Csla/Serialization/Mobile/MobileFormatter.cs\n@@ -17,9 +17,7 @@ namespace Csla.Serialization.Mobile\n {\n   /// <summary>\n   /// Serializes and deserializes objects\n-  /// at the field level. A Silverlight-\n-  /// compatible facsimile of the\n-  /// BinaryFormatter or NetDataContractSerializer.\n+  /// at the field level. \n   /// </summary>\n #if TESTING\n   [System.Diagnostics.DebuggerStepThrough]\ndiff --git a/Source/Csla/Server/Hosts/HttpChannel/CriteriaRequest.cs b/Source/Csla/Server/Hosts/HttpChannel/CriteriaRequest.cs\nindex ccc24c1ea..56d9aa595 100644\n--- a/Source/Csla/Server/Hosts/HttpChannel/CriteriaRequest.cs\n+++ b/Source/Csla/Server/Hosts/HttpChannel/CriteriaRequest.cs\n@@ -15,8 +15,7 @@\n namespace Csla.Server.Hosts.HttpChannel\n {\n   /// <summary>\n-  /// Message sent to the Silverlight\n-  /// WCF data portal.\n+  /// Message sent to the WCF data portal.\n   /// </summary>\n   [Serializable]\n   public class CriteriaRequest : ReadOnlyBase<CriteriaRequest>\ndiff --git a/Source/Csla/Server/Hosts/Mobile/CriteriaRequest.cs b/Source/Csla/Server/Hosts/Mobile/CriteriaRequest.cs\nindex f5b6ee8f8..cef6889c7 100644\n--- a/Source/Csla/Server/Hosts/Mobile/CriteriaRequest.cs\n+++ b/Source/Csla/Server/Hosts/Mobile/CriteriaRequest.cs\n@@ -3,7 +3,7 @@\n //     Copyright (c) Marimer LLC. All rights reserved.\n //     Website: https://cslanet.com\n // </copyright>\n-// <summary>Message sent to the Silverlight</summary>\n+// <summary>Message sent to the WCF data portal</summary>\n //-----------------------------------------------------------------------\n using System;\n using System.Runtime.Serialization;\n@@ -13,8 +13,7 @@\n namespace Csla.Server.Hosts.Mobile\n {\n   /// <summary>\n-  /// Message sent to the Silverlight\n-  /// WCF data portal.\n+  /// Message sent to the WCF data portal.\n   /// </summary>\n   [DataContract]\n   public class CriteriaRequest\ndiff --git a/Source/Csla/Server/Hosts/Mobile/IMobileRequest.cs b/Source/Csla/Server/Hosts/Mobile/IMobileRequest.cs\nindex acc5e839b..c05a83ba6 100644\n--- a/Source/Csla/Server/Hosts/Mobile/IMobileRequest.cs\n+++ b/Source/Csla/Server/Hosts/Mobile/IMobileRequest.cs\n@@ -3,7 +3,7 @@\n //     Copyright (c) Marimer LLC. All rights reserved.\n //     Website: https://cslanet.com\n // </copyright>\n-// <summary>Interface for all requests from Silverlight client</summary>\n+// <summary>Interface for all requests from client</summary>\n //-----------------------------------------------------------------------\n using System;\n using Csla.Core;\n@@ -12,7 +12,7 @@\n namespace Csla.Server.Hosts.Mobile\n {\n   /// <summary>\n-  /// Interface for all requests from Silverlight client\n+  /// Interface for all requests from client\n   /// </summary>\n   public interface IMobileRequest\n   {\ndiff --git a/Source/Csla/Server/Hosts/Mobile/MobileCriteriaRequest.cs b/Source/Csla/Server/Hosts/Mobile/MobileCriteriaRequest.cs\nindex 3e39fec80..b8bb6c418 100644\n--- a/Source/Csla/Server/Hosts/Mobile/MobileCriteriaRequest.cs\n+++ b/Source/Csla/Server/Hosts/Mobile/MobileCriteriaRequest.cs\n@@ -3,7 +3,7 @@\n //     Copyright (c) Marimer LLC. All rights reserved.\n //     Website: https://cslanet.com\n // </copyright>\n-// <summary>Class that will be used to execute a request from a Silverlight client.</summary>\n+// <summary>Class that will be used to execute a request from a client.</summary>\n //-----------------------------------------------------------------------\n using System;\n using Csla.Core;\n@@ -12,7 +12,7 @@\n namespace Csla.Server.Hosts.Mobile\n {\n   /// <summary>\n-  /// Class that will be used to execute a request from a Silverlight client.\n+  /// Class that will be used to execute a request from a client.\n   /// This will inlcude Execute, Fetch, Create and Delete requests\n   /// </summary>\n   public class MobileCriteriaRequest : IMobileRequest\ndiff --git a/Source/Csla/Server/Hosts/Mobile/MobileFactoryLoader.cs b/Source/Csla/Server/Hosts/Mobile/MobileFactoryLoader.cs\nindex 9e501b5d7..cfe24a84c 100644\n--- a/Source/Csla/Server/Hosts/Mobile/MobileFactoryLoader.cs\n+++ b/Source/Csla/Server/Hosts/Mobile/MobileFactoryLoader.cs\n@@ -16,7 +16,7 @@ namespace Csla.Server.Hosts.Mobile\n   /// <summary>\n   /// Class containing the default implementation for\n   /// the FactoryLoader delegate used by the\n-  /// Silverlight data portal host.\n+  /// data portal host.\n   /// </summary>\n   public class MobileFactoryLoader : IMobileFactoryLoader\n   {\ndiff --git a/Source/Csla/Server/Hosts/Mobile/MobileRequestProcessor.cs b/Source/Csla/Server/Hosts/Mobile/MobileRequestProcessor.cs\nindex 29562c837..2eb551fa5 100644\n--- a/Source/Csla/Server/Hosts/Mobile/MobileRequestProcessor.cs\n+++ b/Source/Csla/Server/Hosts/Mobile/MobileRequestProcessor.cs\n@@ -3,7 +3,7 @@\n //     Copyright (c) Marimer LLC. All rights reserved.\n //     Website: https://cslanet.com\n // </copyright>\n-// <summary>Object taht processes all the requests from a Silverlight client</summary>\n+// <summary>Object that processes all the requests from a client</summary>\n //-----------------------------------------------------------------------\n using System;\n using Csla.Configuration;\n@@ -15,7 +15,7 @@\n namespace Csla.Server.Hosts.Mobile\n {\n   /// <summary>\n-  /// Object that processes all the requests from a Silverlight client\n+  /// Object that processes all the requests from a client\n   /// </summary>\n   public class MobileRequestProcessor\n   {\ndiff --git a/Source/Csla/Server/Hosts/Mobile/MobileResponse.cs b/Source/Csla/Server/Hosts/Mobile/MobileResponse.cs\nindex 41e4e30c1..389e4ace6 100644\n--- a/Source/Csla/Server/Hosts/Mobile/MobileResponse.cs\n+++ b/Source/Csla/Server/Hosts/Mobile/MobileResponse.cs\n@@ -15,7 +15,7 @@ namespace Csla.Server.Hosts.Mobile\n {\n   /// <summary>\n   /// Object that encompasses the resut of the request from \n-  /// a Silverlight client\n+  /// a client\n   /// </summary>\n   public class MobileResponse\n   {\ndiff --git a/Source/Csla/Server/Hosts/Mobile/MobileUpdateRequest.cs b/Source/Csla/Server/Hosts/Mobile/MobileUpdateRequest.cs\nindex e2b1a0a89..740bf64b7 100644\n--- a/Source/Csla/Server/Hosts/Mobile/MobileUpdateRequest.cs\n+++ b/Source/Csla/Server/Hosts/Mobile/MobileUpdateRequest.cs\n@@ -3,7 +3,7 @@\n //     Copyright (c) Marimer LLC. All rights reserved.\n //     Website: https://cslanet.com\n // </copyright>\n-// <summary>Class that will be used to execute an Update request from a Silverlight client.</summary>\n+// <summary>Class that will be used to execute an Update request from a client.</summary>\n //-----------------------------------------------------------------------\n using System;\n using System.Security.Principal;\n@@ -12,7 +12,7 @@\n namespace Csla.Server.Hosts.Mobile\n {\n   /// <summary>\n-  /// Class that will be used to execute an Update request from a Silverlight client.\n+  /// Class that will be used to execute an Update request from a client.\n   /// </summary>\n   public class MobileUpdateRequest : IMobileRequest\n   {\ndiff --git a/Source/Csla/Server/Hosts/Mobile/UpdateRequest.cs b/Source/Csla/Server/Hosts/Mobile/UpdateRequest.cs\nindex 514e196d2..4bc6b05d5 100644\n--- a/Source/Csla/Server/Hosts/Mobile/UpdateRequest.cs\n+++ b/Source/Csla/Server/Hosts/Mobile/UpdateRequest.cs\n@@ -3,7 +3,7 @@\n //     Copyright (c) Marimer LLC. All rights reserved.\n //     Website: https://cslanet.com\n // </copyright>\n-// <summary>Message sent to the Silverlight</summary>\n+// <summary>Message sent to the WCF data portal</summary>\n //-----------------------------------------------------------------------\n using System;\n using System.Runtime.Serialization;\n@@ -12,8 +12,7 @@\n namespace Csla.Server.Hosts.Mobile\n {\n   /// <summary>\n-  /// Message sent to the Silverlight\n-  /// WCF data portal.\n+  /// Message sent to the WCF data portal.\n   /// </summary>\n   [DataContract]\n   public class UpdateRequest\ndiff --git a/Source/Csla/Server/Hosts/Mobile/WcfResponse.cs b/Source/Csla/Server/Hosts/Mobile/WcfResponse.cs\nindex 73cf3b60b..42aac63b3 100644\n--- a/Source/Csla/Server/Hosts/Mobile/WcfResponse.cs\n+++ b/Source/Csla/Server/Hosts/Mobile/WcfResponse.cs\n@@ -13,7 +13,7 @@ namespace Csla.Server.Hosts.Mobile\n {\n   /// <summary>\n   /// Response message returned from the \n-  /// Silverlight WCF data portal methods.\n+  /// WCF data portal methods.\n   /// </summary>\n   [DataContract]\n   public class WcfResponse\ndiff --git a/Source/Csla/Server/MobileFactoryAttribute.cs b/Source/Csla/Server/MobileFactoryAttribute.cs\nindex 889c381ea..cfacfd11d 100644\n--- a/Source/Csla/Server/MobileFactoryAttribute.cs\n+++ b/Source/Csla/Server/MobileFactoryAttribute.cs\n@@ -3,7 +3,7 @@\n //     Copyright (c) Marimer LLC. All rights reserved.\n //     Website: https://cslanet.com\n // </copyright>\n-// <summary>Specifies that the Silverlight WCF data portal</summary>\n+// <summary>Specifies that the WCF data portal</summary>\n //-----------------------------------------------------------------------\n using System;\n using System.ComponentModel;\n@@ -14,7 +14,7 @@\n namespace Csla.Server\n {\n   /// <summary>\n-  /// Specifies that the Silverlight WCF data portal\n+  /// Specifies that the WCF data portal\n   /// should invoke a factory object rather than\n   /// the business object.\n   /// </summary>\ndiff --git a/Source/Csla/Silverlight/Security/WindowsIdentity.cs b/Source/Csla/Silverlight/Security/WindowsIdentity.cs\ndeleted file mode 100644\nindex e0ae6ecd1..000000000\n--- a/Source/Csla/Silverlight/Security/WindowsIdentity.cs\n+++ /dev/null\n@@ -1,188 +0,0 @@\n-\ufeff//-----------------------------------------------------------------------\n-// <copyright file="WindowsIdentity.cs" company="Marimer LLC">\n-//     Copyright (c) Marimer LLC. All rights reserved.\n-//     Website: https://cslanet.com\n-// </copyright>\n-// <summary>Base class to simplify the retrieval of Windows identity</summary>\n-//-----------------------------------------------------------------------\n-using System;\n-using System.Collections.Generic;\n-using Csla.Core;\n-using System.Runtime.Serialization;\n-\n-namespace Csla.Silverlight.Security\n-{\n-  //[MobileFactory("Csla.Security.IdentityFactory,Csla", "FetchWindowsIdentity")]\n-  /// <summary>\n-  /// Base class to simplify the retrieval of Windows identity\n-  /// information from a Windows server to a \n-  /// CSLA .NET for Silverlight client.\n-  /// </summary>\n-  [Serializable()]\n-  public abstract class WindowsIdentity : ReadOnlyBase<WindowsIdentity>,\n-      System.Security.Principal.IIdentity, Csla.Security.ICheckRoles\n-  {\n-    #region Constructor, Helper Setter\n-    private static int _forceInit;\n-\n-    /// <summary>\n-    /// Creates an instance of the class.\n-    /// </summary>\n-    public WindowsIdentity()\n-    {\n-      _forceInit = _forceInit + 0;\n-    }\n-\n-    /// <summary>\n-    /// Method invoked when the object is deserialized.\n-    /// </summary>\n-    /// <param name="context">Serialization context.</param>\n-    protected override void OnDeserialized(StreamingContext context)\n-    {\n-      _forceInit = _forceInit + 0;\n-      base.OnDeserialized(context);\n-    }\n-\n-    private void SetWindowsIdentity(MobileList<string> roles, bool isAuthenticated, string name)\n-    {\n-      this.LoadProperty(RolesProperty, roles);\n-      this.LoadProperty(IsAuthenticatedProperty, isAuthenticated);\n-      this.LoadProperty(NameProperty, name);\n-    }\n-    #endregion\n-\n-    #region Identity and roles population\n-\n-#if NETSTANDARD2_0 || NET5_0\n-    /// <summary>\n-    /// Retrieves identity and role information from the currently\n-    /// logged in Windows user.\n-    /// </summary>\n-    protected virtual void PopulateWindowsIdentity()\n-    {\n-      throw new NotImplementedException();\n-    }\n-#endif\n-#if !(ANDROID || IOS) && !NETFX_CORE && !NETSTANDARD2_0 && !NET5_0\n-    /// <summary>\n-    /// Retrieves identity and role information from the currently\n-    /// logged in Windows user.\n-    /// </summary>\n-    protected void PopulateWindowsIdentity()\n-    {\n-      string DomainDelimiter = "\\\\";\n-      MobileList<string> roles = new MobileList<string>();\n-      string identityName = string.Empty;\n-\n-      var currentUser = System.Security.Principal.WindowsIdentity.GetCurrent();\n-      \n-#if !MONO\n-      System.Security.Principal.IdentityReferenceCollection groups = System.Security.Principal.WindowsIdentity.GetCurrent().Groups;\n-      foreach (System.Security.Principal.IdentityReference item in groups)\n-      {\n-        System.Security.Principal.NTAccount account = (System.Security.Principal.NTAccount)item.Translate(typeof(System.Security.Principal.NTAccount));\n-        if (account.Value.Contains(DomainDelimiter))\n-        {\n-          roles.Add(account.Value.Substring(account.Value.LastIndexOf(DomainDelimiter) + 1));\n-        }\n-        else\n-        {\n-          roles.Add(account.Value);\n-        }\n-      }\n-#endif\n-      \n-      if (currentUser != null) \n-        identityName = currentUser.Name;\n-      if (identityName.Contains(DomainDelimiter))\n-      {\n-        identityName = identityName.Substring(identityName.LastIndexOf(DomainDelimiter) + 1);\n-      }\n-      this.LoadProperty(RolesProperty, roles);\n-      this.LoadProperty(IsAuthenticatedProperty, true);\n-      this.LoadProperty(NameProperty, identityName);\n-    }\n-#endif\n-\n-    #endregion\n-\n-    #region  IsInRole\n-\n-    /// <summary>\n-    /// Property info for Roles property\n-    /// </summary>\n-    public static readonly PropertyInfo<MobileList<string>> RolesProperty = RegisterProperty<MobileList<string>>(new PropertyInfo<MobileList<string>>("Roles"));\n-\n-    /// <summary>\n-    /// Gets or sets the list of roles for this user.\n-    /// </summary>\n-    protected MobileList<string> Roles\n-    {\n-      get { return ReadProperty(RolesProperty); }\n-      set { LoadProperty(RolesProperty, value); }\n-    }\n-\n-    /// <summary>\n-    /// Returns a value indicating whether the current user\n-    /// is in the specified role.\n-    /// </summary>\n-    /// <param name="role">Role to check.</param>\n-    /// <returns></returns>\n-    public bool IsInRole(string role)\n-    {\n-      return GetProperty<MobileList<string>>(RolesProperty).Contains(role);\n-    }\n-\n-    #endregion\n-\n-    #region  IIdentity\n-\n-    /// <summary>\n-    /// Returns the authentication type for this identity.\n-    /// Always returns Windows.\n-    /// </summary>\n-    public string AuthenticationType\n-    {\n-      get\n-      {\n-        return "Windows";\n-      }\n-    }\n-\n-    /// <summary>\n-    /// Property info for IsAuthenticated property\n-    /// </summary>\n-    public static readonly PropertyInfo<bool> IsAuthenticatedProperty = RegisterProperty<bool>(new PropertyInfo<bool>("IsAuthenticated"));\n-\n-    /// <summary>\n-    /// Returns a value indicating whether this identity\n-    /// represents an authenticated user.\n-    /// </summary>\n-    public bool IsAuthenticated\n-    {\n-      get\n-      {\n-        return GetProperty<bool>(IsAuthenticatedProperty);\n-      }\n-    }\n-\n-    /// <summary>\n-    /// Property info for Name property\n-    /// </summary>\n-    public static readonly PropertyInfo<string> NameProperty = RegisterProperty<string>(new PropertyInfo<string>("Name"));\n-\n-    /// <summary>\n-    /// Returns the name of the user.\n-    /// </summary>\n-    public string Name\n-    {\n-      get\n-      {\n-        return GetProperty<string>(NameProperty);\n-      }\n-    }\n-\n-    #endregion\n-  }\n-\n-}\n\\ No newline at end of file\ndiff --git a/Source/Csla/Threading/BusyLock.cs b/Source/Csla/Threading/BusyLock.cs\nindex 838eb2816..7fd1f985c 100644\n--- a/Source/Csla/Threading/BusyLock.cs\n+++ b/Source/Csla/Threading/BusyLock.cs\n@@ -6,11 +6,7 @@\n // <summary>Implementation of a lock that waits while</summary>\n //-----------------------------------------------------------------------\n using System;\n-using System.Collections.Generic;\n-using System.Linq;\n-using System.Text;\n using Csla.Core;\n-using System.ComponentModel;\n using System.Threading;\n \n namespace Csla.Threading\n@@ -20,7 +16,7 @@ namespace Csla.Threading\n   /// a target object is busy.\n   /// </summary>\n   /// <remarks>\n-  /// Do not call this from a Silverlight UI thread, as it will block\n+  /// Do not call this from a Blazor UI thread, as it will block\n   /// the entire browser.\n   /// </remarks>\n   public static class BusyLock\ndiff --git a/releasenotes.md b/releasenotes.md\nindex dcbaa23d9..9dbf8efe9 100644\n--- a/releasenotes.md\n+++ b/releasenotes.md\n@@ -37,6 +37,11 @@ This is a major release with numerous breaking changes, including:\n \n * [#1974](https://github.com/MarimerLLC/csla/issues/1974) 🐜 Fix formatting of ErrorText\n \n+\n+### Misc\n+\n+* [#1743](https://github.com/MarimerLLC/csla/issues/1743) 🛑🎉 Use only `ClaimsPrincipal` and `ClaimsIdentity`, as these are the only types supported in modern .NET\n+\n ### NuGet dependencies\n \n ## Contributors\n', 'commit_subject': 'Merge pull request #2023 from rockfordlhotka/1743-claimsprincipal', 'repo_name': 'MarimerLLC/csla', 'committer': {'name': 'GitHub', 'email': '1505422b2465e9a84f6fdfaa161078890c593f06@github.com', 'time_sec': '1610087344', 'tz_offset': '-360', 'date': {'seconds': '1610087344'}}, 'commit_tree': '527baff79548bec1a503e5856b865e2ab0890e86', 'commit_message': 'Merge pull request #2023 from rockfordlhotka/1743-claimsprincipal\n\nSupport only ClaimsPrincipal and ClaimsIdentity', 'language_name': 'Shell', 'license': 'mit', 'hunks': '@@ -37,6 +37,11 @@ This is a major release with numerous breaking changes, including:\n \n * [#1974](https://github.com/MarimerLLC/csla/issues/1974) 🐜 Fix formatting of ErrorText\n \n+\n+### Misc\n+\n+* [#1743](https://github.com/MarimerLLC/csla/issues/1743) 🛑🎉 Use only `ClaimsPrincipal` and `ClaimsIdentity`, as these are the only types supported in modern .NET\n+\n ### NuGet dependencies\n \n ## Contributors\n', 'addition_count': 5, 'deletion_count': 0, 'src_file': 'a/releasenotes.md', 'tgt_file': 'b/releasenotes.md', 'file_extension': '.md', 'before_file': "# CSLA 6 releases\n\nCSLA 6 is a major new version of CSLA .NET, fully supporting (and requiring) dependency injection and other features of modern .NET.\n\n## CSLA .NET version 6.2.0 release\n\nCSLA .NET version 6.2.0 enhances `ExecuteAsync` to accept parameters, includes bug fixes, and numerous dependency version updates.\n\n* [#1775](https://github.com/MarimerLLC/csla/issues/1775) Enhance data portal `ExecuteAsync` to allow passing parameters\n* [#3100](https://github.com/MarimerLLC/csla/issues/3100) Linux build issue fix\n* [#2975](https://github.com/MarimerLLC/csla/issues/2975) Linux build issue fix\n* [#3083](https://github.com/MarimerLLC/csla/issues/3083) `NameValueList` serialization fix\n* [#3044](https://github.com/MarimerLLC/csla/issues/3044) Don't use `WindowsPrincipal` on unsupported platforms\n* [#3035](https://github.com/MarimerLLC/csla/issues/3035) Add `ViewModelBase` type to `Csla.Maui` namespace\n\n### Change List\n\n* [Changes in this release](https://github.com/MarimerLLC/csla/issues?q=project%3Amarimerllc%2F6+is%3Aclosed+)\n\n### Contributors\n\n@ajj7060\n@bujma\n@jasonBock\n@rockfordlhotka\n@TheCakeMonster\n\n## CSLA .NET version 6.1.0 release\n\nCSLA .NET version 6.1.0 adds support for Maui and includes bug fixes and one breaking change.\n\n* [#2549](https://github.com/MarimerLLC/csla/issues/2549) Add UI helpers for Maui\n* [#2672](https://github.com/MarimerLLC/csla/issues/2672) Enhance PropertyChanged behavior in `Csla.Xaml.ViewModelBase`\n* [#2764](https://github.com/MarimerLLC/csla/issues/2764) Update snippets NuGet installer for VS2022\n* [#2922](https://github.com/MarimerLLC/csla/issues/2922) Blazor no longer requires text-based serialization\n* [#2946](https://github.com/MarimerLLC/csla/issues/2946) LocalProxy now properly disposes DI scope and dependencies\n\n* [#1974](https://github.com/MarimerLLC/csla/issues/1974) 🐜 Fix formatting of ErrorText\n\n### NuGet dependencies\n\n## Contributors\n\n### Dependency Updates\n\n* Grpc.Net.Client\n* Grpc.Tools\n* Newtonsoft.Json\n* RabbitMQ.Client\n* Microsoft.NETCore.UniversalWindowsPlatform\n* Xamarin.Forms\n* Microsoft.AspNet.WebApi.Client\n* Microsoft.AspNet.WebPages\n* Microsoft.Web.Infrastructure\n* Microsoft.AspNet.WebApi.Core\n* Microsoft.AspNet.Mvc\n* Microsoft.AspNet.Razor\n* Google.Protobuf\n* Microsoft.CodeAnalysis.CSharp\n\n### Contributors\n\n@joshhanson314\n@rockfordlhotka\n@TheCakeMonster\n@jasonbock\n\n## CSLA .NET version 6.0.0 release\n\nCSLA .NET version 6.0.0 is a major release with numerous breaking changes, including:\n\n* Business domain types must have a public constructor\n* Public constructors for many types will have parameters provided via depedency injection\n* Support for .NET 4.0 and 4.5 has been dropped; .NET 4.6.2 is the minimum required\n* The data and object context managers in `Csla.Data` have been removed in favor of using dependency injection\n\nThis version supports:\n\n* .NET 6\n* .NET Framework 4.6.2 to 4.8\n* netstandard 2.0 and 2.1\n* Blazor\n* Xamarin\n* mono\n\nOperating Systems and Platforms:\n\n* Windows (servers and UWP, WPF, Windows Forms)\n* Linux (servers and Xamarin)\n* iOS and Android (Xamarin)\n* Mac (servers and Xamarin)\n* Kubernetes and other container-based runtimes\n* ASP.NET Core and ASP.NET 5\n* Other client and server environments where .NET Core or mono are available\n\n### Change List\n\n* [Changes in this release](https://github.com/MarimerLLC/csla/issues?q=is%3Aclosed+project%3Amarimerllc%2Fcsla%2F11+)\n* [Breaking changes](https://github.com/MarimerLLC/csla/issues?q=is%3Aclosed+project%3Amarimerllc%2Fcsla%2F11+label%3A%22flag%2Fbreaking+change%22).\n\n### Upgrade documentation\n\nThere is a document describing common issues people will likely encounter when upgrading from CSLA 5 to CSLA 6.\n\n* [Upgrading to CSLA 6](https://github.com/MarimerLLC/csla/blob/main/docs/Upgrading%20to%20CSLA%206.md)\n\n### Contributors\n\nThe CSLA community is fantastic! The people who've submitted bugs, helped think through solutions, lobbied for features and enhancements, and submitted pull requests are listed below.\n\n@455986780\n@adrianwright109\n@ajohnstone-ks\n@Art666OTS\n@BaHXeLiSiHg\n@coder-rr\n@danielmartind\n@dazinator\n@devcs21\n@dotMorten\n@Eduardo-Micromust\n@GreatBarrier86\n@j055\n@JacoJordaan\n@JasonBock\n@jhnsartain3\n@jonparker\n@joshhanson314\n@kellyethridge\n@michaelcsikos\n@MTantos1\n@peranborkett\n@poepoe12002\n@ProDInfo\n@RaviPatelTheOne\n@rfcdejong\n@rockfordlhotka\n@russblair\n@SachinPNikam\n@swegele\n@TheCakeMonster\n\nThank you all so much for your support!\n", 'message': 'Merge pull request #2023 from rockfordlhotka/1743-claimsprincipal\n\nSupport only ClaimsPrincipal and ClaimsIdentity', 'author_name': 'GitHub', 'lang': 'md'}