diff --git a/src/Umbraco.Core/Models/IContent.cs b/src/Umbraco.Core/Models/IContent.cs
new file mode 100644
index 0000000000..b391c62e7e
--- /dev/null
+++ b/src/Umbraco.Core/Models/IContent.cs
@@ -0,0 +1,56 @@
+using System;
+
+namespace Umbraco.Core.Models
+{
+ ///
+ /// Defines a Content object
+ ///
+ public interface IContent : IContentBase
+ {
+ ///
+ /// Alias of the template used by the Content
+ /// This is used to override the default one from the ContentType
+ ///
+ string Template { get; set; }
+
+ ///
+ /// Boolean indicating whether the Content is Published or not
+ ///
+ bool Published { get; }
+
+ ///
+ /// Language of the data contained within the Content object
+ ///
+ string Language { get; set; }
+
+ ///
+ /// Gets the Guid Id of the Content's Version
+ ///
+ Guid Version { get; }
+
+ ///
+ /// Gets or Sets the date the Content should be released and thus be published
+ ///
+ DateTime? ReleaseDate { get; set; }
+
+ ///
+ /// Gets or Sets the date the Content should expire and thus be unpublished
+ ///
+ DateTime? ExpireDate { get; set; }
+
+ ///
+ /// Changes the for the current content object
+ ///
+ /// New ContentType for this content
+ /// Leaves PropertyTypes intact after change
+ void ChangeContentType(IContentType contentType);
+
+ ///
+ /// Changes the for the current content object and removes PropertyTypes,
+ /// which are not part of the new ContentType.
+ ///
+ /// New ContentType for this content
+ /// Boolean indicating whether to clear PropertyTypes upon change
+ void ChangeContentType(IContentType contentType, bool clearProperties);
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Models/IContentBase.cs b/src/Umbraco.Core/Models/IContentBase.cs
new file mode 100644
index 0000000000..99d42b5828
--- /dev/null
+++ b/src/Umbraco.Core/Models/IContentBase.cs
@@ -0,0 +1,105 @@
+using System.Collections.Generic;
+using Umbraco.Core.Models.EntityBase;
+
+namespace Umbraco.Core.Models
+{
+ ///
+ /// Defines the base for a Content object with properties that
+ /// are shared between Content and Media.
+ ///
+ public interface IContentBase : IAggregateRoot
+ {
+ ///
+ /// Gets or Sets the Id of the Parent for the Content
+ ///
+ int ParentId { get; set; }
+
+ ///
+ /// Gets or Sets the Name of the Content
+ ///
+ string Name { get; set; }
+
+ ///
+ /// Gets the Url name of the Content
+ ///
+ string UrlName { get; }
+
+ ///
+ /// Gets or Sets the Sort Order of the Content
+ ///
+ int SortOrder { get; set; }
+
+ ///
+ /// Gets or Sets the Level of the Content
+ ///
+ int Level { get; set; }
+
+ ///
+ /// Gets or Sets the Path of the Content
+ ///
+ string Path { get; set; }
+
+ ///
+ /// Id of the user who created the Content
+ ///
+ int UserId { get; set; }
+
+ ///
+ /// Boolean indicating whether this Content is Trashed or not.
+ /// If Content is Trashed it will be located in the Recyclebin.
+ ///
+ bool Trashed { get; }
+
+ ///
+ /// Integer Id of the default ContentType
+ ///
+ int ContentTypeId { get; }
+
+ ///
+ /// List of properties, which make up all the data available for this Content object
+ ///
+ /// Properties are loaded as part of the Content object graph
+ PropertyCollection Properties { get; set; }
+
+ ///
+ /// List of PropertyGroups available on this Content object
+ ///
+ /// PropertyGroups are kind of lazy loaded as part of the object graph
+ IEnumerable PropertyGroups { get; }
+
+ ///
+ /// List of PropertyTypes available on this Content object
+ ///
+ /// PropertyTypes are kind of lazy loaded as part of the object graph
+ IEnumerable PropertyTypes { get; }
+
+ ///
+ /// Indicates whether the content object has a property with the supplied alias
+ ///
+ /// Alias of the PropertyType
+ /// True if Property with given alias exists, otherwise False
+ bool HasProperty(string propertyTypeAlias);
+
+ ///
+ /// Gets the value of a Property
+ ///
+ /// Alias of the PropertyType
+ /// Value as an
+ object GetValue(string propertyTypeAlias);
+
+ ///
+ /// Gets the value of a Property
+ ///
+ /// Type of the value to return
+ /// Alias of the PropertyType
+ /// Value as a
+ TPassType GetValue(string propertyTypeAlias);
+
+ ///
+ /// Sets the value of a Property
+ ///
+ /// Alias of the PropertyType
+ /// Value to set for the Property
+ void SetValue(string propertyTypeAlias, object value);
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Models/IContentType.cs b/src/Umbraco.Core/Models/IContentType.cs
new file mode 100644
index 0000000000..3d9282278d
--- /dev/null
+++ b/src/Umbraco.Core/Models/IContentType.cs
@@ -0,0 +1,20 @@
+using System.Collections.Generic;
+
+namespace Umbraco.Core.Models
+{
+ ///
+ /// Defines a ContentType, which Content is based on
+ ///
+ public interface IContentType : IContentTypeComposition
+ {
+ ///
+ /// Gets or Sets the path to the default Template of the ContentType
+ ///
+ string DefaultTemplate { get; set; }
+
+ ///
+ /// Gets or Sets a list of Template names/paths which are allowed for the ContentType
+ ///
+ IEnumerable AllowedTemplates { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Models/IContentTypeBase.cs b/src/Umbraco.Core/Models/IContentTypeBase.cs
new file mode 100644
index 0000000000..93ad407db6
--- /dev/null
+++ b/src/Umbraco.Core/Models/IContentTypeBase.cs
@@ -0,0 +1,77 @@
+using System.Collections.Generic;
+using Umbraco.Core.Models.EntityBase;
+
+namespace Umbraco.Core.Models
+{
+ ///
+ /// Defines the base for a ContentType with properties that
+ /// are shared between ContentTypes and MediaTypes.
+ ///
+ public interface IContentTypeBase : IAggregateRoot
+ {
+ ///
+ /// Gets or Sets the Alias of the ContentType
+ ///
+ string Alias { get; set; }
+
+ ///
+ /// Gets or Sets the Name of the ContentType
+ ///
+ string Name { get; set; }
+
+ ///
+ /// Gets or Sets the Id of Parent of the ContentType
+ ///
+ int ParentId { get; set; }
+
+ ///
+ /// Gets or Sets the Level of the Content
+ ///
+ int Level { get; set; }
+
+ ///
+ /// Gets or Sets the Path of the Content
+ ///
+ string Path { get; set; }
+
+ ///
+ /// Gets or Sets the Description for the ContentType
+ ///
+ string Description { get; set; }
+
+ ///
+ /// Gets or Sets the Sort Order of the ContentType
+ ///
+ int SortOrder { get; set; }
+
+ ///
+ /// Gets or Sets the Icon for the ContentType
+ ///
+ string Icon { get; set; }
+
+ ///
+ /// Gets or Sets the Thumbnail for the ContentType
+ ///
+ string Thumbnail { get; set; }
+
+ ///
+ /// Gets or Sets the Id of the User who created the ContentType
+ ///
+ int UserId { get; set; }
+
+ ///
+ /// Gets or Sets a list of integer Ids of the ContentTypes allowed under the ContentType
+ ///
+ IEnumerable AllowedContentTypes { get; set; }
+
+ ///
+ /// Gets or Sets a collection of Property Groups
+ ///
+ PropertyGroupCollection PropertyGroups { get; set; }
+
+ ///
+ /// Gets an enumerable list of Property Types aggregated for all groups
+ ///
+ IEnumerable PropertyTypes { get; }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Models/IContentTypeComposition.cs b/src/Umbraco.Core/Models/IContentTypeComposition.cs
new file mode 100644
index 0000000000..5e97d75e6c
--- /dev/null
+++ b/src/Umbraco.Core/Models/IContentTypeComposition.cs
@@ -0,0 +1,52 @@
+using System.Collections.Generic;
+
+namespace Umbraco.Core.Models
+{
+ ///
+ /// Defines the Composition of a ContentType
+ ///
+ public interface IContentTypeComposition : IContentTypeBase
+ {
+ ///
+ /// Gets a list of ContentTypes that make up a composition of PropertyGroups and PropertyTypes for the current ContentType
+ ///
+ List ContentTypeComposition { get; }
+
+ ///
+ /// Gets a list of objects from the composition
+ ///
+ IEnumerable CompositionPropertyGroups { get; }
+
+ ///
+ /// Gets a list of objects from the composition
+ ///
+ IEnumerable CompositionPropertyTypes { get; }
+
+ ///
+ /// Adds a new ContentType to the list of composite ContentTypes
+ ///
+ /// to add
+ /// True if ContentType was added, otherwise returns False
+ bool AddContentType(IContentTypeComposition contentType);
+
+ ///
+ /// Removes a ContentType with the supplied alias from the the list of composite ContentTypes
+ ///
+ /// Alias of a
+ /// True if ContentType was removed, otherwise returns False
+ bool RemoveContentType(string alias);
+
+ ///
+ /// Checks if a ContentType with the supplied alias exists in the list of composite ContentTypes
+ ///
+ /// Alias of a
+ /// True if ContentType with alias exists, otherwise returns False
+ bool ContentTypeCompositionExists(string alias);
+
+ ///
+ /// Gets a list of ContentType aliases from the current composition
+ ///
+ ///
+ IEnumerable CompositionAliases();
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Models/IMedia.cs b/src/Umbraco.Core/Models/IMedia.cs
new file mode 100644
index 0000000000..1f1e2c78c7
--- /dev/null
+++ b/src/Umbraco.Core/Models/IMedia.cs
@@ -0,0 +1,20 @@
+namespace Umbraco.Core.Models
+{
+ public interface IMedia : IContentBase
+ {
+ ///
+ /// Changes the for the current content object
+ ///
+ /// New ContentType for this content
+ /// Leaves PropertyTypes intact after change
+ void ChangeContentType(IMediaType contentType);
+
+ ///
+ /// Changes the for the current content object and removes PropertyTypes,
+ /// which are not part of the new ContentType.
+ ///
+ /// New ContentType for this content
+ /// Boolean indicating whether to clear PropertyTypes upon change
+ void ChangeContentType(IMediaType contentType, bool clearProperties);
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Models/IMediaType.cs b/src/Umbraco.Core/Models/IMediaType.cs
new file mode 100644
index 0000000000..8d36168015
--- /dev/null
+++ b/src/Umbraco.Core/Models/IMediaType.cs
@@ -0,0 +1,10 @@
+namespace Umbraco.Core.Models
+{
+ ///
+ /// Defines a ContentType, which Media is based on
+ ///
+ public interface IMediaType : IContentTypeBase
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index 5da4fcda1e..2243896a52 100644
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -99,6 +99,13 @@
+
+
+
+
+
+
+