Much better, thanks! LGTM with just a few formatting suggestions below. Make sure you've run gofmt on the file, because indentation looks inconsistent in places. https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms.go File state/apiserver/charms.go (right): https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms.go#newcode125 state/apiserver/charms.go:125: for _, file := range reader.File { gofmt again? https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms.go#newcode138 state/apiserver/charms.go:138: } else { Instead of else, you could just return in the if block above. https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms.go#newcode511 state/apiserver/charms.go:511: // processGet handles a charm file download GET request after authentication. s/download// https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms.go#newcode546 state/apiserver/charms.go:546: // save the corresponding zip archive to the given charmArchivePath. s/save/saves/ https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms.go#newcode580 state/apiserver/charms.go:580: if err = os.Rename(tempCharmArchive.Name(), charmArchivePath); err != nil { In this case I think you should defer os.Remove(tempCharmArchive.Name()) here. https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms_test.go File state/apiserver/charms_test.go (right): https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms_test.go#newcode265 state/apiserver/charms_test.go:265: func (s *charmsSuite) TestGetReturnsFileNotFound(c *gc.C) { s/TestGetReturnsFileNotFound/TestGetReturnsNotFoundWhenMissing/ ? https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms_test.go#newcode271 state/apiserver/charms_test.go:271: // Ensure a 404 is returned fo files not included in the charm. s/fo/for/ https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms_test.go#newcode271 state/apiserver/charms_test.go:271: // Ensure a 404 is returned fo files not included in the charm. Please, put a blank line before this one, for readability (I'll use "b" in all similar cases below). https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms_test.go#newcode283 state/apiserver/charms_test.go:283: func (s *charmsSuite) TestGetReturnsDirectoryForbidden(c *gc.C) { Similarly, s/TestGetReturnsDirectoryForbidden/TestGetReturnsForbiddenWithDirectory/ ? https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms_test.go#newcode289 state/apiserver/charms_test.go:289: // Ensure a 403 is returned if the requested file is a directory. b https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms_test.go#newcode302 state/apiserver/charms_test.go:302: // Ensure the file contents are properly returned. b https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms_test.go#newcode335 state/apiserver/charms_test.go:335: // Ensure charm files are properly listed. b https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms_test.go#newcode353 state/apiserver/charms_test.go:353: // Create and save the zip archive. b https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms_test.go#newcode367 state/apiserver/charms_test.go:367: // Ensure the cached contents are properly retrieved. b https://codereview.appspot.com/67750045/diff/20001/state/apiserver/charms_test.go#newcode441 state/apiserver/charms_test.go:441: ctype := resp.Header.Get("content-type") s/content-type/Content-Type/ https://codereview.appspot.com/67750045/