diff --git a/res/assets/templates-sdk/body_tag.cs b/res/assets/templates-sdk/body_tag.cs
index 335eec5..1649ffa 100644
--- a/res/assets/templates-sdk/body_tag.cs
+++ b/res/assets/templates-sdk/body_tag.cs
@@ -1 +1,17 @@
-<body>
+<body class="gc-documentation <?cs
+  if:(reference.gms || reference.gcm)
+    ?>google<?cs
+  /if ?><?cs
+  if:(guide||develop||training||reference||tools||sdk)
+    ?>develop<?cs
+    if:reference
+      ?> reference api apilevel-<?cs var:class.since ?><?cs var:package.since ?><?cs
+    /if ?><?cs
+  elif:design
+    ?>design<?cs
+  elif:distribute
+    ?>distribute<?cs
+  /if ?>"><?cs
+if:dac && !page.not-api
+  ?><div id="doc-api-level" class="<?cs var:class.since ?><?cs var:package.since ?>" style="display:none"></div><?cs
+/if ?>
diff --git a/res/assets/templates-sdk/class.cs b/res/assets/templates-sdk/class.cs
index 5fb2a9d..d014edd 100644
--- a/res/assets/templates-sdk/class.cs
+++ b/res/assets/templates-sdk/class.cs
@@ -13,9 +13,10 @@
 ?><?cs def:write_method_summary(methods, included) ?>
 <?cs set:count = #1 ?>
 <?cs each:method = methods ?>
-  <tr <?cs
-      if:method.since
-        ?>data-version-added="<?cs var:method.since ?>"<?cs
+  <?cs # The apilevel-N class MUST BE LAST in the sequence of class names ?>
+  <tr class="api apilevel-<?cs var:method.since ?>"<?cs
+      if:method.since ?>
+      data-version-added="<?cs var:method.since ?>"<?cs
       /if ?><?cs
       if:method.deprecatedsince
         ?> data-version-deprecated="<?cs var:method.deprecatedsince ?>"<?cs
@@ -50,9 +51,9 @@
 ?><?cs def:write_field_summary(fields, included) ?>
 <?cs set:count = #1 ?>
 <?cs each:field=fields ?>
-  <tr <?cs
-      if:field.since
-        ?>data-version-added="<?cs var:field.since ?>"<?cs
+  <tr class="api apilevel-<?cs var:field.since ?>"<?cs
+      if:field.since ?>
+      data-version-added="<?cs var:field.since ?>"<?cs
       /if ?><?cs
       if:field.deprecatedsince
         ?> data-version-deprecated="<?cs var:field.deprecatedsince ?>"<?cs
@@ -77,9 +78,9 @@
 ?><?cs def:write_constant_summary(fields, included) ?>
 <?cs set:count = #1 ?>
     <?cs each:field=fields ?>
-    <tr <?cs
-        if:field.since
-          ?>data-version-added="<?cs var:field.since ?>"<?cs
+    <tr class="api apilevel-<?cs var:field.since ?>"<?cs
+        if:field.since ?>
+        data-version-added="<?cs var:field.since ?>"<?cs
         /if ?><?cs
         if:field.deprecatedsince
           ?> data-version-deprecated="<?cs var:field.deprecatedsince ?>"<?cs
@@ -100,9 +101,9 @@
 ?><?cs def:write_attr_summary(attrs, included) ?>
 <?cs set:count = #1 ?>
     <?cs each:attr=attrs ?>
-    <tr <?cs
-        if:attr.since
-          ?>data-version-added="<?cs var:attr.since ?>"<?cs
+    <tr class="api apilevel-<?cs var:attr.since ?>"<?cs
+        if:attr.since ?>
+        data-version-added="<?cs var:attr.since ?>"<?cs
         /if ?><?cs
         if:attr.deprecatedsince
           ?> data-version-deprecated="<?cs var:attr.deprecatedsince ?>"<?cs
@@ -123,9 +124,9 @@
 ?><?cs def:write_inners_summary(classes) ?>
 <?cs set:count = #1 ?>
   <?cs each:cl=class.inners ?>
-    <tr <?cs
-        if:cl.since
-          ?>data-version-added="<?cs var:cl.since ?>"<?cs
+    <tr class="api apilevel-<?cs var:cl.since ?>"<?cs
+        if:cl.since ?>
+        data-version-added="<?cs var:cl.since ?>"<?cs
         /if ?><?cs
         if:cl.deprecatedsince
           ?> data-version-deprecated="<?cs var:cl.deprecatedsince ?>"<?cs
