diff --git a/cmd/podman/login.go b/cmd/podman/login.go
index 4e96b43cb5..8a1687278a 100644
--- a/cmd/podman/login.go
+++ b/cmd/podman/login.go
@@ -10,7 +10,7 @@ import (
 	"github.com/containers/image/pkg/docker/config"
 	"github.com/containers/image/types"
 	"github.com/containers/libpod/cmd/podman/cliconfig"
-	"github.com/containers/libpod/libpod/common"
+	"github.com/containers/libpod/libpod/image"
 	"github.com/pkg/errors"
 	"github.com/spf13/cobra"
 	"golang.org/x/crypto/ssh/terminal"
@@ -64,7 +64,7 @@ func loginCmd(c *cliconfig.LoginValues) error {
 	server := registryFromFullName(scrubServer(args[0]))
 	authfile := getAuthFile(c.Authfile)
 
-	sc := common.GetSystemContext("", authfile, false)
+	sc := image.GetSystemContext("", authfile, false)
 	if c.Flag("tls-verify").Changed {
 		sc.DockerInsecureSkipTLSVerify = types.NewOptionalBool(!c.TlsVerify)
 	}
diff --git a/cmd/podman/logout.go b/cmd/podman/logout.go
index 268e6b44cc..069153e0b5 100644
--- a/cmd/podman/logout.go
+++ b/cmd/podman/logout.go
@@ -5,7 +5,7 @@ import (
 
 	"github.com/containers/image/pkg/docker/config"
 	"github.com/containers/libpod/cmd/podman/cliconfig"
-	"github.com/containers/libpod/libpod/common"
+	"github.com/containers/libpod/libpod/image"
 	"github.com/pkg/errors"
 	"github.com/spf13/cobra"
 )
@@ -54,7 +54,7 @@ func logoutCmd(c *cliconfig.LogoutValues) error {
 	}
 	authfile := getAuthFile(c.Authfile)
 
-	sc := common.GetSystemContext("", authfile, false)
+	sc := image.GetSystemContext("", authfile, false)
 
 	if c.All {
 		if err := config.RemoveAllAuthentication(sc); err != nil {
diff --git a/cmd/podman/play_kube.go b/cmd/podman/play_kube.go
index 0429a40eba..b468a7a893 100644
--- a/cmd/podman/play_kube.go
+++ b/cmd/podman/play_kube.go
@@ -13,7 +13,7 @@ import (
 	"github.com/containers/libpod/cmd/podman/libpodruntime"
 	"github.com/containers/libpod/cmd/podman/shared"
 	"github.com/containers/libpod/libpod"
-	image2 "github.com/containers/libpod/libpod/image"
+	"github.com/containers/libpod/libpod/image"
 	ns "github.com/containers/libpod/pkg/namespaces"
 	"github.com/containers/libpod/pkg/rootless"
 	"github.com/containers/libpod/pkg/spec"
@@ -145,7 +145,7 @@ func playKubeYAMLCmd(c *cliconfig.KubePlayValues) error {
 		writer = os.Stderr
 	}
 
-	dockerRegistryOptions := image2.DockerRegistryOptions{
+	dockerRegistryOptions := image.DockerRegistryOptions{
 		DockerRegistryCreds: registryCreds,
 		DockerCertPath:      c.CertDir,
 	}
@@ -188,7 +188,7 @@ func playKubeYAMLCmd(c *cliconfig.KubePlayValues) error {
 	}
 
 	for _, container := range podYAML.Spec.Containers {
-		newImage, err := runtime.ImageRuntime().New(ctx, container.Image, c.SignaturePolicy, c.Authfile, writer, &dockerRegistryOptions, image2.SigningOptions{}, false, nil)
+		newImage, err := runtime.ImageRuntime().New(ctx, container.Image, c.SignaturePolicy, c.Authfile, writer, &dockerRegistryOptions, image.SigningOptions{}, false, nil)
 		if err != nil {
 			return err
 		}
@@ -237,7 +237,7 @@ func getPodPorts(containers []v1.Container) []ocicni.PortMapping {
 }
 
 // kubeContainerToCreateConfig takes a v1.Container and returns a createconfig describing a container
-func kubeContainerToCreateConfig(ctx context.Context, containerYAML v1.Container, runtime *libpod.Runtime, newImage *image2.Image, namespaces map[string]string, volumes map[string]string) (*createconfig.CreateConfig, error) {
+func kubeContainerToCreateConfig(ctx context.Context, containerYAML v1.Container, runtime *libpod.Runtime, newImage *image.Image, namespaces map[string]string, volumes map[string]string) (*createconfig.CreateConfig, error) {
 	var (
 		containerConfig createconfig.CreateConfig
 		envs            map[string]string
diff --git a/cmd/podman/pull.go b/cmd/podman/pull.go
index 8888c5e288..2aac286425 100644
--- a/cmd/podman/pull.go
+++ b/cmd/podman/pull.go
@@ -11,8 +11,7 @@ import (
 	"github.com/containers/image/transports/alltransports"
 	"github.com/containers/image/types"
 	"github.com/containers/libpod/cmd/podman/cliconfig"
-	"github.com/containers/libpod/libpod/common"
-	image2 "github.com/containers/libpod/libpod/image"
+	"github.com/containers/libpod/libpod/image"
 	"github.com/containers/libpod/pkg/adapter"
 	"github.com/containers/libpod/pkg/util"
 	opentracing "github.com/opentracing/opentracing-go"
@@ -86,7 +85,7 @@ func pullCmd(c *cliconfig.PullValues) error {
 		}
 	}
 	ctx := getContext()
-	image := args[0]
+	img := args[0]
 
 	var registryCreds *types.DockerAuthConfig
 
@@ -105,7 +104,7 @@ func pullCmd(c *cliconfig.PullValues) error {
 		writer = os.Stderr
 	}
 
-	dockerRegistryOptions := image2.DockerRegistryOptions{
+	dockerRegistryOptions := image.DockerRegistryOptions{
 		DockerRegistryCreds: registryCreds,
 		DockerCertPath:      c.CertDir,
 	}
@@ -114,20 +113,20 @@ func pullCmd(c *cliconfig.PullValues) error {
 	}
 
 	// Possible for docker-archive to have multiple tags, so use LoadFromArchiveReference instead
-	if strings.HasPrefix(image, dockerarchive.Transport.Name()+":") {
-		srcRef, err := alltransports.ParseImageName(image)
+	if strings.HasPrefix(img, dockerarchive.Transport.Name()+":") {
+		srcRef, err := alltransports.ParseImageName(img)
 		if err != nil {
-			return errors.Wrapf(err, "error parsing %q", image)
+			return errors.Wrapf(err, "error parsing %q", img)
 		}
 		newImage, err := runtime.LoadFromArchiveReference(getContext(), srcRef, c.SignaturePolicy, writer)
 		if err != nil {
-			return errors.Wrapf(err, "error pulling image from %q", image)
+			return errors.Wrapf(err, "error pulling image from %q", img)
 		}
 		fmt.Println(newImage[0].ID())
 	} else {
 		authfile := getAuthFile(c.String("authfile"))
-		spec := image
-		systemContext := common.GetSystemContext("", authfile, false)
+		spec := img
+		systemContext := image.GetSystemContext("", authfile, false)
 		srcRef, err := alltransports.ParseImageName(spec)
 		if err != nil {
 			dockerTransport := "docker://"
@@ -135,7 +134,7 @@ func pullCmd(c *cliconfig.PullValues) error {
 			spec = dockerTransport + spec
 			srcRef2, err2 := alltransports.ParseImageName(spec)
 			if err2 != nil {
-				return errors.Wrapf(err2, "error parsing image name %q", image)
+				return errors.Wrapf(err2, "error parsing image name %q", img)
 			}
 			srcRef = srcRef2
 		}
@@ -158,7 +157,7 @@ func pullCmd(c *cliconfig.PullValues) error {
 		var foundIDs []string
 		foundImage := true
 		for _, name := range names {
-			newImage, err := runtime.New(getContext(), name, c.String("signature-policy"), authfile, writer, &dockerRegistryOptions, image2.SigningOptions{}, true, nil)
+			newImage, err := runtime.New(getContext(), name, c.String("signature-policy"), authfile, writer, &dockerRegistryOptions, image.SigningOptions{}, true, nil)
 			if err != nil {
 				println(errors.Wrapf(err, "error pulling image %q", name))
 				foundImage = false
@@ -167,7 +166,7 @@ func pullCmd(c *cliconfig.PullValues) error {
 			foundIDs = append(foundIDs, newImage.ID())
 		}
 		if len(names) == 1 && !foundImage {
-			return errors.Wrapf(err, "error pulling image %q", image)
+			return errors.Wrapf(err, "error pulling image %q", img)
 		}
 		if len(names) > 1 {
 			fmt.Println("Pulled Images:")
@@ -175,6 +174,6 @@ func pullCmd(c *cliconfig.PullValues) error {
 		for _, id := range foundIDs {
 			fmt.Println(id)
 		}
-	} // end else if strings.HasPrefix(image, dockerarchive.Transport.Name()+":")
+	} // end else if strings.HasPrefix(img, dockerarchive.Transport.Name()+":")
 	return nil
 }
diff --git a/libpod/common/common.go b/libpod/common/common.go
index 5d10bee368..93a736af25 100644
--- a/libpod/common/common.go
+++ b/libpod/common/common.go
@@ -1,20 +1,5 @@
 package common
 
-import (
-	"github.com/containers/image/types"
-)
-
-// GetSystemContext Constructs a new containers/image/types.SystemContext{} struct from the given signaturePolicy path
-func GetSystemContext(signaturePolicyPath, authFilePath string, forceCompress bool) *types.SystemContext {
-	sc := &types.SystemContext{}
-	if signaturePolicyPath != "" {
-		sc.SignaturePolicyPath = signaturePolicyPath
-	}
-	sc.AuthFilePath = authFilePath
-	sc.DirForceCompress = forceCompress
-	return sc
-}
-
 // IsTrue determines whether the given string equals "true"
 func IsTrue(str string) bool {
 	return str == "true"
diff --git a/libpod/image/image.go b/libpod/image/image.go
index f79bc3dc2c..4862bf1d65 100644
--- a/libpod/image/image.go
+++ b/libpod/image/image.go
@@ -6,6 +6,7 @@ import (
 	"fmt"
 	"io"
 	"os"
+	"path/filepath"
 	"strings"
 	"syscall"
 	"time"
@@ -22,7 +23,6 @@ import (
 	"github.com/containers/image/transports"
 	"github.com/containers/image/transports/alltransports"
 	"github.com/containers/image/types"
-	"github.com/containers/libpod/libpod/common"
 	"github.com/containers/libpod/libpod/driver"
 	"github.com/containers/libpod/libpod/events"
 	"github.com/containers/libpod/pkg/inspect"
@@ -548,6 +548,7 @@ func (i *Image) PushImageToHeuristicDestination(ctx context.Context, destination
 // PushImageToReference pushes the given image to a location described by the given path
 func (i *Image) PushImageToReference(ctx context.Context, dest types.ImageReference, manifestMIMEType, authFile, signaturePolicyPath string, writer io.Writer, forceCompress bool, signingOptions SigningOptions, dockerRegistryOptions *DockerRegistryOptions, additionalDockerArchiveTags []reference.NamedTagged) error {
 	sc := GetSystemContext(signaturePolicyPath, authFile, forceCompress)
+	sc.BlobInfoCacheDir = filepath.Join(i.imageruntime.store.GraphRoot(), "cache")
 
 	policyContext, err := getPolicyContext(sc)
 	if err != nil {
@@ -909,7 +910,7 @@ func (ir *Runtime) Import(ctx context.Context, path, reference string, writer io
 		return nil, errors.Wrapf(err, "error updating image config")
 	}
 
-	sc := common.GetSystemContext("", "", false)
+	sc := GetSystemContext("", "", false)
 
 	// if reference not given, get the image digest
 	if reference == "" {
diff --git a/libpod/image/pull.go b/libpod/image/pull.go
index a3b716e656..5a0706b07e 100644
--- a/libpod/image/pull.go
+++ b/libpod/image/pull.go
@@ -4,6 +4,7 @@ import (
 	"context"
 	"fmt"
 	"io"
+	"path/filepath"
 	"strings"
 
 	cp "github.com/containers/image/copy"
@@ -204,6 +205,7 @@ func (ir *Runtime) pullImageFromHeuristicSource(ctx context.Context, inputName s
 
 	var goal *pullGoal
 	sc := GetSystemContext(signaturePolicyPath, authfile, false)
+	sc.BlobInfoCacheDir = filepath.Join(ir.store.GraphRoot(), "cache")
 	srcRef, err := alltransports.ParseImageName(inputName)
 	if err != nil {
 		// could be trying to pull from registry with short name
diff --git a/libpod/image/search.go b/libpod/image/search.go
index 212eff00b9..2c66ce284b 100644
--- a/libpod/image/search.go
+++ b/libpod/image/search.go
@@ -9,7 +9,6 @@ import (
 
 	"github.com/containers/image/docker"
 	"github.com/containers/image/types"
-	"github.com/containers/libpod/libpod/common"
 	sysreg "github.com/containers/libpod/pkg/registries"
 	"github.com/fatih/camelcase"
 	"github.com/pkg/errors"
@@ -157,7 +156,7 @@ func searchImageInRegistry(term string, registry string, options SearchOptions)
 		limit = options.Limit
 	}
 
-	sc := common.GetSystemContext("", options.Authfile, false)
+	sc := GetSystemContext("", options.Authfile, false)
 	sc.DockerInsecureSkipTLSVerify = options.InsecureSkipTLSVerify
 	// FIXME: Set this more globally.  Probably no reason not to have it in
 	// every types.SystemContext, and to compute the value just once in one