diff --git a/src/Umbraco.Core/Persistence/Mappers/TemplateMapper.cs b/src/Umbraco.Core/Persistence/Mappers/TemplateMapper.cs
new file mode 100644
index 0000000000..c498222fce
--- /dev/null
+++ b/src/Umbraco.Core/Persistence/Mappers/TemplateMapper.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Umbraco.Core.Models;
+using Umbraco.Core.Models.Rdbms;
+
+namespace Umbraco.Core.Persistence.Mappers
+{
+ ///
+ /// Represents a to DTO mapper used to translate the properties of the public api
+ /// implementation to that of the database's DTO as sql: [tableName].[columnName].
+ ///
+ [MapperFor(typeof(Template))]
+ [MapperFor(typeof(ITemplate))]
+ public sealed class TemplateMapper : BaseMapper
+ {
+ private static readonly ConcurrentDictionary PropertyInfoCacheInstance = new ConcurrentDictionary();
+
+ //NOTE: its an internal class but the ctor must be public since we're using Activator.CreateInstance to create it
+ // otherwise that would fail because there is no public constructor.
+ public TemplateMapper()
+ {
+ BuildMap();
+ }
+
+ #region Overrides of BaseMapper
+
+ internal override ConcurrentDictionary PropertyInfoCache
+ {
+ get { return PropertyInfoCacheInstance; }
+ }
+
+ internal override void BuildMap()
+ {
+ if(PropertyInfoCache.IsEmpty)
+ {
+ CacheMap(src => src.Id, dto => dto.NodeId);
+
+ CacheMap(src => src.MasterTemplateId, dto => dto.Master);
+ CacheMap(src => src.Alias, dto => dto.Alias);
+ CacheMap(src => src.Content, dto => dto.Design);
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index d4c1e9097d..033505d424 100644
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -387,6 +387,7 @@
+