diff --git a/src/Umbraco.Core/Attempt.cs b/src/Umbraco.Core/Attempt.cs
new file mode 100644
index 0000000000..927f68d7a4
--- /dev/null
+++ b/src/Umbraco.Core/Attempt.cs
@@ -0,0 +1,66 @@
+using System;
+
+namespace Umbraco.Core
+{
+ ///
+ /// Represents the result of an operation attempt
+ ///
+ ///
+ ///
+ [Serializable]
+ public struct Attempt
+ {
+ private readonly bool _success;
+ private readonly T _result;
+ private readonly Exception _error;
+
+ ///
+ /// Gets a value indicating whether this represents a successful operation.
+ ///
+ ///
+ public bool Success
+ {
+ get { return _success; }
+ }
+
+ ///
+ /// Gets the error associated with an unsuccessful attempt.
+ ///
+ /// The error.
+ public Exception Error { get { return _error; } }
+
+ ///
+ /// Gets the parse result.
+ ///
+ ///
+ public T Result
+ {
+ get { return _result; }
+ }
+
+ ///
+ /// Represents an unsuccessful parse operation
+ ///
+ public static readonly Attempt False;
+
+ ///
+ /// Initializes a new instance of the struct.
+ ///
+ /// If set to true this tuple represents a successful parse result.
+ /// The parse result.
+ ///
+ public Attempt(bool success, T result)
+ {
+ _success = success;
+ _result = result;
+ _error = null;
+ }
+
+ public Attempt(Exception error)
+ {
+ _success = false;
+ _result = default(T);
+ _error = error;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/CustomBooleanTypeConverter.cs b/src/Umbraco.Core/CustomBooleanTypeConverter.cs
new file mode 100644
index 0000000000..b7b30d1fa1
--- /dev/null
+++ b/src/Umbraco.Core/CustomBooleanTypeConverter.cs
@@ -0,0 +1,32 @@
+using System;
+using System.ComponentModel;
+
+namespace Umbraco.Core
+{
+ ///
+ /// Allows for converting string representations of 0 and 1 to boolean
+ ///
+ internal class CustomBooleanTypeConverter : BooleanConverter
+ {
+ public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
+ {
+ if (sourceType == typeof(string))
+ {
+ return true;
+ }
+ return base.CanConvertFrom(context, sourceType);
+ }
+
+ public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
+ {
+ if (value is string)
+ {
+ var str = (string)value;
+ if (str == "1") return true;
+ if (str == "0") return false;
+ }
+
+ return base.ConvertFrom(context, culture, value);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Core/ObjectExtensions.cs b/src/Umbraco.Core/ObjectExtensions.cs
new file mode 100644
index 0000000000..e19335aba3
--- /dev/null
+++ b/src/Umbraco.Core/ObjectExtensions.cs
@@ -0,0 +1,376 @@
+using System;
+using System.Collections;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.IO;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Runtime.Serialization;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Security;
+using System.Text;
+using System.Xml;
+
+namespace Umbraco.Core
+{
+ internal static class ObjectExtensions
+ {
+ //private static readonly ConcurrentDictionary> ObjectFactoryCache = new ConcurrentDictionary>();
+
+ public static IEnumerable AsEnumerableOfOne(this T input)
+ {
+ return Enumerable.Repeat(input, 1);
+ }
+
+ public static void DisposeIfDisposable(this object input)
+ {
+ var disposable = input as IDisposable;
+ if (disposable != null) disposable.Dispose();
+ }
+
+ ///
+ /// Provides a shortcut way of safely casting an input when you cannot guarantee the is an instance type (i.e., when the C# AS keyword is not applicable)
+ ///
+ ///
+ /// The input.
+ ///
+ public static T SafeCast(this object input)
+ {
+ if (ReferenceEquals(null, input) || ReferenceEquals(default(T), input)) return default(T);
+ if (input is T) return (T)input;
+ return default(T);
+ }
+
+ ///
+ /// Tries to convert the input object to the output type using TypeConverters
+ ///
+ ///
+ ///
+ ///
+ public static Attempt TryConvertTo(this object input)
+ {
+ var result = TryConvertTo(input, typeof(T));
+ return !result.Success ? Attempt.False : new Attempt(true, (T)result.Result);
+ }
+
+ ///
+ /// Tries to convert the input object to the output type using TypeConverters. If the destination type is a superclass of the input type,
+ /// if will use .
+ ///
+ /// The input.
+ /// Type of the destination.
+ ///
+ public static Attempt