diff --git a/doc/get.go b/doc/get.go
index 977e3fb..611bfd0 100644
--- a/doc/get.go
+++ b/doc/get.go
@@ -12,10 +12,9 @@
 	"go/doc"
 	"net/http"
 	"strings"
-	"time"
 )
 
-func Get(client *http.Client, importPath string, etag string, updated time.Time) (*Package, error) {
+func Get(client *http.Client, importPath string, etag string) (*Package, error) {
 
 	const versionPrefix = PackageVersion + "-"
 
@@ -25,7 +24,7 @@
 		etag = ""
 	}
 
-	dir, err := gosrc.Get(client, importPath, etag, updated)
+	dir, err := gosrc.Get(client, importPath, etag)
 	if err != nil {
 		return nil, err
 	}
diff --git a/doc/print.go b/doc/print.go
index 6950c79..b199bbb 100644
--- a/doc/print.go
+++ b/doc/print.go
@@ -41,7 +41,8 @@
 	if *local {
 		gosrc.SetLocalDevMode(os.Getenv("GOPATH"))
 	}
-	pdoc, err = doc.Get(http.DefaultClient, path, *etag, pdoc.Updated)
+	pdoc, err = doc.Get(http.DefaultClient, path, *etag)
+	//}
 	if err != nil {
 		log.Fatal(err)
 	}
diff --git a/gddo-server/crawl.go b/gddo-server/crawl.go
index 23516c3..fb23fa7 100644
--- a/gddo-server/crawl.go
+++ b/gddo-server/crawl.go
@@ -53,11 +53,7 @@
 		err = gosrc.NotFoundError{Message: "testdata."}
 	} else {
 		var pdocNew *doc.Package
-		updated := time.Time{}
-		if pdoc != nil {
-			updated = pdoc.Updated
-		}
-		pdocNew, err = doc.Get(httpClient, importPath, etag, updated)
+		pdocNew, err = doc.Get(httpClient, importPath, etag)
 		message = append(message, "fetch:", int64(time.Since(start)/time.Millisecond))
 		if err == nil && pdocNew.Name == "" && !hasSubdirs {
 			for _, e := range pdocNew.Errors {
@@ -88,11 +84,6 @@
 		return pdoc, nil
 	case err == gosrc.ErrNotModified:
 		message = append(message, "touch")
-		// If the package is not modified, set the updated time
-		pdoc.Updated = time.Now().UTC()
-		if err := db.Put(pdoc, nextCrawl, false); err != nil {
-			log.Printf("ERROR db.Put(%q): %v", importPath, err)
-		}
 		if err := db.SetNextCrawlEtag(pdoc.ProjectRoot, pdoc.Etag, nextCrawl); err != nil {
 			log.Printf("ERROR db.SetNextCrawlEtag(%q): %v", importPath, err)
 		}
diff --git a/gddo-server/main.go b/gddo-server/main.go
index 77785a7..5cb3ed5 100644
--- a/gddo-server/main.go
+++ b/gddo-server/main.go
@@ -302,9 +302,7 @@
 				log.Printf("ERROR db.IncrementPopularScore(%s): %v", pdoc.ImportPath, err)
 			}
 		}
-		if gceLogger != nil {
-			gceLogger.LogEvent(resp, req, nil)
-		}
+		gceLogger.LogEvent(resp, req, nil)
 
 		template := "dir"
 		switch {
@@ -419,13 +417,13 @@
 
 func serveRefresh(resp http.ResponseWriter, req *http.Request) error {
 	importPath := req.Form.Get("path")
-	pdoc, pkgs, _, err := db.Get(importPath)
+	_, pkgs, _, err := db.Get(importPath)
 	if err != nil {
 		return err
 	}
 	c := make(chan error, 1)
 	go func() {
-		_, err := crawlDoc("rfrsh", importPath, pdoc, len(pkgs) > 0, time.Time{})
+		_, err := crawlDoc("rfrsh", importPath, nil, len(pkgs) > 0, time.Time{})
 		c <- err
 	}()
 	select {
diff --git a/gosrc/bitbucket.go b/gosrc/bitbucket.go
index 219e87d..437349c 100644
--- a/gosrc/bitbucket.go
+++ b/gosrc/bitbucket.go
@@ -32,7 +32,7 @@
 	} `json:"fork_of"`
 }
 
-func getBitbucketDir(client *http.Client, match map[string]string, savedEtag string, updated time.Time) (*Directory, error) {
+func getBitbucketDir(client *http.Client, match map[string]string, savedEtag string) (*Directory, error) {
 	var repo *bitbucketRepo
 	c := &httpClient{client: client}
 
diff --git a/gosrc/github.go b/gosrc/github.go
index 32e5e84..5ae969f 100644
--- a/gosrc/github.go
+++ b/gosrc/github.go
@@ -48,17 +48,9 @@
 	return &RemoteError{resp.Request.URL.Host, fmt.Errorf("%d: (%s)", resp.StatusCode, resp.Request.URL.String())}
 }
 
-func getGitHubDir(client *http.Client, match map[string]string, savedEtag string, updated time.Time) (*Directory, error) {
+func getGitHubDir(client *http.Client, match map[string]string, savedEtag string) (*Directory, error) {
 
-	c := &httpClient{
-		client: client,
-		errFn:  gitHubError,
-	}
-	if !updated.IsZero() {
-		// http.TimeFormat is used since GitHub API will count against our rate limit
-		// if we use any timezone other than "GMT".
-		c.header = http.Header{"If-Modified-Since": {updated.Format(http.TimeFormat)}}
-	}
+	c := &httpClient{client: client, errFn: gitHubError}
 
 	type refJSON struct {
 		Object struct {
@@ -73,11 +65,6 @@
 
 	resp, err := c.getJSON(expand("https://api.github.com/repos/{owner}/{repo}/git/refs", match), &refs)
 	if err != nil {
-		if resp != nil {
-			if last, err := time.Parse(http.TimeFormat, resp.Header.Get("Last-Modified")); err == nil && last.Before(updated) {
-				return nil, ErrNotModified
-			}
-		}
 		return nil, err
 	}
 
@@ -297,14 +284,8 @@
 	}, nil
 }
 
-func getGistDir(client *http.Client, match map[string]string, savedEtag string, updated time.Time) (*Directory, error) {
-	c := &httpClient{
-		client: client,
-		errFn:  gitHubError,
-	}
-	if !updated.IsZero() {
-		c.header = http.Header{"If-Modified-Since": {updated.Format(http.TimeFormat)}}
-	}
+func getGistDir(client *http.Client, match map[string]string, savedEtag string) (*Directory, error) {
+	c := &httpClient{client: client, errFn: gitHubError}
 
 	var gist struct {
 		Files map[string]struct {
diff --git a/gosrc/google.go b/gosrc/google.go
index d52d403..1a47b59 100644
--- a/gosrc/google.go
+++ b/gosrc/google.go
@@ -12,7 +12,6 @@
 	"net/url"
 	"regexp"
 	"strings"
-	"time"
 )
 
 func init() {
@@ -49,7 +48,7 @@
 	return c.err(resp)
 }
 
-func getGoogleDir(client *http.Client, match map[string]string, savedEtag string, updated time.Time) (*Directory, error) {
+func getGoogleDir(client *http.Client, match map[string]string, savedEtag string) (*Directory, error) {
 	setupGoogleMatch(match)
 	c := &httpClient{client: client}
 
diff --git a/gosrc/gosrc.go b/gosrc/gosrc.go
index 7953ea8..1505737 100644
--- a/gosrc/gosrc.go
+++ b/gosrc/gosrc.go
@@ -16,7 +16,6 @@
 	"path"
 	"regexp"
 	"strings"
-	"time"
 )
 
 // File represents a file.
@@ -115,7 +114,7 @@
 type service struct {
 	pattern         *regexp.Regexp
 	prefix          string
-	get             func(*http.Client, map[string]string, string, time.Time) (*Directory, error)
+	get             func(*http.Client, map[string]string, string) (*Directory, error)
 	getPresentation func(*http.Client, map[string]string) (*Presentation, error)
 	getProject      func(*http.Client, map[string]string) (*Project, error)
 }
@@ -305,7 +304,7 @@
 // getVCSDirFn is called by getDynamic to fetch source using VCS commands. The
 // default value here does nothing. If the code is not built for App Engine,
 // then getvCSDirFn is set getVCSDir, the function that actually does the work.
-var getVCSDirFn = func(client *http.Client, m map[string]string, etag string, updated time.Time) (*Directory, error) {
+var getVCSDirFn = func(client *http.Client, m map[string]string, etag string) (*Directory, error) {
 	return nil, errNoMatch
 }
 
@@ -341,7 +340,7 @@
 	dirName := importPath[len(im.projectRoot):]
 
 	resolvedPath := repo + dirName
-	dir, err := getStatic(client, resolvedPath, etag, time.Time{})
+	dir, err := getStatic(client, resolvedPath, etag)
 	if err == errNoMatch {
 		resolvedPath = repo + "." + im.vcs + dirName
 		match := map[string]string{
@@ -352,7 +351,7 @@
 			"scheme":     proto,
 			"vcs":        im.vcs,
 		}
-		dir, err = getVCSDirFn(client, match, etag, time.Time{})
+		dir, err = getVCSDirFn(client, match, etag)
 	}
 	if err != nil || dir == nil {
 		return nil, err
@@ -407,7 +406,7 @@
 
 // getStatic gets a diretory from a statically known service. getStatic
 // returns errNoMatch if the import path is not recognized.
-func getStatic(client *http.Client, importPath, etag string, updated time.Time) (*Directory, error) {
+func getStatic(client *http.Client, importPath, etag string) (*Directory, error) {
 	for _, s := range services {
 		if s.get == nil {
 			continue
@@ -417,7 +416,7 @@
 			return nil, err
 		}
 		if match != nil {
-			dir, err := s.get(client, match, etag, updated)
+			dir, err := s.get(client, match, etag)
 			if dir != nil {
 				dir.ImportPath = importPath
 				dir.ResolvedPath = importPath
@@ -428,14 +427,14 @@
 	return nil, errNoMatch
 }
 
-func Get(client *http.Client, importPath string, etag string, updated time.Time) (dir *Directory, err error) {
+func Get(client *http.Client, importPath string, etag string) (dir *Directory, err error) {
 	switch {
 	case localPath != "":
 		dir, err = getLocal(importPath)
 	case IsGoRepoPath(importPath):
 		dir, err = getStandardDir(client, importPath, etag)
 	case IsValidRemotePath(importPath):
-		dir, err = getStatic(client, importPath, etag, updated)
+		dir, err = getStatic(client, importPath, etag)
 		if err == errNoMatch {
 			dir, err = getDynamic(client, importPath, etag)
 		}
diff --git a/gosrc/launchpad.go b/gosrc/launchpad.go
index fe3586b..5cda037 100644
--- a/gosrc/launchpad.go
+++ b/gosrc/launchpad.go
@@ -18,7 +18,6 @@
 	"regexp"
 	"sort"
 	"strings"
-	"time"
 )
 
 func init() {
@@ -42,7 +41,7 @@
 	copy(p[j*md5.Size:], temp[:])
 }
 
-func getLaunchpadDir(client *http.Client, match map[string]string, savedEtag string, updated time.Time) (*Directory, error) {
+func getLaunchpadDir(client *http.Client, match map[string]string, savedEtag string) (*Directory, error) {
 	c := &httpClient{client: client}
 
 	if match["project"] != "" && match["series"] != "" {
diff --git a/gosrc/vcs.go b/gosrc/vcs.go
index e2750f0..6fbb545 100644
--- a/gosrc/vcs.go
+++ b/gosrc/vcs.go
@@ -245,7 +245,7 @@
 	return "", NotFoundError{Message: "Last changed revision not found"}
 }
 
-func getVCSDir(client *http.Client, match map[string]string, etagSaved string, updated time.Time) (*Directory, error) {
+func getVCSDir(client *http.Client, match map[string]string, etagSaved string) (*Directory, error) {
 	cmd := vcsCmds[match["vcs"]]
 	if cmd == nil {
 		return nil, NotFoundError{Message: expand("VCS not supported: {vcs}", match)}
