diff --git a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj
index a7de95fd7..7878803b5 100644
--- a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj
+++ b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj
@@ -79,6 +79,7 @@
+
diff --git a/src/Orchard.Web/Modules/Orchard.Users/Services/UserResolverSelector.cs b/src/Orchard.Web/Modules/Orchard.Users/Services/UserResolverSelector.cs
new file mode 100644
index 000000000..1c6feb7c5
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Users/Services/UserResolverSelector.cs
@@ -0,0 +1,40 @@
+using System.Collections.Generic;
+using System.Linq;
+using Orchard.ContentManagement;
+using Orchard.Users.Models;
+
+namespace Orchard.Users.Services {
+ public class UserResolverSelector : IIdentityResolverSelector {
+ private readonly IContentManager _contentManager;
+
+ public UserResolverSelector(IContentManager contentManager) {
+ _contentManager = contentManager;
+ }
+
+ public IdentityResolverSelectorResult GetResolver(ContentIdentity contentIdentity) {
+ if (contentIdentity.Has("User.UserName")) {
+ return new IdentityResolverSelectorResult {
+ Priority = 0,
+ Resolve = ResolveIdentity
+ };
+ }
+
+ return null;
+ }
+
+ private IEnumerable ResolveIdentity(ContentIdentity identity) {
+ var identifier = identity.Get("User.UserName");
+
+ if (identifier == null) {
+ return null;
+ }
+
+ var comparer = new ContentIdentity.ContentIdentityEqualityComparer();
+ return _contentManager
+ .Query()
+ .Where(p => p.UserName == identifier)
+ .List()
+ .Where(c => comparer.Equals(identity, _contentManager.GetItemMetadata(c).Identity));
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj
index 0a4534ae1..e357b8a46 100644
--- a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj
+++ b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj
@@ -85,6 +85,7 @@
+
diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Services/LayerResolverSelector.cs b/src/Orchard.Web/Modules/Orchard.Widgets/Services/LayerResolverSelector.cs
new file mode 100644
index 000000000..1324e1007
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.Widgets/Services/LayerResolverSelector.cs
@@ -0,0 +1,41 @@
+using System.Collections.Generic;
+using System.Linq;
+using Orchard.ContentManagement;
+using Orchard.Core.Common.Models;
+using Orchard.Widgets.Models;
+
+namespace Orchard.Widgets.Services {
+ public class LayerResolverSelector : IIdentityResolverSelector {
+ private readonly IContentManager _contentManager;
+
+ public LayerResolverSelector(IContentManager contentManager) {
+ _contentManager = contentManager;
+ }
+
+ public IdentityResolverSelectorResult GetResolver(ContentIdentity contentIdentity) {
+ if (contentIdentity.Has("Layer.LayerName")) {
+ return new IdentityResolverSelectorResult {
+ Priority = 0,
+ Resolve = ResolveIdentity
+ };
+ }
+
+ return null;
+ }
+
+ private IEnumerable ResolveIdentity(ContentIdentity identity) {
+ var identifier = identity.Get("Layer.LayerName");
+
+ if (identifier == null) {
+ return null;
+ }
+
+ var comparer = new ContentIdentity.ContentIdentityEqualityComparer();
+ return _contentManager
+ .Query()
+ .Where(p => p.Name == identifier)
+ .List()
+ .Where(c => comparer.Equals(identity, _contentManager.GetItemMetadata(c).Identity));
+ }
+ }
+}
\ No newline at end of file