@@ -156,14 +157,18 @@
 ?>
 <?cs def:write_field_details(fields) ?>
 <?cs each:field=fields ?>
-<div <?cs
-     if:field.since
-       ?>data-version-added="<?cs var:field.since ?>"<?cs
+<?cs # this next line must be exactly like this to be parsed by eclipse ?>
+<?cs # the A tag in the next line must remain where it is, so that Eclipse can parse the docs ?>
+<A NAME="<?cs var:field.anchor ?>"></A>
+<?cs # The apilevel-N class MUST BE LAST in the sequence of class names ?>
+<div class="api apilevel-<?cs var:field.since ?>"<?cs
+     if:field.since ?>
+     data-version-added="<?cs var:field.since ?>"<?cs
      /if ?><?cs
      if:field.deprecatedsince
        ?> data-version-deprecated="<?cs var:field.deprecatedsince ?>"<?cs
      /if ?> >
-    <h3 class="api-name" id="<?cs var:field.anchor ?>"><?cs var:field.name ?></h3>
+    <h3 class="api-name"><?cs var:field.name ?></h3>
     <div class="api-level">
       <?cs call:since_tags(field) ?>
       <?cs call:federated_refs(field) ?>
@@ -191,14 +196,17 @@
 
 <?cs def:write_method_details(methods) ?>
 <?cs each:method=methods ?>
-<div <?cs
-     if:method.since
-       ?>data-version-added="<?cs var:method.since ?>"<?cs
+<?cs # the A tag in the next line must remain where it is, so that Eclipse can parse the docs ?>
+<A NAME="<?cs var:method.anchor ?>"></A>
+<?cs # The apilevel-N class MUST BE LAST in the sequence of class names ?>
+<div class="api apilevel-<?cs var:method.since ?>"<?cs
+     if:method.since ?>
+     data-version-added="<?cs var:method.since ?>"<?cs
      /if ?><?cs
      if:method.deprecatedsince
        ?> data-version-deprecated="<?cs var:method.deprecatedsince ?>"<?cs
      /if ?>>
-    <h3 class="api-name" id="<?cs var:method.anchor ?>"><?cs var:method.name ?></h3>
+    <h3 class="api-name"><?cs var:method.name ?></h3>
     <div class="api-level">
       <div><?cs call:since_tags(method) ?></div>
       <?cs call:federated_refs(method) ?>
@@ -218,7 +226,9 @@
 
 <?cs def:write_attr_details(attrs) ?>
 <?cs each:attr=attrs ?>
-<h3 class="api-name" id="<?cs var:attr.anchor ?>"><?cs var:attr.name ?></h3>
+<?cs # the A tag in the next line must remain where it is, so that Eclipse can parse the docs ?>
+<A NAME="<?cs var:attr.anchor ?>"></A>
+<h3 class="api-name"><?cs var:attr.name ?></h3>
 <?cs call:show_annotations_list(attr) ?>
 <?cs call:description(attr) ?>
 <?cs if:subcount(attr.methods) ?>
@@ -257,9 +267,9 @@
 <?cs # Includes api-info-block DIV at top of page. Standard Devsite uses right nav. ?>
 <?cs if:dac ?><?cs include:"page_info.cs" ?><?cs /if ?>
 <?cs # This DIV spans the entire document to provide scope for some scripts ?>
-<div id="jd-content" <?cs
-     if:class.since
-       ?>data-version-added="<?cs var:class.since ?>"<?cs
+<div class="api apilevel-<?cs var:class.since ?>" id="jd-content"<?cs
+     if:class.since ?>
+     data-version-added="<?cs var:class.since ?>"<?cs
      /if ?><?cs
      if:class.deprecatedsince
        ?> data-version-deprecated="<?cs var:class.deprecatedsince ?>"<?cs
@@ -413,9 +423,9 @@
 <tr><th><h3>Inherited XML attributes</h3></th></tr>
 <?cs each:cl=class.inherited ?>
 <?cs if:subcount(cl.attrs) ?>
-<tr <?cs
-    if:cl.since
-      ?>data-version-added="<?cs var:cl.since ?>"<?cs
+<tr class="api apilevel-<?cs var:cl.since ?>"<?cs
+    if:cl.since ?>
+    data-version-added="<?cs var:cl.since ?>"<?cs
     /if ?><?cs
     if:cl.deprecatedsince
       ?> data-version-deprecated="<?cs var:cl.deprecatedsince ?>"<?cs
@@ -442,9 +452,9 @@
   <tr><th colspan="2"><h3>Enum values</h3></th></tr>
 <?cs set:count = #1 ?>
   <?cs each:field=class.enumConstants ?>
