diff --git a/gae/config.py b/gae/config.py
index 5f55e2f..e241262 100644
--- a/gae/config.py
+++ b/gae/config.py
@@ -8,7 +8,9 @@
 
 DEFAULT = {
   'bucket': '/gs/chrome-devtools-frontend/%s',
-  'max_age': 7 * 24 * 60,  # in seconds
+  'hash_path': 'hash/%s',
+  'max_age': 7 * 24 * 60 * 60,  # in seconds
+  'meta_path': 'meta/%s',
   'revision_path': 'revs/%s',
   'version_path': 'vers/%s',
   'zip_path': 'zips/%s.zip',
@@ -21,6 +23,12 @@
   def get_full_path(self, path):
     return self.conf['bucket'] % path
 
+  def get_hash_path(self, hash):
+    return self.conf['hash_path'] % hash
+
+  def get_meta_path(self, rev):
+    return self.conf['meta_path'] % rev
+
   def get_max_age(self):
     return self.conf['max_age']
 
diff --git a/gae/main.py b/gae/main.py
index e9b427c..53263da 100644
--- a/gae/main.py
+++ b/gae/main.py
@@ -23,30 +23,68 @@
     self.response.write(str(current_config))
 
 class Server(webapp2.RequestHandler):
-  def get(self, tag_type, tag, path):
-    cache_key_name = '/res/%s/%s/%s' % (tag_type, tag, path)
-    content = cache.get_content(cache_key_name)
-    helper = config.ConfigHelper(current_config)
+  def get_hash_cache_key(self, rev, path):
+    return '/hashes/%s/%s' % (rev, path)
 
-    if not content:
-      if tag_type == 'rev':
-        meta_file_name = helper.get_revision_path(tag)
-      elif tag_type =='ver':
-        meta_file_name = helper.get_version_path(tag)
-      else:
-        self.abort(404)
+  def get_file_hash(self, helper, rev, path):
+    file_hash = cache.get_content(self.get_hash_cache_key(rev, path))
 
+    if not file_hash:
+      meta_cache_key = '/meta-parsed/%s' % rev
+      if cache.get_content(meta_cache_key):
+        return None
+
+      meta_file_name = helper.get_meta_path(rev)
       meta_content = file_reader.read(helper, meta_file_name)
-      if meta_content:
-        zip_file_name = meta_content.strip(' \t\n')
-      else:
-        self.abort(404)
+      if not meta_content:
+        return None
 
-      content = zip_proxy.read(helper, zip_file_name, path)
+      for line in meta_content.split('\n'):
+        hash_and_path = line.split(':')
+        if len(hash_and_path) == 2:
+          (line_hash, line_path) = hash_and_path
+          cache.set_content(self.get_hash_cache_key(rev, line_path), line_hash)
+          if line_path == path:
+            file_hash = line_hash
+      cache.set_content(meta_cache_key, 'parsed')
+
+    return file_hash
+
+  def get(self, tag_type, tag, path):
+    helper = config.ConfigHelper(current_config)
+    content = None
+
+    if tag_type == 'file':
+      file_hash = self.get_file_hash(helper, tag, path)
+      if not file_hash:
+        self.abort(404)
+      content = file_reader.read(helper, helper.get_hash_path(file_hash))
       if not content:
         self.abort(404)
       content = content_processor.process(path, content)
-      cache.set_content(cache_key_name, content)
+
+    else:
+      cache_key_name = '/res/%s/%s/%s' % (tag_type, tag, path)
+      content = cache.get_content(cache_key_name)
+      if not content:
+        if tag_type == 'rev':
+          meta_file_name = helper.get_revision_path(tag)
+        elif tag_type =='ver':
+          meta_file_name = helper.get_version_path(tag)
+        else:
+          self.abort(404)
+
+        meta_content = file_reader.read(helper, meta_file_name)
+        if meta_content:
+          zip_file_name = meta_content.strip(' \t\n')
+        else:
+          self.abort(404)
+
+        content = zip_proxy.read(helper, zip_file_name, path)
+        if not content:
+          self.abort(404)
+        content = content_processor.process(path, content)
+        cache.set_content(cache_key_name, content)
 
     self.response.headers['Content-Type'] = content_type.from_path(path)
     self.response.headers['Access-Control-Allow-Origin'] = '*'
diff --git a/gce/uploader_iteration.sh b/gce/uploader_iteration.sh
index 9003ea0..ce2e083 100755
--- a/gce/uploader_iteration.sh
+++ b/gce/uploader_iteration.sh
@@ -62,7 +62,9 @@
     fi
     ZIPS_DIR="$LOCAL_STORAGE_DIR/zips"
     REVS_DIR="$LOCAL_STORAGE_DIR/revs"
-    mkdir -p $ZIPS_DIR $REVS_DIR
+    META_DIR="$LOCAL_STORAGE_DIR/meta"
+    HASH_DIR="$LOCAL_STORAGE_DIR/hash"
+    mkdir -p $ZIPS_DIR $REVS_DIR $META_DIR $HASH_DIR
 
     if echo "$BLINK_REVISIONS_BLACKLIST" | grep -w $REVISION; then
         echo "Revision $REVISION is in the blacklist, skipping over"
@@ -129,6 +131,15 @@
     find -type f -not -name $MANIFEST_FILE_NAME -print | sed -e 's#^\./##' >> $MANIFEST_FILE_NAME
 
     zip -9r $ZIP_FILE * || exit $EXIT_ZIP_FRONTEND
+
+    # Copy each file to hash/<sha1>, write <sha1>:<path> to meta file.
+    META_FILE_NAME="$META_DIR/@$REVISION"
+    for FILE_NAME in $(find -type f); do
+        FILE_SHA1=$(sha1sum $FILE_NAME | awk '{print $1}')
+        cp $FILE_NAME "$HASH_DIR/$FILE_SHA1"
+        echo "$FILE_SHA1:${FILE_NAME##./}" >> $META_FILE_NAME
+    done;
+
     popd
 
     ZIP_SHA1=$(sha1sum $ZIP_FILE | awk '{print $1}')
