diff --git a/src/NzbDrone.Api/ClientSchema/SchemaBuilder.cs b/src/NzbDrone.Api/ClientSchema/SchemaBuilder.cs
index c5c96c302..03161e510 100644
--- a/src/NzbDrone.Api/ClientSchema/SchemaBuilder.cs
+++ b/src/NzbDrone.Api/ClientSchema/SchemaBuilder.cs
@@ -12,7 +12,7 @@ namespace NzbDrone.Api.ClientSchema
     {
         public static List<Field> ToSchema(object model)
         {
-            Ensure.That(() => model).IsNotNull();
+            Ensure.That(model, () => model).IsNotNull();
 
             var properties = model.GetType().GetSimpleProperties();
 
@@ -57,7 +57,7 @@ namespace NzbDrone.Api.ClientSchema
 
         public static object ReadFormSchema(List<Field> fields, Type targetType)
         {
-            Ensure.That(() => targetType).IsNotNull();
+            Ensure.That(targetType, () => targetType).IsNotNull();
 
             var properties = targetType.GetSimpleProperties();
 
@@ -96,7 +96,7 @@ namespace NzbDrone.Api.ClientSchema
 
         public static T ReadFormSchema<T>(List<Field> fields)
         {
-            return (T)ReadFormSchema(fields, typeof (T));
+            return (T)ReadFormSchema(fields, typeof(T));
         }
 
         private static List<SelectOption> GetSelectOptions(Type selectOptions)
diff --git a/src/NzbDrone.Common.Test/EnsureTest/PathExtensionFixture.cs b/src/NzbDrone.Common.Test/EnsureTest/PathExtensionFixture.cs
index 650158a92..04562a119 100644
--- a/src/NzbDrone.Common.Test/EnsureTest/PathExtensionFixture.cs
+++ b/src/NzbDrone.Common.Test/EnsureTest/PathExtensionFixture.cs
@@ -12,7 +12,7 @@ namespace NzbDrone.Common.Test.EnsureTest
         public void EnsureWindowsPath(string path)
         {
             WindowsOnly();
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
         }
 
 
@@ -20,7 +20,7 @@ namespace NzbDrone.Common.Test.EnsureTest
         public void EnsureLinuxPath(string path)
         {
             LinuxOnly();
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
         }
     }
 }
diff --git a/src/NzbDrone.Common/Cache/CacheManger.cs b/src/NzbDrone.Common/Cache/CacheManger.cs
index b5da3047c..08062d177 100644
--- a/src/NzbDrone.Common/Cache/CacheManger.cs
+++ b/src/NzbDrone.Common/Cache/CacheManger.cs
@@ -24,7 +24,7 @@ namespace NzbDrone.Common.Cache
 
         public ICached<T> GetCache<T>(Type host)
         {
-            Ensure.That(() => host).IsNotNull();
+            Ensure.That(host, () => host).IsNotNull();
             return GetCache<T>(host, host.FullName);
         }
 
@@ -37,8 +37,8 @@ namespace NzbDrone.Common.Cache
 
         public ICached<T> GetCache<T>(Type host, string name)
         {
-            Ensure.That(() => host).IsNotNull();
-            Ensure.That(() => name).IsNotNullOrWhiteSpace();
+            Ensure.That(host, () => host).IsNotNull();
+            Ensure.That(name, () => name).IsNotNullOrWhiteSpace();
 
             return (ICached<T>)_cache.Get(host.FullName + "_" + name, () => new Cached<T>());
         }
diff --git a/src/NzbDrone.Common/Cache/Cached.cs b/src/NzbDrone.Common/Cache/Cached.cs
index 7269a9a53..b2319cf39 100644
--- a/src/NzbDrone.Common/Cache/Cached.cs
+++ b/src/NzbDrone.Common/Cache/Cached.cs
@@ -38,7 +38,7 @@ namespace NzbDrone.Common.Cache
 
         public void Set(string key, T value, TimeSpan? lifetime = null)
         {
-            Ensure.That(() => key).IsNotNullOrWhiteSpace();
+            Ensure.That(key, () => key).IsNotNullOrWhiteSpace();
             _store[key] = new CacheItem(value, lifetime);
         }
 
@@ -69,7 +69,7 @@ namespace NzbDrone.Common.Cache
 
         public T Get(string key, Func<T> function, TimeSpan? lifeTime = null)
         {
-            Ensure.That(() => key).IsNotNullOrWhiteSpace();
+            Ensure.That(key, () => key).IsNotNullOrWhiteSpace();
 
             CacheItem cacheItem;
             T value;
diff --git a/src/NzbDrone.Common/DiskProvider.cs b/src/NzbDrone.Common/DiskProvider.cs
index 5d0dd04a1..ef5242fc7 100644
--- a/src/NzbDrone.Common/DiskProvider.cs
+++ b/src/NzbDrone.Common/DiskProvider.cs
@@ -67,7 +67,7 @@ namespace NzbDrone.Common
 
         public DateTime GetLastFolderWrite(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             if (!FolderExists(path))
             {
@@ -87,7 +87,7 @@ namespace NzbDrone.Common
 
         public DateTime GetLastFileWrite(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             if (!FileExists(path))
             {
@@ -107,13 +107,13 @@ namespace NzbDrone.Common
 
         public bool FolderExists(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
             return Directory.Exists(path);
         }
 
         public bool FileExists(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
             return File.Exists(path);
         }
 
@@ -129,28 +129,28 @@ namespace NzbDrone.Common
 
         public string[] GetDirectories(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             return Directory.GetDirectories(path);
         }
 
         public string[] GetFiles(string path, SearchOption searchOption)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             return Directory.GetFiles(path, "*.*", searchOption);
         }
 
         public long GetFolderSize(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             return GetFiles(path, SearchOption.AllDirectories).Sum(e => new FileInfo(e).Length);
         }
 
         public long GetFileSize(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             if (!FileExists(path))
             {
@@ -163,22 +163,22 @@ namespace NzbDrone.Common
 
         public void CreateFolder(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
             Directory.CreateDirectory(path);
         }
 
         public void CopyFolder(string source, string destination)
         {
-            Ensure.That(() => source).IsValidPath();
-            Ensure.That(() => destination).IsValidPath();
+            Ensure.That(source, () => source).IsValidPath();
+            Ensure.That(destination, () => destination).IsValidPath();
 
             TransferFolder(source, destination, TransferAction.Copy);
         }
 
         public void MoveFolder(string source, string destination)
         {
-            Ensure.That(() => source).IsValidPath();
-            Ensure.That(() => destination).IsValidPath();
+            Ensure.That(source, () => source).IsValidPath();
+            Ensure.That(destination, () => destination).IsValidPath();
 
             try
             {
@@ -195,8 +195,8 @@ namespace NzbDrone.Common
 
         private void TransferFolder(string source, string target, TransferAction transferAction)
         {
-            Ensure.That(() => source).IsValidPath();
-            Ensure.That(() => target).IsValidPath();
+            Ensure.That(source, () => source).IsValidPath();
+            Ensure.That(target, () => target).IsValidPath();
 
             Logger.Trace("{0} {1} -> {2}", transferAction, source, target);
 
@@ -237,7 +237,7 @@ namespace NzbDrone.Common
 
         public void DeleteFile(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
             Logger.Trace("Deleting file: {0}", path);
 
             RemoveReadOnly(path);
@@ -247,8 +247,8 @@ namespace NzbDrone.Common
 
         public void MoveFile(string source, string destination)
         {
-            Ensure.That(() => source).IsValidPath();
-            Ensure.That(() => destination).IsValidPath();
+            Ensure.That(source, () => source).IsValidPath();
+            Ensure.That(destination, () => destination).IsValidPath();
 
             if (source.PathEquals(destination))
             {
@@ -267,14 +267,14 @@ namespace NzbDrone.Common
 
         public void DeleteFolder(string path, bool recursive)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             Directory.Delete(path, recursive);
         }
 
         public void InheritFolderPermissions(string filename)
         {
-            Ensure.That(() => filename).IsValidPath();
+            Ensure.That(filename, () => filename).IsValidPath();
 
             try
             {
@@ -293,7 +293,7 @@ namespace NzbDrone.Common
 
         public long? GetAvailableSpace(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             var root = GetPathRoot(path);
 
@@ -319,28 +319,28 @@ namespace NzbDrone.Common
 
         public string ReadAllText(string filePath)
         {
-            Ensure.That(() => filePath).IsValidPath();
+            Ensure.That(filePath, () => filePath).IsValidPath();
 
             return File.ReadAllText(filePath);
         }
 
         public void WriteAllText(string filename, string contents)
         {
-            Ensure.That(() => filename).IsValidPath();
+            Ensure.That(filename, () => filename).IsValidPath();
             RemoveReadOnly(filename);
             File.WriteAllText(filename, contents);
         }
 
         public void FileSetLastWriteTimeUtc(string path, DateTime dateTime)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             File.SetLastWriteTimeUtc(path, dateTime);
         }
 
         public void FolderSetLastWriteTimeUtc(string path, DateTime dateTime)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             Directory.SetLastWriteTimeUtc(path, dateTime);
         }
@@ -362,14 +362,14 @@ namespace NzbDrone.Common
 
         public string GetPathRoot(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             return Path.GetPathRoot(path);
         }
 
         public string GetParentFolder(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             var parent = Directory.GetParent(path);
 
@@ -448,7 +448,7 @@ namespace NzbDrone.Common
 
         public void EmptyFolder(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             foreach (var file in GetFiles(path, SearchOption.TopDirectoryOnly))
             {
@@ -468,7 +468,7 @@ namespace NzbDrone.Common
 
         public long? GetTotalSize(string path)
         {
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsValidPath();
 
             var root = GetPathRoot(path);
 
diff --git a/src/NzbDrone.Common/EnsureThat/Ensure.cs b/src/NzbDrone.Common/EnsureThat/Ensure.cs
index 5ac44a25c..d918d0e66 100644
--- a/src/NzbDrone.Common/EnsureThat/Ensure.cs
+++ b/src/NzbDrone.Common/EnsureThat/Ensure.cs
@@ -10,13 +10,9 @@ namespace NzbDrone.Common.EnsureThat
             return new Param<T>(name, value);
         }
 
-        public static Param<T> That<T>(Expression<Func<T>> expression)
+        public static Param<T> That<T>(T value, Expression<Func<T>> expression)
         {
-            var memberExpression = expression.GetRightMostMember();
-
-            return new Param<T>(
-                memberExpression.ToPath(),
-                expression.Compile().Invoke());
+            return new Param<T>(expression.GetPath(), value);
         }
 
         public static TypeParam ThatTypeFor<T>(T value, string name = Param.DefaultName)
diff --git a/src/NzbDrone.Common/EnsureThat/ExpressionExtensions.cs b/src/NzbDrone.Common/EnsureThat/ExpressionExtensions.cs
index f3e9473c4..766677a78 100644
--- a/src/NzbDrone.Common/EnsureThat/ExpressionExtensions.cs
+++ b/src/NzbDrone.Common/EnsureThat/ExpressionExtensions.cs
@@ -1,4 +1,5 @@
 using System.Linq.Expressions;
+using NzbDrone.Common.Cache;
 
 namespace NzbDrone.Common.EnsureThat
 {
@@ -15,30 +16,35 @@ namespace NzbDrone.Common.EnsureThat
             return path + e.Member.Name;
         }
 
-        internal static MemberExpression GetRightMostMember(this Expression e)
+        internal static string GetPath(this Expression expression)
         {
-			if (e is LambdaExpression)
-				return GetRightMostMember(((LambdaExpression)e).Body);
+            return GetRightMostMember(expression).ToPath();
+        }
+
+        private static MemberExpression GetRightMostMember(Expression e)
+        {
+            if (e is LambdaExpression)
+                return GetRightMostMember(((LambdaExpression)e).Body);
 
-			if (e is MemberExpression)
-				return (MemberExpression)e;
+            if (e is MemberExpression)
+                return (MemberExpression)e;
 
-			if (e is MethodCallExpression)
-			{
-				var callExpression = (MethodCallExpression)e;
+            if (e is MethodCallExpression)
+            {
+                var callExpression = (MethodCallExpression)e;
 
-				if (callExpression.Object is MethodCallExpression || callExpression.Object is MemberExpression)
-					return GetRightMostMember(callExpression.Object);
+                if (callExpression.Object is MethodCallExpression || callExpression.Object is MemberExpression)
+                    return GetRightMostMember(callExpression.Object);
 
-				var member = callExpression.Arguments.Count > 0 ? callExpression.Arguments[0] : callExpression.Object;
-				return GetRightMostMember(member);
-			}
+                var member = callExpression.Arguments.Count > 0 ? callExpression.Arguments[0] : callExpression.Object;
+                return GetRightMostMember(member);
+            }
 
-			if (e is UnaryExpression)
-			{
-				var unaryExpression = (UnaryExpression)e;
-				return GetRightMostMember(unaryExpression.Operand);
-			}
+            if (e is UnaryExpression)
+            {
+                var unaryExpression = (UnaryExpression)e;
+                return GetRightMostMember(unaryExpression.Operand);
+            }
 
             return null;
         }
diff --git a/src/NzbDrone.Common/PathExtensions.cs b/src/NzbDrone.Common/PathExtensions.cs
index 15687895f..b472178d6 100644
--- a/src/NzbDrone.Common/PathExtensions.cs
+++ b/src/NzbDrone.Common/PathExtensions.cs
@@ -23,8 +23,8 @@ namespace NzbDrone.Common
 
         public static string CleanFilePath(this string path)
         {
-            Ensure.That(() => path).IsNotNullOrWhiteSpace();
-            Ensure.That(() => path).IsValidPath();
+            Ensure.That(path, () => path).IsNotNullOrWhiteSpace();
+            Ensure.That(path, () => path).IsValidPath();
 
             var info = new FileInfo(path.Trim());
 
diff --git a/src/NzbDrone.Core/Download/DownloadService.cs b/src/NzbDrone.Core/Download/DownloadService.cs
index 05dfd4737..dcb65fe88 100644
--- a/src/NzbDrone.Core/Download/DownloadService.cs
+++ b/src/NzbDrone.Core/Download/DownloadService.cs
@@ -29,8 +29,8 @@ namespace NzbDrone.Core.Download
 
         public void DownloadReport(RemoteEpisode remoteEpisode)
         {
-            Ensure.That(() => remoteEpisode.Series).IsNotNull();
-            Ensure.That(() => remoteEpisode.Episodes).HasItems();
+            Ensure.That(remoteEpisode.Series, () => remoteEpisode.Series).IsNotNull();
+            Ensure.That(remoteEpisode.Episodes, () => remoteEpisode.Episodes).HasItems();
 
             var downloadTitle = remoteEpisode.Release.Title;
             var downloadClient = _downloadClientProvider.GetDownloadClient();
diff --git a/src/NzbDrone.Core/IndexerSearch/Definitions/SearchCriteriaBase.cs b/src/NzbDrone.Core/IndexerSearch/Definitions/SearchCriteriaBase.cs
index 20a6e8a39..c86256099 100644
--- a/src/NzbDrone.Core/IndexerSearch/Definitions/SearchCriteriaBase.cs
+++ b/src/NzbDrone.Core/IndexerSearch/Definitions/SearchCriteriaBase.cs
@@ -25,7 +25,7 @@ namespace NzbDrone.Core.IndexerSearch.Definitions
 
         private static string GetQueryTitle(string title)
         {
-            Ensure.That(() => title).IsNotNullOrWhiteSpace();
+            Ensure.That(title,() => title).IsNotNullOrWhiteSpace();
 
             var cleanTitle = BeginningThe.Replace(title, String.Empty);
 
diff --git a/src/NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs b/src/NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs
index 4a094e1eb..7f435fa86 100644
--- a/src/NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs
+++ b/src/NzbDrone.Core/MediaFiles/EpisodeFileMovingService.cs
@@ -57,9 +57,9 @@ namespace NzbDrone.Core.MediaFiles
 
         private void MoveFile(EpisodeFile episodeFile, Series series, string destinationFilename)
         {
-            Ensure.That(() => episodeFile).IsNotNull();
-            Ensure.That(() => series).IsNotNull();
-            Ensure.That(() => destinationFilename).IsValidPath();
+            Ensure.That(episodeFile, () => episodeFile).IsNotNull();
+            Ensure.That(series,() => series).IsNotNull();
+            Ensure.That(destinationFilename, () => destinationFilename).IsValidPath();
 
             if (!_diskProvider.FileExists(episodeFile.Path))
             {
diff --git a/src/NzbDrone.Core/Messaging/Commands/CommandExecutor.cs b/src/NzbDrone.Core/Messaging/Commands/CommandExecutor.cs
index dd3175304..53943bacd 100644
--- a/src/NzbDrone.Core/Messaging/Commands/CommandExecutor.cs
+++ b/src/NzbDrone.Core/Messaging/Commands/CommandExecutor.cs
@@ -33,7 +33,7 @@ namespace NzbDrone.Core.Messaging.Commands
 
         public void PublishCommand<TCommand>(TCommand command) where TCommand : Command
         {
-            Ensure.That(() => command).IsNotNull();
+            Ensure.That(command, () => command).IsNotNull();
 
             _logger.Trace("Publishing {0}", command.GetType().Name);
 
@@ -56,7 +56,7 @@ namespace NzbDrone.Core.Messaging.Commands
 
         public Command PublishCommandAsync<TCommand>(TCommand command) where TCommand : Command
         {
-            Ensure.That(() => command).IsNotNull();
+            Ensure.That(command, () => command).IsNotNull();
 
             _logger.Trace("Publishing {0}", command.GetType().Name);
 
diff --git a/src/NzbDrone.Core/Messaging/Events/EventAggregator.cs b/src/NzbDrone.Core/Messaging/Events/EventAggregator.cs
index 891d1c8b8..2853dd57d 100644
--- a/src/NzbDrone.Core/Messaging/Events/EventAggregator.cs
+++ b/src/NzbDrone.Core/Messaging/Events/EventAggregator.cs
@@ -23,26 +23,26 @@ namespace NzbDrone.Core.Messaging.Events
 
         public void PublishEvent<TEvent>(TEvent @event) where TEvent : class ,IEvent
         {
-            Ensure.That(() => @event).IsNotNull();
+            Ensure.That(@event, () => @event).IsNotNull();
 
             var eventName = GetEventName(@event.GetType());
 
-/*
-            int workerThreads;
-            int completionPortThreads;
-            ThreadPool.GetAvailableThreads(out workerThreads, out completionPortThreads);
+            /*
+                        int workerThreads;
+                        int completionPortThreads;
+                        ThreadPool.GetAvailableThreads(out workerThreads, out completionPortThreads);
 
-            int maxCompletionPortThreads;
-            int maxWorkerThreads;
-            ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxCompletionPortThreads);
+                        int maxCompletionPortThreads;
+                        int maxWorkerThreads;
+                        ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxCompletionPortThreads);
 
 
-            int minCompletionPortThreads;
-            int minWorkerThreads;
-            ThreadPool.GetMinThreads(out minWorkerThreads, out minCompletionPortThreads);
+                        int minCompletionPortThreads;
+                        int minWorkerThreads;
+                        ThreadPool.GetMinThreads(out minWorkerThreads, out minCompletionPortThreads);
 
-            _logger.Warn("Thread pool state WT:{0} PT:{1}  MAXWT:{2} MAXPT:{3} MINWT:{4} MINPT:{5}", workerThreads, completionPortThreads, maxWorkerThreads, maxCompletionPortThreads, minWorkerThreads, minCompletionPortThreads);
-*/
+                        _logger.Warn("Thread pool state WT:{0} PT:{1}  MAXWT:{2} MAXPT:{3} MINWT:{4} MINPT:{5}", workerThreads, completionPortThreads, maxWorkerThreads, maxCompletionPortThreads, minWorkerThreads, minCompletionPortThreads);
+            */
 
             _logger.Trace("Publishing {0}", eventName);
 
diff --git a/src/NzbDrone.Core/Rest/RestSharpExtensions.cs b/src/NzbDrone.Core/Rest/RestSharpExtensions.cs
index 2a25a1222..b4b17510e 100644
--- a/src/NzbDrone.Core/Rest/RestSharpExtensions.cs
+++ b/src/NzbDrone.Core/Rest/RestSharpExtensions.cs
@@ -13,15 +13,15 @@ namespace NzbDrone.Core.Rest
 
         public static IRestResponse ValidateResponse(this IRestResponse response, IRestClient restClient)
         {
-            Ensure.That(() => response).IsNotNull();
+            Ensure.That(response, () => response).IsNotNull();
 
             if (response.Request == null && response.ErrorException != null)
             {
                 throw response.ErrorException;
             }
 
-            Ensure.That(() => response.Request).IsNotNull();
-            Ensure.That(() => restClient).IsNotNull();
+            Ensure.That(response.Request, () => response.Request).IsNotNull();
+            Ensure.That(restClient, () => restClient).IsNotNull();
 
             Logger.Trace("Validating Responses from [{0}] [{1}] status: [{2}]", response.Request.Method, restClient.BuildUri(response.Request), response.StatusCode);
 
diff --git a/src/NzbDrone.Core/Tv/SeriesService.cs b/src/NzbDrone.Core/Tv/SeriesService.cs
index 9e1da54cd..c3767eaf6 100644
--- a/src/NzbDrone.Core/Tv/SeriesService.cs
+++ b/src/NzbDrone.Core/Tv/SeriesService.cs
@@ -58,7 +58,7 @@ namespace NzbDrone.Core.Tv
 
         public Series AddSeries(Series newSeries)
         {
-            Ensure.That(() => newSeries).IsNotNull();
+            Ensure.That(newSeries, () => newSeries).IsNotNull();
 
             if (String.IsNullOrWhiteSpace(newSeries.Path))
             {
@@ -124,7 +124,7 @@ namespace NzbDrone.Core.Tv
         public Series UpdateSeries(Series series)
         {
             var storedSeries = GetSeries(series.Id);
-            
+
             foreach (var season in series.Seasons)
             {
                 var storedSeason = storedSeries.Seasons.SingleOrDefault(s => s.SeasonNumber == season.SeasonNumber);