diff --git a/cmd/helm/get.go b/cmd/helm/get.go
index a2eb1d137fd41bb702cfef053306f5c62f8eac74..8c899eb370b49116662faf2834ff4a36c6422921 100644
--- a/cmd/helm/get.go
+++ b/cmd/helm/get.go
@@ -81,9 +81,9 @@ func newGetCmd(client helm.Interface, out io.Writer) *cobra.Command {
 
 // getCmd is the command that implements 'helm get'
 func (g *getCmd) run() error {
-	res, err := g.client.ReleaseContent(g.release, helm.ContentReleaseVersion(g.version))
+	res, err := g.client.ReleaseContent(g.release, g.version)
 	if err != nil {
 		return prettyError(err)
 	}
-	return printRelease(g.out, res.Release)
+	return printRelease(g.out, res)
 }
diff --git a/cmd/helm/get_hooks.go b/cmd/helm/get_hooks.go
index 1b6f2f8fef5648355a1afb99901cf62e7ec49c39..9da290682c8369d0942dd694113f99b8dff7c6e9 100644
--- a/cmd/helm/get_hooks.go
+++ b/cmd/helm/get_hooks.go
@@ -62,13 +62,13 @@ func newGetHooksCmd(client helm.Interface, out io.Writer) *cobra.Command {
 }
 
 func (g *getHooksCmd) run() error {
-	res, err := g.client.ReleaseContent(g.release, helm.ContentReleaseVersion(g.version))
+	res, err := g.client.ReleaseContent(g.release, g.version)
 	if err != nil {
 		fmt.Fprintln(g.out, g.release)
 		return prettyError(err)
 	}
 
-	for _, hook := range res.Release.Hooks {
+	for _, hook := range res.Hooks {
 		fmt.Fprintf(g.out, "---\n# %s\n%s", hook.Name, hook.Manifest)
 	}
 	return nil
diff --git a/cmd/helm/get_manifest.go b/cmd/helm/get_manifest.go
index c01febfb45ab45bd372ece73651f73d203f50c9f..96f754936d216e1af3f8f03b7537405be8ee8e81 100644
--- a/cmd/helm/get_manifest.go
+++ b/cmd/helm/get_manifest.go
@@ -66,10 +66,10 @@ func newGetManifestCmd(client helm.Interface, out io.Writer) *cobra.Command {
 
 // getManifest implements 'helm get manifest'
 func (g *getManifestCmd) run() error {
-	res, err := g.client.ReleaseContent(g.release, helm.ContentReleaseVersion(g.version))
+	res, err := g.client.ReleaseContent(g.release, g.version)
 	if err != nil {
 		return prettyError(err)
 	}
-	fmt.Fprintln(g.out, res.Release.Manifest)
+	fmt.Fprintln(g.out, res.Manifest)
 	return nil
 }
diff --git a/cmd/helm/get_values.go b/cmd/helm/get_values.go
index b6ce648e519d83f901f503d33112b74935168e60..98e6290c2ffd16966e8f31fed4849203680997d3 100644
--- a/cmd/helm/get_values.go
+++ b/cmd/helm/get_values.go
@@ -65,14 +65,14 @@ func newGetValuesCmd(client helm.Interface, out io.Writer) *cobra.Command {
 
 // getValues implements 'helm get values'
 func (g *getValuesCmd) run() error {
-	res, err := g.client.ReleaseContent(g.release, helm.ContentReleaseVersion(g.version))
+	res, err := g.client.ReleaseContent(g.release, g.version)
 	if err != nil {
 		return prettyError(err)
 	}
 
 	// If the user wants all values, compute the values and return.
 	if g.allValues {
-		cfg, err := chartutil.CoalesceValues(res.Release.Chart, res.Release.Config)
+		cfg, err := chartutil.CoalesceValues(res.Chart, res.Config)
 		if err != nil {
 			return err
 		}
@@ -84,6 +84,6 @@ func (g *getValuesCmd) run() error {
 		return nil
 	}
 
-	fmt.Fprintln(g.out, res.Release.Config.Raw)
+	fmt.Fprintln(g.out, res.Config.Raw)
 	return nil
 }
diff --git a/pkg/helm/client.go b/pkg/helm/client.go
index 05ed1c6fd90895215edf96a844998e207ab491c6..106976564f9d30e7902e6894919a035d6f922f07 100644
--- a/pkg/helm/client.go
+++ b/pkg/helm/client.go
@@ -27,9 +27,13 @@ import (
 	"google.golang.org/grpc/keepalive"
 
 	healthpb "google.golang.org/grpc/health/grpc_health_v1"
+
 	"k8s.io/helm/pkg/chartutil"
 	"k8s.io/helm/pkg/proto/hapi/chart"
+	"k8s.io/helm/pkg/proto/hapi/release"
 	rls "k8s.io/helm/pkg/proto/hapi/services"
+	"k8s.io/helm/pkg/storage"
+	"k8s.io/helm/pkg/storage/driver"
 )
 
 // maxMsgSize use 20MB as the default message size limit.
@@ -38,12 +42,14 @@ const maxMsgSize = 1024 * 1024 * 20
 
 // Client manages client side of the Helm-Tiller protocol.
 type Client struct {
-	opts options
+	opts  options
+	store *storage.Storage
 }
 
 // NewClient creates a new client.
 func NewClient(opts ...Option) *Client {
 	var c Client
+	c.store = storage.Init(driver.NewMemory())
 	// set some sane defaults
 	c.Option(ConnectTimeout(5))
 	return c.Option(opts...)
@@ -127,11 +133,11 @@ func (h *Client) DeleteRelease(rlsName string, opts ...DeleteOption) (*rls.Unins
 
 	if reqOpts.dryRun {
 		// In the dry run case, just see if the release exists
-		r, err := h.ReleaseContent(rlsName)
+		r, err := h.ReleaseContent(rlsName, 0)
 		if err != nil {
 			return &rls.UninstallReleaseResponse{}, err
 		}
-		return &rls.UninstallReleaseResponse{Release: r.Release}, nil
+		return &rls.UninstallReleaseResponse{Release: r}, nil
 	}
 
 	req := &reqOpts.uninstallReq
@@ -234,21 +240,11 @@ func (h *Client) ReleaseStatus(rlsName string, opts ...StatusOption) (*rls.GetRe
 }
 
 // ReleaseContent returns the configuration for a given release.
-func (h *Client) ReleaseContent(rlsName string, opts ...ContentOption) (*rls.GetReleaseContentResponse, error) {
-	reqOpts := h.opts
-	for _, opt := range opts {
-		opt(&reqOpts)
-	}
-	req := &reqOpts.contentReq
-	req.Name = rlsName
-	ctx := NewContext()
-
-	if reqOpts.before != nil {
-		if err := reqOpts.before(ctx, req); err != nil {
-			return nil, err
-		}
+func (c *Client) ReleaseContent(name string, version int32) (*release.Release, error) {
+	if version <= 0 {
+		return c.store.Last(name)
 	}
-	return h.content(ctx, req)
+	return c.store.Get(name, version)
 }
 
 // ReleaseHistory returns a release's revision history.
diff --git a/pkg/helm/fake.go b/pkg/helm/fake.go
index 4adcd8c87bdd0b352d06526a5a7eacf40de52d50..6dfa2833f32aa94a1757c7e48d3a038c02928fcb 100644
--- a/pkg/helm/fake.go
+++ b/pkg/helm/fake.go
@@ -106,12 +106,12 @@ func (c *FakeClient) UpdateRelease(rlsName string, chStr string, opts ...UpdateO
 // UpdateReleaseFromChart returns an UpdateReleaseResponse containing the updated release, if it exists
 func (c *FakeClient) UpdateReleaseFromChart(rlsName string, chart *chart.Chart, opts ...UpdateOption) (*rls.UpdateReleaseResponse, error) {
 	// Check to see if the release already exists.
-	rel, err := c.ReleaseContent(rlsName, nil)
+	rel, err := c.ReleaseContent(rlsName, 0)
 	if err != nil {
 		return nil, err
 	}
 
-	return &rls.UpdateReleaseResponse{Release: rel.Release}, nil
+	return &rls.UpdateReleaseResponse{Release: rel}, nil
 }
 
 // RollbackRelease returns nil, nil
@@ -134,15 +134,13 @@ func (c *FakeClient) ReleaseStatus(rlsName string, opts ...StatusOption) (*rls.G
 }
 
 // ReleaseContent returns the configuration for the matching release name in the fake release client.
-func (c *FakeClient) ReleaseContent(rlsName string, opts ...ContentOption) (resp *rls.GetReleaseContentResponse, err error) {
+func (c *FakeClient) ReleaseContent(rlsName string, version int32) (*release.Release, error) {
 	for _, rel := range c.Rels {
 		if rel.Name == rlsName {
-			return &rls.GetReleaseContentResponse{
-				Release: rel,
-			}, nil
+			return rel, nil
 		}
 	}
-	return resp, fmt.Errorf("No such release: %s", rlsName)
+	return nil, fmt.Errorf("No such release: %s", rlsName)
 }
 
 // ReleaseHistory returns a release's revision history.
diff --git a/pkg/helm/helm_test.go b/pkg/helm/helm_test.go
index 2b0436581d79bfb2489871860d4f0cd59033b9e7..5fae8214178855434cf08146e143d8920fe7cf2f 100644
--- a/pkg/helm/helm_test.go
+++ b/pkg/helm/helm_test.go
@@ -317,6 +317,7 @@ func TestReleaseStatus_VerifyOptions(t *testing.T) {
 
 // Verify each ContentOption is applied to a GetReleaseContentRequest correctly.
 func TestReleaseContent_VerifyOptions(t *testing.T) {
+	t.Skip("refactoring out")
 	// Options testdata
 	var releaseName = "test"
 	var revision = int32(2)
@@ -340,7 +341,7 @@ func TestReleaseContent_VerifyOptions(t *testing.T) {
 	})
 
 	client := NewClient(b4c)
-	if _, err := client.ReleaseContent(releaseName, ContentReleaseVersion(revision)); err != errSkip {
+	if _, err := client.ReleaseContent(releaseName, revision); err != errSkip {
 		t.Fatalf("did not expect error but got (%v)\n``", err)
 	}
 
diff --git a/pkg/helm/interface.go b/pkg/helm/interface.go
index 08aa7564cc31f9f7eaf21d62bc65ecfa0b7d2dec..33f56700601243369089c1d4a0cd2081bc401c1c 100644
--- a/pkg/helm/interface.go
+++ b/pkg/helm/interface.go
@@ -18,6 +18,7 @@ package helm
 
 import (
 	"k8s.io/helm/pkg/proto/hapi/chart"
+	"k8s.io/helm/pkg/proto/hapi/release"
 	rls "k8s.io/helm/pkg/proto/hapi/services"
 )
 
@@ -31,7 +32,7 @@ type Interface interface {
 	UpdateRelease(rlsName, chStr string, opts ...UpdateOption) (*rls.UpdateReleaseResponse, error)
 	UpdateReleaseFromChart(rlsName string, chart *chart.Chart, opts ...UpdateOption) (*rls.UpdateReleaseResponse, error)
 	RollbackRelease(rlsName string, opts ...RollbackOption) (*rls.RollbackReleaseResponse, error)
-	ReleaseContent(rlsName string, opts ...ContentOption) (*rls.GetReleaseContentResponse, error)
+	ReleaseContent(rlsName string, version int32) (*release.Release, error)
 	ReleaseHistory(rlsName string, opts ...HistoryOption) (*rls.GetHistoryResponse, error)
 	RunReleaseTest(rlsName string, opts ...ReleaseTestOption) (<-chan *rls.TestReleaseResponse, <-chan error)
 }