The following steps need to be followed:

I. Hash function
----------------

1. Change to the "plone_skins/custom" folder in the ZMI of your Plone site 

2. Select "External Method" from the add list. This will bring up the "Add
   External Method" form.

3. In the "Id" field of the form, enter "md5_hexdigest". In the "Function name" field, 
   enter "md5_hexdigest" and in the "Python module file" field enter "TemplateCacheManager.utils".
   Click the "Add" button and you will be returned to the management screen.


II. ETag function
-----------------

1. Select "Script (Python)" from the add list. This will bring up the 
   "Add Python Script" form.

2. In the "Id" field of the form, enter "getETag". Click the "Browse" button, 
   select and upload the file "getETag.py" in the "examples" directory.

3. Click the "Add" button and you will be returned to the management screen.


III. Template Cache Manager
---------------------------

1. Change to the portal root in the ZMI of your Plone site

2. Select "Template Cache Manager" from the add list. In the "Id" field of the form, 
   enter "TemplateCache" for example.

3. Click the "Add" button and you will be returned to the management screen.


IV. Associate a template
------------------------

1. Change to the "portal_skins" directory of your Plone site

2. Search for the template "document_view" by the "find" register 
   for example.

3. Open the template "document_view", click the "customize" button.

4. Click on the "cache" register and select for the "Cache this object using:"
   field the "TemplateCache" entry.

5. Click the "Save Changes" button and you will be returned to the management screen.


V. Configure caching_policy_manager
-----------------------------------

1. Change to the "caching_policy_manager" tool of your Plone site

2. Enter following values to the fields of the "Add Caching Policy" form

   Id:                   PolicyForDocumentView
   Predicate:            python: view == 'document_view'
   Mod. Time:            object/modified
   Last-Modified?:       True
   Max age (secs):       0
   Must-revalidate?:     True
   Proxy-revalidate?:    True
   Vary:                 Accept-Language,Accept-Encoding
   ETag:                 object/getETag
   Enable 304s?:         True

   and click the "Add" button and you will be returned to the 
   management screen.


VI. Testing
-----------

...