-  <tr <?cs
-      if:field.since
-        ?>data-version-added="<?cs var:field.since ?>"<?cs
+  <tr class="api apilevel-<?cs var:field.since ?>"<?cs
+      if:field.since ?>
+      data-version-added="<?cs var:field.since ?>"<?cs
       /if ?><?cs
       if:field.deprecatedsince
         ?> data-version-deprecated="<?cs var:field.deprecatedsince ?>"<?cs
@@ -477,9 +487,9 @@
 <tr><th><h3>Inherited constants</h3></th></tr>
 <?cs each:cl=class.inherited ?>
 <?cs if:subcount(cl.constants) ?>
-  <tr <?cs
-      if:cl.since
-        ?>data-version-added="<?cs var:cl.since ?>"<?cs
+  <tr class="api apilevel-<?cs var:cl.since ?>"<?cs
+      if:cl.since ?>
+      data-version-added="<?cs var:cl.since ?>"<?cs
       /if ?><?cs
       if:cl.deprecatedsince
         ?> data-version-deprecated="<?cs var:cl.deprecatedsince ?>"<?cs
@@ -516,9 +526,9 @@
 <tr><th><h3>Inherited fields</h3></th></tr>
 <?cs each:cl=class.inherited ?>
 <?cs if:subcount(cl.fields) ?>
-  <tr <?cs
-      if:cl.since
-        ?>data-version-added="<?cs var:cl.since ?>"<?cs
+  <tr class="api apilevel-<?cs var:cl.since ?>"<?cs
+      if:cl.since ?>
+      data-version-added="<?cs var:cl.since ?>"<?cs
       /if ?><?cs
       if:cl.deprecatedsince
         ?> data-version-deprecated="<?cs var:cl.deprecatedsince ?>"<?cs
@@ -582,9 +592,9 @@
 <tr><th><h3>Inherited methods</h3></th></tr>
 <?cs each:cl=class.inherited ?>
 <?cs if:subcount(cl.methods) ?>
-<tr <?cs
-    if:cl.since
-      ?>data-version-added="<?cs var:cl.since ?>"<?cs
+<tr class="api apilevel-<?cs var:cl.since ?>"<?cs
+    if:cl.since ?>
+    data-version-added="<?cs var:cl.since ?>"<?cs
     /if ?><?cs
     if:cl.deprecatedsince
       ?> data-version-deprecated="<?cs var:cl.deprecatedsince ?>"<?cs
@@ -685,6 +695,31 @@
 
 </div><!-- end jd-content -->
 
+<?cs if:devsite ?>
+
+<div class="data-reference-resources-wrapper">
+  <?cs if:subcount(class.package) ?>
+  <ul data-reference-resources>
+    <?cs call:list("Annotations", class.package.annotations) ?>
+    <?cs call:list("Interfaces", class.package.interfaces) ?>
+    <?cs call:list("Classes", class.package.classes) ?>
+    <?cs call:list("Enums", class.package.enums) ?>
+    <?cs call:list("Exceptions", class.package.exceptions) ?>
+    <?cs call:list("Errors", class.package.errors) ?>
+  </ul>
+  <?cs elif:subcount(package) ?>
+  <ul data-reference-resources>
+    <?cs call:class_link_list("Annotations", package.annotations) ?>
+    <?cs call:class_link_list("Interfaces", package.interfaces) ?>
+    <?cs call:class_link_list("Classes", package.classes) ?>
+    <?cs call:class_link_list("Enums", package.enums) ?>
+    <?cs call:class_link_list("Exceptions", package.exceptions) ?>
+    <?cs call:class_link_list("Errors", package.errors) ?>
+  </ul>
+  <?cs /if ?>
+</div>
+<?cs /if ?>
+
 <?cs if:!devsite ?>
 <?cs include:"footer.cs" ?>
 <?cs include:"trailer.cs" ?>
diff --git a/res/assets/templates-sdk/classes.cs b/res/assets/templates-sdk/classes.cs
index f10eb71..bc6b98d 100644
--- a/res/assets/templates-sdk/classes.cs
+++ b/res/assets/templates-sdk/classes.cs
@@ -11,15 +11,22 @@
 <p>These are the API classes. See all
 <a href="packages.html">API packages</a>.</p>
 
+<div class="jd-letterlist"><?cs
+  each:letter=docs.classes ?>
+    <a href="#letter_<?cs name:letter ?>"><?cs
+      name:letter ?></a>&nbsp;&nbsp;<?cs
+  /each?>
+</div>
+
 <?cs each:letter=docs.classes ?>
 <?cs set:count = #1 ?>
 <h2 id="letter_<?cs name:letter ?>"><?cs name:letter ?></h2>
 <table>
     <?cs set:cur_row = #0 ?>
     <?cs each:cl = letter ?>
