diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py
index d4c0fa71de0161593874b5281a2ae11830096016_aGdleHQvbGFyZ2VmaWxlcy9vdmVycmlkZXMucHk=..c96148346af824cc4b17b6e875e481d6a7638b3b_aGdleHQvbGFyZ2VmaWxlcy9vdmVycmlkZXMucHk= 100644
--- a/hgext/largefiles/overrides.py
+++ b/hgext/largefiles/overrides.py
@@ -658,6 +658,19 @@
         if not source:
             source = 'default'
         result = orig(ui, repo, source, **opts)
+        # If we do not have the new largefiles for any new heads we pulled, we
+        # will run into a problem later if we try to merge or rebase with one of
+        # these heads, so cache the largefiles now direclty into the system
+        # cache.
+        ui.status(_("caching new largefiles\n"))
+        numcached = 0
+        branches = repo.branchmap()
+        for branch in branches:
+            heads = repo.branchheads(branch)
+            for head in heads:
+                (cached, missing) = lfcommands.cachelfiles(ui, repo, head)
+                numcached += len(cached)
+        ui.status(_("%d largefiles cached\n" % numcached))
     return result
 
 def override_rebase(orig, ui, repo, **opts):
diff --git a/tests/test-largefiles-cache.t b/tests/test-largefiles-cache.t
index d4c0fa71de0161593874b5281a2ae11830096016_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLWNhY2hlLnQ=..c96148346af824cc4b17b6e875e481d6a7638b3b_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLWNhY2hlLnQ= 100644
--- a/tests/test-largefiles-cache.t
+++ b/tests/test-largefiles-cache.t
@@ -37,6 +37,8 @@
   adding file changes
   added 1 changesets with 1 changes to 1 files
   (run 'hg update' to get a working copy)
+  caching new largefiles
+  0 largefiles cached
 
 Update working directory to "tip", which requires largefile("large"),
 but there is no cache file for it.  So, hg must treat it as
diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t
index d4c0fa71de0161593874b5281a2ae11830096016_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLnQ=..c96148346af824cc4b17b6e875e481d6a7638b3b_dGVzdHMvdGVzdC1sYXJnZWZpbGVzLnQ= 100644
--- a/tests/test-largefiles.t
+++ b/tests/test-largefiles.t
@@ -460,6 +460,8 @@
   adding file changes
   added 1 changesets with 2 changes to 2 files (+1 heads)
   (run 'hg heads' to see heads, 'hg merge' to merge)
+  caching new largefiles
+  0 largefiles cached
   $ hg rebase
   getting changed largefiles
   1 largefiles updated, 0 removed
@@ -610,7 +612,8 @@
   searching 1 changesets for largefiles
   verified existence of 3 revisions of 3 largefiles
 
-Merging does not revert to old versions of largefiles (this has also
-been very problematic).
+Merging does not revert to old versions of largefiles and also check
+that merging after having pulled from a non-default remote works
+correctly.
 
   $ cd ..
@@ -615,6 +618,6 @@
 
   $ cd ..
-  $ hg clone -r 7 e f
+  $ hg clone -r 7 e temp
   adding changesets
   adding manifests
   adding file changes
@@ -623,6 +626,14 @@
   5 files updated, 0 files merged, 0 files removed, 0 files unresolved
   getting changed largefiles
   3 largefiles updated, 0 removed
+  $ hg clone temp f
+  updating to branch default
+  5 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  getting changed largefiles
+  3 largefiles updated, 0 removed
+# Delete the largefiles in the largefiles system cache so that we have an
+# opportunity to test that caching after a pull works.
+  $ rm ${USERCACHE}/*
   $ cd f
   $ echo "large4-merge-test" > sub/large4
   $ hg commit -m "Modify large4 to test merge"
@@ -636,6 +647,8 @@
   adding file changes
   added 2 changesets with 4 changes to 4 files (+1 heads)
   (run 'hg heads' to see heads, 'hg merge' to merge)
+  caching new largefiles
+  2 largefiles cached
   $ hg merge
   merging sub/large4
   largefile sub/large4 has a merge conflict