diff --git a/src/Marr.Data/QGen/QueryBuilder.cs b/src/Marr.Data/QGen/QueryBuilder.cs
index d4cddf45f..ba135ac07 100644
--- a/src/Marr.Data/QGen/QueryBuilder.cs
+++ b/src/Marr.Data/QGen/QueryBuilder.cs
@@ -556,8 +556,14 @@ namespace Marr.Data.QGen
             _isJoin = true;
             MemberInfo rightMember = (rightEntity.Body as MemberExpression).Member;
 
-            var relationship = EntGraph.Relationships.Single(v => v.Member == rightMember);
-            EntGraph.AddLazyRelationship(relationship);
+            foreach (var item in EntGraph)
+            {
+                if (item.EntityType == typeof(TLeft))
+                {
+                    var relationship = item.Relationships.Single(v => v.Member == rightMember);
+                    item.AddLazyRelationship(relationship);
+                }
+            }
 
             return Join(joinType, rightMember, filterExpression);
         }
diff --git a/src/NzbDrone.Core.Test/Datastore/MarrDataLazyLoadingFixture.cs b/src/NzbDrone.Core.Test/Datastore/MarrDataLazyLoadingFixture.cs
new file mode 100644
index 000000000..32aee7226
--- /dev/null
+++ b/src/NzbDrone.Core.Test/Datastore/MarrDataLazyLoadingFixture.cs
@@ -0,0 +1,105 @@
+using FizzWare.NBuilder;
+using NUnit.Framework;
+using NzbDrone.Core.Datastore;
+using NzbDrone.Core.Test.Framework;
+using NzbDrone.Core.Tv;
+using NzbDrone.Core.Qualities;
+using NzbDrone.Core.MediaFiles;
+
+namespace NzbDrone.Core.Test.Datastore
+{
+
+    [TestFixture]
+    public class MarrDataLazyLoadingFixture : DbTest
+    {
+        [SetUp]
+        public void Setup()
+        {
+            var qualityProfile = new NzbDrone.Core.Qualities.QualityProfile
+                {
+                    Name = "Test",
+                    Cutoff = Quality.WEBDL720p,
+                    Items = NzbDrone.Core.Test.Qualities.QualityFixture.GetDefaultQualities()
+                };
+
+            
+            qualityProfile = Db.Insert(qualityProfile);
+
+            var series = Builder<Series>.CreateListOfSize(1)
+                .All()
+                .With(v => v.QualityProfileId = qualityProfile.Id)
+                .BuildListOfNew();
+
+            Db.InsertMany(series);
+
+            var episodeFiles = Builder<EpisodeFile>.CreateListOfSize(1)
+                .All()
+                .With(v => v.SeriesId = series[0].Id)
+                .BuildListOfNew();
+
+            Db.InsertMany(episodeFiles);
+
+            var episodes = Builder<Episode>.CreateListOfSize(10)
+                .All()
+                .With(v => v.Monitored = true)
+                .With(v => v.EpisodeFileId = episodeFiles[0].Id)
+                .With(v => v.SeriesId = series[0].Id)
+                .BuildListOfNew();
+
+            Db.InsertMany(episodes);
+        }
+
+        [Test]
+        public void should_lazy_load_qualityprofile_if_not_joined()
+        {
+            var db = Mocker.Resolve<IDatabase>();
+            var DataMapper = db.GetDataMapper();
+
+            var episodes = DataMapper.Query<Episode>()
+                .Join<Episode, Series>(Marr.Data.QGen.JoinType.Inner, v => v.Series, (l, r) => l.SeriesId == r.Id)
+                .ToList();
+
+            foreach (var episode in episodes)
+            {
+                Assert.IsNotNull(episode.Series);
+                Assert.IsFalse(episode.Series.QualityProfile.IsLoaded);
+            }
+        }
+
+        [Test]
+        public void should_explicit_load_episodefile_if_joined()
+        {
+            var db = Mocker.Resolve<IDatabase>();
+            var DataMapper = db.GetDataMapper();
+
+            var episodes = DataMapper.Query<Episode>()
+                .Join<Episode, EpisodeFile>(Marr.Data.QGen.JoinType.Inner, v => v.EpisodeFile, (l, r) => l.EpisodeFileId == r.Id)
+                .ToList();
+
+            foreach (var episode in episodes)
+            {
+                Assert.IsNull(episode.Series);
+                Assert.IsTrue(episode.EpisodeFile.IsLoaded);
+            }
+        }
+
+        [Test]
+        public void should_explicit_load_qualityprofile_if_joined()
+        {
+            var db = Mocker.Resolve<IDatabase>();
+            var DataMapper = db.GetDataMapper();
+
+            var episodes = DataMapper.Query<Episode>()
+                .Join<Episode, Series>(Marr.Data.QGen.JoinType.Inner, v => v.Series, (l, r) => l.SeriesId == r.Id)
+                .Join<Series, QualityProfile>(Marr.Data.QGen.JoinType.Inner, v => v.QualityProfile, (l, r) => l.QualityProfileId == r.Id)
+                .ToList();
+
+            foreach (var episode in episodes)
+            {
+                Assert.IsNotNull(episode.Series);
+                Assert.IsTrue(episode.Series.QualityProfile.IsLoaded);
+            }
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj
index 15b3c68ab..3b03dfe3e 100644
--- a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj
+++ b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj
@@ -104,6 +104,7 @@
     <Compile Include="Blacklisting\BlacklistRepositoryFixture.cs" />
     <Compile Include="DataAugmentationFixture\Scene\SceneMappingProxyFixture.cs" />
     <Compile Include="DataAugmentationFixture\Scene\SceneMappingServiceFixture.cs" />
+    <Compile Include="Datastore\MarrDataLazyLoadingFixture.cs" />
     <Compile Include="Datastore\BasicRepositoryFixture.cs" />
     <Compile Include="Datastore\Converters\ProviderSettingConverterFixture.cs" />
     <Compile Include="Datastore\DatabaseRelationshipFixture.cs" />