-        <tr <?cs
-            if:cl.since
-              ?>data-version-added="<?cs var:cl.since ?>"<?cs
+        <tr class="api apilevel-<?cs var:cl.since ?>"<?cs
+            if:cl.since ?>
+            data-version-added="<?cs var:cl.since ?>"<?cs
             /if ?><?cs
             if:cl.deprecatedsince
               ?> data-version-deprecated="<?cs var:cl.deprecatedsince ?>"<?cs
diff --git a/res/assets/templates-sdk/head_tag.cs b/res/assets/templates-sdk/head_tag.cs
index 374218b..bb698b9 100644
--- a/res/assets/templates-sdk/head_tag.cs
+++ b/res/assets/templates-sdk/head_tag.cs
@@ -20,7 +20,8 @@
     if:library.root ?>
       {% setvar book_path %}/reference/<?cs var:library.root ?>/_book.yaml{% endsetvar %}<?cs
     /if ?>
-    {% include "_shared/_reference-head-tags.html" %}<?cs
+    {% include "_shared/_reference-head-tags.html" %}
+    <meta name="body_class" value="api apilevel-<?cs var:class.since ?><?cs var:package.since ?>" /><?cs
   else ?><?cs # If NOT dac... ?>
     <meta name="hide_page_heading" value="true" />
     <meta name="book_path" value="<?cs
diff --git a/res/assets/templates-sdk/macros_override.cs b/res/assets/templates-sdk/macros_override.cs
index 8ef81cf..b475798 100644
--- a/res/assets/templates-sdk/macros_override.cs
+++ b/res/assets/templates-sdk/macros_override.cs
@@ -23,9 +23,9 @@
   <?cs set:count = #1 ?>
   <table class="jd-sumtable-expando">
     <?cs each:cl=classes ?>
-      <tr <?cs
-          if:cl.type.since
-            ?>data-version-added="<?cs var:cl.type.since ?>"<?cs
+      <tr class="api apilevel-<?cs var:cl.type.since ?>"<?cs
+          if:cl.type.since ?>
+          data-version-added="<?cs var:cl.type.since ?>"<?cs
           /if ?><?cs
           if:cl.type.deprecatedsince
             ?> data-version-deprecated="<?cs var:cl.type.deprecatedsince ?>"<?cs
diff --git a/res/assets/templates-sdk/package.cs b/res/assets/templates-sdk/package.cs
index 7595e40..ab66449 100644
--- a/res/assets/templates-sdk/package.cs
+++ b/res/assets/templates-sdk/package.cs
@@ -15,9 +15,9 @@
 <?cs include:"header.cs" ?>
 <?cs # Includes api-info-block DIV at top of page. Standard Devsite uses right nav. ?>
 <?cs if:dac ?><?cs include:"page_info.cs" ?><?cs /if ?>
-<div id="jd-content" <?cs
-     if:package.since
-       ?>data-version-added="<?cs var:package.since ?>"<?cs
+<div class="api apilevel-<?cs var:package.since ?>" id="jd-content"<?cs
+     if:package.since ?>
+     data-version-added="<?cs var:package.since ?>"<?cs
      /if ?><?cs
      if:package.deprecatedsince
        ?> data-version-deprecated="<?cs var:package.deprecatedsince ?>"<?cs
diff --git a/res/assets/templates-sdk/packages.cs b/res/assets/templates-sdk/packages.cs
index caf8fba..3fcfb81 100644
--- a/res/assets/templates-sdk/packages.cs
+++ b/res/assets/templates-sdk/packages.cs
@@ -13,13 +13,7 @@
 <?cs set:count = #1 ?>
 <table>
 <?cs each:pkg = docs.packages ?>
-    <tr <?cs
-        if:pkg.since
-          ?>data-version-added="<?cs var:pkg.since ?>"<?cs
-        /if ?><?cs
-        if:pkg.deprecatedsince
-          ?> data-version-deprecated="<?cs var:pkg.deprecatedsince ?>"<?cs
-        /if ?> >
+    <tr class="api apilevel-<?cs var:pkg.since ?>" >
         <td class="jd-linkcol"><?cs call:package_link(pkg) ?></td>
         <td class="jd-descrcol" width="100%"><?cs call:tag_list(pkg.shortDescr) ?></td>
     </tr>
