diff --git a/pages/guides/sites.ad b/pages/guides/sites.ad
index 8b44bc6..70b5ebe 100644
--- a/pages/guides/sites.ad
+++ b/pages/guides/sites.ad
@@ -19,85 +19,80 @@
 :imagesdir: ../images/
 
 Podlings need to build a community in Apache in order to be accepted
-as part of the Apache Software Foundation. One of the tools used to build
-a community is the web site.
+as part of the Apache Software Foundation. The podling website is one of the tools you use to build
+that community.
 
 == Podling Website Requirements
 
 Podlings are, by definition, not yet fully accepted as part of the
 Apache Software Foundation. Therefore, they are subject to additional
-constraints on their websites. These policies MUST be adhered to
-before Graduation is considered unless prior approval is obtained from
-the Incubator PMC.
+constraints on their websites. You MUST adhere to these policies before we can consider the podling for
+Graduation, unless you obtain prior approval from the Incubator PMC.
 
 - The published site for each podling must conform to the guidelines in link:/guides/branding.html[Podling Branding/Publicity].
-- Podlings should review link:https://www.apache.org/foundation/marks/linking[Corporate Recognition Best Practices], link:https://www.apache.org/foundation/marks/resources[Apache trademark information], and must aim to be in compliance with link:https://www.apache.org/foundation/marks/pmcs[Apache Project Website Branding Policy]
-- The sources for every podling site sources should be maintained in the podling's site SVN or git directory
+- Podlings should review link:https://www.apache.org/foundation/marks/linking[Corporate Recognition Best Practices], link:https://www.apache.org/foundation/marks/resources[Apache trademark information], and must aim to comply with the link:https://www.apache.org/foundation/marks/pmcs[Apache Project Website Branding Policy].
+- You should maintain the sources for the podling website in the podling's site SVN or Git directory.
 - The published site for each podling should conform to this URL space: #http://podlingname.incubator.apache.org/# or #http://podlingname.apache.org/#
-- Every podling should maintain an incubation status file under: #http://incubator.apache.org/projects/podlingname.html# (this is generated)
+- Every podling should maintain an incubation status file under: #http://incubator.apache.org/projects/podlingname.html# (this is generated).
 
 == Creating the Podling Website
-=== Creating A Good Podling Site
+=== Creating a Good Podling Site
 
 Apache Project Web Sites typically include several standard pages.
-Each page is formatted with a navigation bar on the left and a project
+Each page has a navigation bar on the left and a project
 standard header that includes the Incubator graphic.
 
-The Web Site can be established during incubation, and migrated
-after incubation to a permanent place in the TLP home.
+You can establish the website during incubation, and migrate it
+after incubation to a permanent place in the TLP (Top Level Project) home.
 
 - Project Home Page: the primary entry point to the site; contains project description, news, invitation to join the project.
-- License Page: link to the Apache License 2.0
-- Downloads: many projects in incubation will release code, and this page describes them and has links to the download pages that redirect to Apache Mirror sites.
-- Documentation: this page describes the project documentation, including javadoc for Java projects; guides, tutorials, and links to external documentation.
+- License Page: link to the Apache License 2.0.
+- Downloads: many projects in incubation release code, and this page describes the releases and has links to the download pages that redirect to Apache Mirror sites.
+- Documentation: this page presents the project documentation, including javadoc for Java projects, guides and tutorials, and links to external documentation.
 - Committers: a list of current committers on the project.
-- Mailing Lists: there are several mailing lists that the community might be interested in, and this page contains mailto: links that allow easy subscription (and unsubscription) to any of them.
-- FAQ: frequently asked questions are answered here.
-- Source Code: links to the browsable source repository and git or svn commands to check out the sources.
-- Issue Tracking: links to the JIRA or other issue tracking tool, possibly including frequently used filters for issue lists.
+- Mailing Lists: there are several mailing lists that the site visitors might be interested in, and this page contains `mailto:` links that allow easy subscription (and unsubscription) to any of them.
+- FAQ: answers to frequently asked questions.
+- Source Code: links to the browsable source repository and git or svn commands to check out the source code.
+- Issue Tracking: links to the Jira or other issue tracking tool, possibly including frequently-used filters for issue lists.
 - Dependencies: other projects that this project depends on.
-- favicon: the project's icon in a format suitable for a browser's address bar. If absent, an Apache Feather will be displayed.
+- favicon: the project's icon in a format suitable for a browser's address bar. If the favicon is absent, an Apache Feather displays.
 
-=== Web Site Generation Tool
+=== Website Generation Tool
 
-The choice of tool used to generate the web site is left to
-the podling. If you already have a tool that you are comfortable
-with, you can continue to use it. If you do not, consider using
+The podling can choose the tool it wishes to use to generate the website. The Infrastructure team provides link:https://infra.apache.org/website-guidelines.html[guidance] concerning tools that work best with Apache's infrastructure, and what podlings and projects must avoid. If you already have a tool that you are comfortable
+with, you can probably continue to use it. If you do not, consider using
 the Jekyll based link:https://github.com/apache/apache-website-template[Apache website template].
 
-Regardless of which tool you use, the web site should be maintained
-in the svn/git repository, and include the site generation tool.
-This simplifies the process of site generation and enables changes
-to the site to be made by any committer. The generated site should also
-be checked into svn/git.
+Regardless of which tool you use, maintain the web site in the podling's svn/git repository, and include instructions for using the site generation tool.
+This simplifies the process of site generation and lets any podling committer make changes
+to the siter. Check the generated site into svn/git.
 
 === Publishing Your Website
 
-Managing a podling's website is the same as a top-level project.
-Review the link:http://www.apache.org/dev/project-site.html[Infra Documentation on Project Websites]
+Managing a podling's website is the same as for a TLP (Top-Level Project).
+Review the link:https://infra.apache.org/project-site.html[Infra Documentation on Project Websites].
 
-=== Using A Wiki To Create Documentation
+=== Using a Wiki to Create Documentation
 
-Podlings may use a wiki to create documentation (including the website) providing that follow the
-link:http://cwiki.apache.org/[guidelines].
+Podlings may use a wiki to create documentation (including the website), providing that they follow the link:http://cwiki.apache.org/[guidelines].
 
 === Web Site Transition
 
-Projects may arrive with existing web sites outside Apache. Contributing as much
-documentation as possible to the project from these sites is strongly encouraged.
-Offshore sites related to projects are fine but official web sites for Apache
-projects should be hosted by Apache.
+Projects may arrive with existing web sites that they host outside Apache. We strongly encourage contributing as much
+documentation as possible to the project from these sites.
+Offshore sites related to projects are fine, but you must host official websites for Apache
+projects with Apache (unless you obtain an explicit waiver).
 
-Some projects elect to maintain previous releases outside Apache. In this case, the existing site
-is typically retained as a hub for this maintenance work. Otherwise, sites should link
+Some projects elect to maintain previous releases outside Apache. In this case, they retain existing site
+is typically as a hub for this maintenance work. Otherwise, sites should link
 or redirect to the official Apache site.
 
 Apache may accept donations of domains related to projects moving here.
 Infrastructure will then arrange for renewal of the domains and redirection
-of traffic the official site. Ask infrastructure for more details.
+of traffic to the official site. link:https://infra.apache.org/contact.html[Contact infrastructure] for more details.
 
 Apache needs to deal with all commercial entities equitably. Linking to
-useful information on commercial sites is fine but unfair discrimination between
+useful information on commercial sites is fine, but unfair discrimination between
 commercial sites is not. Most Apache projects find it better to simply link only
 to relevant articles on commercial sites rather than having to vet every request
 for links to commercial activity.