diff --git a/res/assets/templates/macros.cs b/res/assets/templates/macros.cs
index 13a884f..6590b51 100644
--- a/res/assets/templates/macros.cs
+++ b/res/assets/templates/macros.cs
@@ -393,13 +393,7 @@
   set:count = #1 ?>
   <table class="jd-sumtable-expando"><?cs
       each:cl=classes ?>
-        <tr <?cs
-            if:cl.type.since
-              ?>data-version-added="<?cs var:cl.type.since ?>"<?cs
-            /if ?><?cs
-            if:cl.type.deprecatedsince
-              ?> data-version-deprecated="<?cs var:cl.type.deprecatedsince ?>"<?cs
-            /if ?> >
+        <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.type.since ?>" >
               <td><?cs call:type_link(cl.type) ?></td>
               <td width="100%"><?cs call:short_descr(cl) ?>&nbsp;</td>
           </tr><?cs set:count = count + #1 ?><?cs
@@ -413,7 +407,7 @@
     <li><h2 class="hide-from-toc"><?cs var:label ?></h2>
       <ul><?cs
       each:cl=classes ?>
-        <li><?cs call:type_link2(cl.type,"true") ?></li><?cs
+        <li class="api apilevel-<?cs var:cl.type.since ?>"><?cs call:type_link2(cl.type,"true") ?></li><?cs
       /each ?>
       </ul>
     </li><?cs
@@ -426,7 +420,7 @@
     <li><h2 class="hide-from-toc"><?cs var:label ?></h2>
       <ul><?cs
       each:cl=classes ?>
-          <li<?cs if:class.name == cl.label?> class="selected"<?cs /if ?>><?cs call:type_link2(cl,"true") ?></li><?cs
+          <li class="<?cs if:class.name == cl.label?>selected <?cs /if ?>api apilevel-<?cs var:cl.since ?>"><?cs call:type_link2(cl,"true") ?></li><?cs
       /each ?>
       </ul>
     </li><?cs
@@ -436,7 +430,7 @@
 # A list of links to packages, for use in the side navigation of packages (panel nav) ?><?cs
 def:package_link_list(packages) ?><?cs
   each:pkg=packages ?>
-    <li<?cs if:(class.package.name == pkg.name) || (package.name == pkg.name)?> class="selected"<?cs /if ?>><?cs call:package_link(pkg) ?></li><?cs
+    <li class="<?cs if:(class.package.name == pkg.name) || (package.name == pkg.name)?>selected <?cs /if ?>api apilevel-<?cs var:pkg.since ?>"><?cs call:package_link(pkg) ?></li><?cs
   /each ?><?cs
 /def ?>
 
diff --git a/src/com/google/doclava/AndroidAuxSource.java b/src/com/google/doclava/AndroidAuxSource.java
index cfcc0ac..1c97b18 100644
--- a/src/com/google/doclava/AndroidAuxSource.java
+++ b/src/com/google/doclava/AndroidAuxSource.java
@@ -146,12 +146,11 @@
       // Document required permissions
       if ((type == TYPE_CLASS || type == TYPE_METHOD || type == TYPE_FIELD)
           && annotation.type().qualifiedNameMatches("android", "annotation.RequiresPermission")) {
-        ArrayList<AnnotationValueInfo> values = null;
+        ArrayList<AnnotationValueInfo> values = new ArrayList<>();
         boolean any = false;
         for (AnnotationValueInfo val : annotation.elementValues()) {
           switch (val.element().name()) {
             case "value":
-              values = new ArrayList<AnnotationValueInfo>();
               values.add(val);
               break;
             case "allOf":
@@ -163,7 +162,7 @@
               break;
           }
         }
-        if (values == null || values.isEmpty()) continue;
+        if (values.isEmpty()) continue;
 
         ClassInfo permClass = annotation.type().findClass("android.Manifest.permission");
         ArrayList<TagInfo> valueTags = new ArrayList<>();
diff --git a/src/com/google/doclava/Doclava.java b/src/com/google/doclava/Doclava.java
index fe63038..fbde7d8 100644
--- a/src/com/google/doclava/Doclava.java
+++ b/src/com/google/doclava/Doclava.java
@@ -121,7 +121,6 @@
   public static boolean referenceOnly = false;
   public static boolean staticOnly = false;
   public static boolean yamlV2 = false; /* whether to build the new version of the yaml file */
-  public static boolean devsite = false; /* whether to build docs for devsite */
   public static AuxSource auxSource = new EmptyAuxSource();
   public static Linter linter = new EmptyLinter();
   public static boolean android = false;
@@ -195,7 +194,6 @@
     HashSet<String> stubPackages = null;
     HashSet<String> stubImportPackages = null;
     boolean stubSourceOnly = false;
-    boolean keepStubComments = false;
     ArrayList<String> knownTagsFiles = new ArrayList<String>();
 
     root = r;
@@ -304,8 +302,6 @@
         }
       } else if (a[0].equals("-stubsourceonly")) {
         stubSourceOnly = true;
-      } else if (a[0].equals("-keepstubcomments")) {
-        keepStubComments = true;
       } else if (a[0].equals("-sdkvalues")) {
         sdkValuePath = a[1];
       } else if (a[0].equals("-api")) {
@@ -382,7 +378,6 @@
       } else if (a[0].equals("-yamlV2")) {
         yamlV2 = true;
       } else if (a[0].equals("-devsite")) {
-        devsite = true;
         // Don't copy any assets to devsite output
         includeAssets = false;
         USE_DEVSITE_LOCALE_OUTPUT_PATHS = true;
@@ -392,8 +387,7 @@
           System.out.println("  ... Generating static html only for devsite");
         }
         if (yamlNavFile == null) {
-          // Use _toc.yaml as default to avoid clobbering possible manual _book.yaml files
-          yamlNavFile = "_toc.yaml";
+          yamlNavFile = "_book.yaml";
         }
       } else if (a[0].equals("-android")) {
         auxSource = new AndroidAuxSource();
@@ -431,8 +425,9 @@
       }
       // If no custom template path is provided, and this is a devsite build,
       // then use the bundled templates-sdk/ files by default
-      if (templates.isEmpty() && devsite) {
+      if (templates.isEmpty() && USE_DEVSITE_LOCALE_OUTPUT_PATHS) {
         resourceLoaders.add(new ClassResourceLoader(Doclava.class, "/assets/templates-sdk"));
+        System.out.println("\n#########  OK, Using templates-sdk ############\n");
       }
 
       templates = ClearPage.getBundledTemplateDirs();
@@ -453,11 +448,7 @@
       if (NAVTREE_ONLY) {
         if (AT_LINKS_NAVTREE) {
           AtLinksNavTree.writeAtLinksNavTree(javadocDir);
-        } else if (yamlV2) {
-          // Generate DAC-formatted left-nav for devsite
-          NavTree.writeYamlTree2(javadocDir, yamlNavFile);
         } else {
-          // This shouldn't happen; this is the legacy DAC left nav file
           NavTree.writeNavTree(javadocDir, "");
         }
         return true;
@@ -528,19 +519,17 @@
         } else if(gcmRef){
           refPrefix = "gcm-";
         }
+        NavTree.writeNavTree(javadocDir, refPrefix);
 
         // Write yaml tree.
-        if (yamlNavFile != null) {
+        if (yamlNavFile != null){
+          NavTree.writeYamlTree(javadocDir, yamlNavFile);
           if (yamlV2) {
-            // Generate DAC-formatted left-nav for devsite
+            // Generate both for good measure, to make transitions easier, but change the filename
+            // for the new one so there's yet another explicit opt-in required by fixing the name.
+            yamlNavFile = "_NEW" + yamlNavFile;
             NavTree.writeYamlTree2(javadocDir, yamlNavFile);
-          } else {
-            // Generate legacy devsite left-nav (shows sub-classes nested under parent class)
-            NavTree.writeYamlTree(javadocDir, yamlNavFile);
           }
-        } else {
-          // This shouldn't happen; this is the legacy DAC left nav file
-          NavTree.writeNavTree(javadocDir, refPrefix);
         }
 
         // Packages Pages
@@ -568,7 +557,7 @@
       if (!sTaglist.isEmpty()) {
         PageMetadata.WriteListByLang(sTaglist);
         // For devsite (ds) reference only, write samples_metadata to out dir
-        if ((devsite) && (!DEVSITE_STATIC_ONLY)) {
+        if ((USE_DEVSITE_LOCALE_OUTPUT_PATHS) && (!DEVSITE_STATIC_ONLY)) {
           PageMetadata.WriteSamplesListByLang(sTaglist);
         }
       }
@@ -580,7 +569,7 @@
         || privateApiFile != null || privateDexApiFile != null || apiMappingFile != null) {
       Stubs.writeStubsAndApi(stubsDir, apiFile, dexApiFile, proguardFile, removedApiFile,
           removedDexApiFile, exactApiFile, privateApiFile, privateDexApiFile, apiMappingFile,
-          stubPackages, stubImportPackages, stubSourceOnly, keepStubComments);
+          stubPackages, stubImportPackages, stubSourceOnly);
     }
 
     Errors.printErrors();
@@ -869,9 +858,6 @@
     if (option.equals("-stubsourceonly")) {
       return 1;
     }
-    if (option.equals("-keepstubcomments")) {
-      return 1;
-    }
     if (option.equals("-sdkvalues")) {
       return 2;
     }
@@ -1220,7 +1206,7 @@
 
     // Write the lists for JD documents (if there are HTML directories to process)
     // Skip this for devsite builds
-    if ((inputPathHtmlDirs.size() > 0) && (!devsite)) {
+    if ((inputPathHtmlDirs.size() > 0) && (!USE_DEVSITE_LOCALE_OUTPUT_PATHS)) {
       Data jddata = makeHDF();
       Iterator counter = new Iterator();
       for (String htmlDir : inputPathHtmlDirs) {
@@ -1582,11 +1568,8 @@
     setPageTitle(data, "Class Index");
     ClearPage.write(data, "classes.cs", packageDir + "classes" + htmlExtension);
 
-    if (!devsite) {
-      // Index page redirects to the classes.html page, so use the same directory
-      // This page is not needed for devsite builds, which should instead use _redirects.yaml
-      writeIndex(packageDir);
-    }
+    // Index page redirects to the classes.html page, so use the same directory
+    writeIndex(packageDir);
   }
 
   // we use the word keywords because "index" means something else in html land
diff --git a/src/com/google/doclava/MemberInfo.java b/src/com/google/doclava/MemberInfo.java
index 2854ab5..797b1b9 100644
--- a/src/com/google/doclava/MemberInfo.java
+++ b/src/com/google/doclava/MemberInfo.java
@@ -59,7 +59,7 @@
 
   public String anchor() {
     if (mSignature != null) {
-      return mName + mSignature.replace(" ", "%20");
+      return mName + mSignature;
     } else {
       return mName;
     }
diff --git a/src/com/google/doclava/NavTree.java b/src/com/google/doclava/NavTree.java
index 3375df5..b4861c8 100644
--- a/src/com/google/doclava/NavTree.java
+++ b/src/com/google/doclava/NavTree.java
@@ -26,7 +26,6 @@
 
 public class NavTree {
 
-  /* @deprecated This method was used for an older version of DAC, circa 2012, retired May 2018 */
   public static void writeNavTree(String dir, String refPrefix) {
     List<Node> children = new ArrayList<Node>();
     for (PackageInfo pkg : Doclava.choosePackages()) {
diff --git a/src/com/google/doclava/Stubs.java b/src/com/google/doclava/Stubs.java
index 930d52c..0ef3749 100644
--- a/src/com/google/doclava/Stubs.java
+++ b/src/com/google/doclava/Stubs.java
@@ -49,8 +49,7 @@
   public static void writeStubsAndApi(String stubsDir, String apiFile, String dexApiFile,
       String keepListFile, String removedApiFile, String removedDexApiFile, String exactApiFile,
       String privateApiFile, String privateDexApiFile, String apiMappingFile,
-      HashSet<String> stubPackages, HashSet<String> stubImportPackages, boolean stubSourceOnly,
-      boolean keepStubComments) {
+      HashSet<String> stubPackages, HashSet<String> stubImportPackages, boolean stubSourceOnly) {
     // figure out which classes we need
     final HashSet<ClassInfo> notStrippable = new HashSet<ClassInfo>();
     Collection<ClassInfo> all = Converter.allClasses();
@@ -260,7 +259,7 @@
         if (shouldWriteStub(cl.containingPackage().name(), stubPackages, stubPackageWildcards)) {
           // write out the stubs
           if (stubsDir != null) {
-            writeClassFile(stubsDir, notStrippable, cl, keepStubComments);
+            writeClassFile(stubsDir, notStrippable, cl);
           }
           // build class list for api file or keep list file
           if (apiWriter != null || dexApiWriter != null || keepListWriter != null) {
@@ -589,7 +588,7 @@
     return dir + cl.name() + ".java";
   }
 
-  static void writeClassFile(String stubsDir, HashSet<ClassInfo> notStrippable, ClassInfo cl, boolean keepStubComments) {
+  static void writeClassFile(String stubsDir, HashSet<ClassInfo> notStrippable, ClassInfo cl) {
     // inner classes are written by their containing class
     if (cl.containingClass() != null) {
       return;
@@ -609,7 +608,7 @@
     PrintStream stream = null;
     try {
       stream = new PrintStream(new BufferedOutputStream(new FileOutputStream(file)));
-      writeClassFile(stream, notStrippable, cl, keepStubComments);
+      writeClassFile(stream, notStrippable, cl);
     } catch (FileNotFoundException e) {
       System.err.println("error writing file: " + filename);
     } finally {
@@ -619,7 +618,7 @@
     }
   }
 
-  static void writeClassFile(PrintStream stream, HashSet<ClassInfo> notStrippable, ClassInfo cl, boolean keepStubComments) {
+  static void writeClassFile(PrintStream stream, HashSet<ClassInfo> notStrippable, ClassInfo cl) {
     PackageInfo pkg = cl.containingPackage();
     if (cl.containingClass() == null) {
         stream.print(parseLicenseHeader(cl.position()));
@@ -627,7 +626,7 @@
     if (pkg != null) {
       stream.println("package " + pkg.name() + ";");
     }
-    writeClass(stream, notStrippable, cl, keepStubComments);
+    writeClass(stream, notStrippable, cl);
   }
 
   private static String parseLicenseHeader(/* @Nonnull */ SourcePositionInfo positionInfo) {
@@ -678,11 +677,7 @@
     return builder.toString();
   }
 
-  static void writeClass(PrintStream stream, HashSet<ClassInfo> notStrippable, ClassInfo cl, boolean keepStubComments) {
-    if (keepStubComments) {
-      writeComment(stream, cl);
-    }
-
+  static void writeClass(PrintStream stream, HashSet<ClassInfo> notStrippable, ClassInfo cl) {
     writeAnnotations(stream, cl.annotations(), cl.isDeprecated());
 
     stream.print(cl.scope() + " ");
@@ -757,14 +752,14 @@
 
     for (ClassInfo inner : cl.getRealInnerClasses()) {
       if (notStrippable.contains(inner) && !inner.isDocOnly()) {
-        writeClass(stream, notStrippable, inner, keepStubComments);
+        writeClass(stream, notStrippable, inner);
       }
     }
 
 
     for (MethodInfo method : cl.constructors()) {
       if (!method.isDocOnly()) {
-        writeMethod(stream, method, true, keepStubComments);
+        writeMethod(stream, method, true);
       }
     }
 
@@ -811,7 +806,7 @@
         }
       }
       if (!method.isDocOnly()) {
-        writeMethod(stream, method, false, keepStubComments);
+        writeMethod(stream, method, false);
       }
     }
     // Write all methods that are hidden or removed, but override abstract methods or interface methods.
@@ -828,7 +823,7 @@
           (overriddenMethod.isAbstract() || overriddenMethod.containingClass().isInterface())) {
         method.setReason("1:" + classContainingMethod.qualifiedName());
         cl.addMethod(method);
-        writeMethod(stream, method, false, keepStubComments);
+        writeMethod(stream, method, false);
       }
     }
 
@@ -840,7 +835,7 @@
 
     for (FieldInfo field : cl.selfFields()) {
       if (!field.isDocOnly()) {
-        writeField(stream, field, keepStubComments);
+        writeField(stream, field);
       }
     }
 
@@ -858,10 +853,7 @@
     stream.println("}");
   }
 
-  static void writeMethod(PrintStream stream, MethodInfo method, boolean isConstructor, boolean keepStubComments) {
-    if (keepStubComments) {
-      writeComment(stream, method);
-    }
+  static void writeMethod(PrintStream stream, MethodInfo method, boolean isConstructor) {
     String comma;
 
     writeAnnotations(stream, method.annotations(), method.isDeprecated());
@@ -932,10 +924,7 @@
     }
   }
 
-  static void writeField(PrintStream stream, FieldInfo field, boolean keepStubComments) {
-    if (keepStubComments) {
-      writeComment(stream, field);
-    }
+  static void writeField(PrintStream stream, FieldInfo field) {
     writeAnnotations(stream, field.annotations(), field.isDeprecated());
 
     stream.print(field.scope() + " ");
@@ -1101,16 +1090,6 @@
     stream.println(";");
   }
 
-  static void writeComment(PrintStream stream, DocInfo doc) {
-    if (!doc.isHiddenOrRemoved() && !doc.comment().isDocOnly() && !"".equals(doc.getRawCommentText())) {
-      String newLineSeparator = System.getProperty("line.separator");
-      stream.println("/**");
-      stream.print(" * ");
-      stream.println(doc.getRawCommentText().replace(newLineSeparator, newLineSeparator + " *"));
-      stream.println(" */");
-    }
-  }
-
   public static void writeXml(PrintStream xmlWriter, Collection<PackageInfo> pkgs, boolean strip) {
     if (strip) {
       Stubs.writeXml(xmlWriter, pkgs);
