diff --git a/res/assets/templates-sdk/head_tag.cs b/res/assets/templates-sdk/head_tag.cs
index 0665391..0d85b8c 100644
--- a/res/assets/templates-sdk/head_tag.cs
+++ b/res/assets/templates-sdk/head_tag.cs
@@ -82,12 +82,9 @@
             elif:samples ?>/samples<?cs
             elif:reference ?>/reference<?cs
             elif:downloads ?>/downloads<?cs /if ?><?cs
+          elif:library.root ?><?cs var:library.root ?><?cs
           else ?><?cs
-            if:reference.testSupport ?>/reference/android/support/test<?cs
-            elif:reference.wearableSupport ?>/reference/android/support/wearable<?cs
-            elif:reference.androidSupport ?>/reference/android/support<?cs
-            elif:reference.constraintSupport ?>/reference/android/support/constraint<?cs
-            elif:(guide||develop||training||reference||tools||sdk||samples) ?><?cs
+            if:(guide||develop||training||reference||tools||sdk||samples) ?><?cs
               if:guide ?>/guide<?cs
               elif:training ?>/training<?cs
               elif:reference ?>/reference<?cs
diff --git a/res/assets/templates-sdk/lists.cs b/res/assets/templates-sdk/lists.cs
index f08abba..9d86dfa 100644
--- a/res/assets/templates-sdk/lists.cs
+++ b/res/assets/templates-sdk/lists.cs
@@ -1,8 +1,7 @@
 var <?cs
-  if:reference.testSupport ?>SUPPORT_TEST_<?cs
-  elif: reference.wearableSupport ?>SUPPORT_WEARABLE_<?cs
-  elif: reference.constraintSupport ?>CONSTRAINT_<?cs
-  /if ?>DATA = [
+  if:dac_dataname ?><?cs var:dac_dataname ?><?cs
+  else ?>DATA<?cs
+  /if ?> = [
 <?cs each:page = docs.pages
 ?>      { id:<?cs var: page.id ?>, label:"<?cs var:page.label ?>", link:"<?cs var:page.link ?>", type:"<?cs var:page.type ?>", deprecated:"<?cs var:page.deprecated ?>" }<?cs if:!last(page) ?>,<?cs /if ?>
 <?cs /each ?>
diff --git a/src/com/google/doclava/AtLinksNavTree.java b/src/com/google/doclava/AtLinksNavTree.java
index 532e8b6..f311c12 100644
--- a/src/com/google/doclava/AtLinksNavTree.java
+++ b/src/com/google/doclava/AtLinksNavTree.java
@@ -47,7 +47,7 @@
   * }</pre>
   *
   * @param dir The directory path to prepend to the output path if the generated navtree is for
-  *        the /support/test or /support/wearable reference docs.
+  *        one the a supplemental library references (such as the wearable support library)
   */
   public static void writeAtLinksNavTree(String dir) {
     StringBuilder buf = new StringBuilder();
@@ -60,10 +60,8 @@
     data.setValue("navtree", buf.toString());
 
     String output_path;
-    if (Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS && Doclava.testSupportRef) {
-      output_path = dir + Doclava.testSupportPath + "at_links_navtree.json";
-    } else if (Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS && Doclava.wearableSupportRef) {
-      output_path = dir + Doclava.wearableSupportPath + "at_links_navtree.json";
+    if (Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS && (Doclava.libraryRoot != null)) {
+      output_path = dir + Doclava.libraryRoot + "at_links_navtree.json";
     } else {
       output_path = "at_links_navtree.json";
     }
diff --git a/src/com/google/doclava/Doclava.java b/src/com/google/doclava/Doclava.java
index 8fc0b4f..528ebf1 100644
--- a/src/com/google/doclava/Doclava.java
+++ b/src/com/google/doclava/Doclava.java
@@ -121,14 +121,7 @@
   //API reference extensions
   private static boolean gmsRef = false;
   private static boolean gcmRef = false;
-  public static boolean testSupportRef = false;
-  public static String testSupportPath = "android/support/test/";
-  public static boolean wearableSupportRef = false;
-  public static String wearableSupportPath = "android/support/wearable/";
-  public static boolean androidSupportRef = false;
-  public static String androidSupportPath = "android/support/";
-  public static boolean constraintSupportRef = false;
-  public static String constraintSupportPath = "android/support/constraint/";
+  public static String libraryRoot = null;
   private static boolean samplesRef = false;
   private static boolean sac = false;
 
@@ -315,6 +308,10 @@
         federationTagger.addSiteApi(name, file);
       } else if (a[0].equals("-yaml")) {
         yamlNavFile = a[1];
+      } else if (a[0].equals("-dac_libraryroot")) {
+        libraryRoot = a[1];
+      } else if (a[0].equals("-dac_dataname")) {
+        mHDFData.add(new String[] {"dac_dataname", a[1]});
       } else if (a[0].equals("-documentannotations")) {
         documentAnnotations = true;
         documentAnnotationsPath = a[1];
@@ -359,6 +356,12 @@
       for (String tmpl : templates) {
         resourceLoaders.add(new FileSystemResourceLoader(tmpl));
       }
+      // 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() && 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();
       for (String tmpl : templates) {
@@ -648,6 +651,12 @@
     if (option.equals("-devsite")) {
       return 1;
     }
+    if (option.equals("-dac_libraryroot")) {
+      return 2;
+    }
+    if (option.equals("-dac_dataname")) {
+      return 2;
+    }
     if (option.equals("-ignoreJdLinks")) {
       return 1;
     }
@@ -761,22 +770,6 @@
       gcmRef = true;
       return 1;
     }
-    if (option.equals("-testSupportRef")) {
-      testSupportRef = true;
-      return 1;
-    }
-    if (option.equals("-wearableSupportRef")) {
-      wearableSupportRef = true;
-      return 1;
-    }
-    if (option.equals("-androidSupportRef")) {
-      androidSupportRef = true;
-      return 1;
-    }
-    if (option.equals("-constraintSupportRef")) {
-      constraintSupportRef = true;
-      return 1;
-    }
     if (option.equals("-metadataDebug")) {
       return 1;
     }
@@ -894,14 +887,6 @@
           data.setValue("reference.gms", "true");
       } else if(gcmRef){
           data.setValue("reference.gcm", "true");
-      } else if(testSupportRef){
-          data.setValue("reference.testSupport", "true");
-      } else if(wearableSupportRef){
-          data.setValue("reference.wearableSupport", "true");
-      } else if(androidSupportRef){
-          data.setValue("reference.androidSupport", "true");
-      } else if(constraintSupportRef){
-          data.setValue("reference.constraintSupport", "true");
       }
       data.setValue("reference", "1");
       data.setValue("reference.apilevels", sinceTagger.hasVersions() ? "1" : "0");
@@ -1037,18 +1022,9 @@
     int i = 0;
     String listDir = javadocDir;
     if (USE_DEVSITE_LOCALE_OUTPUT_PATHS) {
-      if (testSupportRef) {
-        listDir = listDir + testSupportPath;
-        data.setValue("reference.testSupport", "true");
-      } else if (wearableSupportRef) {
-        listDir = listDir + wearableSupportPath;
-        data.setValue("reference.wearableSupport", "true");
-      } else if (androidSupportRef) {
-        listDir = listDir + androidSupportPath;
-        data.setValue("reference.androidSupport", "true");
-      } else if (constraintSupportRef) {
-        listDir = listDir + constraintSupportPath;
-        data.setValue("reference.constraintSupport", "true");
+      if (libraryRoot != null) {
+        listDir = listDir + libraryRoot;
+        data.setValue("library.root", libraryRoot);
       }
     }
     for (String s : sorted.keySet()) {
@@ -1337,14 +1313,8 @@
 
     String packageDir = javadocDir;
     if (USE_DEVSITE_LOCALE_OUTPUT_PATHS) {
-      if (testSupportRef) {
-        packageDir = packageDir + testSupportPath;
-      } else if (wearableSupportRef) {
-        packageDir = packageDir + wearableSupportPath;
-      } else if (androidSupportRef) {
-        packageDir = packageDir + androidSupportPath;
-      } else if (constraintSupportRef) {
-        packageDir = packageDir + constraintSupportPath;
+      if (libraryRoot != null) {
+        packageDir = packageDir + libraryRoot;
       }
     }
     data.setValue("page.not-api", "true");
@@ -1433,14 +1403,8 @@
 
     String packageDir = javadocDir;
     if (USE_DEVSITE_LOCALE_OUTPUT_PATHS) {
-      if (testSupportRef) {
-        packageDir = packageDir + testSupportPath;
-      } else if (wearableSupportRef) {
-        packageDir = packageDir + wearableSupportPath;
-      } else if (androidSupportRef) {
-        packageDir = packageDir + androidSupportPath;
-      } else if (constraintSupportRef) {
-        packageDir = packageDir + constraintSupportPath;
+      if (libraryRoot != null) {
+        packageDir = packageDir + libraryRoot;
       }
     }
 
diff --git a/src/com/google/doclava/NavTree.java b/src/com/google/doclava/NavTree.java
index 0f79917..03926b2 100644
--- a/src/com/google/doclava/NavTree.java
+++ b/src/com/google/doclava/NavTree.java
@@ -49,21 +49,8 @@
       ClearPage.write(data, "gms_navtree_data.cs", "gms_navtree_data.js");
     } else if (refPrefix == "gcm-"){
       ClearPage.write(data, "gcm_navtree_data.cs", "gcm_navtree_data.js");
-    } else if ((Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS)
-          && (Doclava.testSupportRef)){
-        ClearPage.write(data, "navtree_data.cs", dir + Doclava.testSupportPath
-          + "navtree_data.js");
-    } else if ((Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS)
-          && (Doclava.wearableSupportRef)){
-        ClearPage.write(data, "navtree_data.cs", dir + Doclava.wearableSupportPath
-          + "navtree_data.js");
-    } else if ((Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS)
-          && (Doclava.androidSupportRef)){
-        ClearPage.write(data, "navtree_data.cs", dir + Doclava.androidSupportPath
-          + "navtree_data.js");
-    } else if ((Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS)
-          && (Doclava.constraintSupportRef)){
-        ClearPage.write(data, "navtree_data.cs", dir + Doclava.constraintSupportPath
+    } else if (Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS && (Doclava.libraryRoot != null)) {
+        ClearPage.write(data, "navtree_data.cs", dir + Doclava.libraryRoot
           + "navtree_data.js");
     } else {
       ClearPage.write(data, "navtree_data.cs", "navtree_data.js");
@@ -97,14 +84,8 @@
 
     data = makeYamlHDF(sorted, "docs.pages", data);
 
-    if ((Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS) && (Doclava.testSupportRef)) {
-      dir = Doclava.ensureSlash(dir) + Doclava.testSupportPath;
-    } else if ((Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS) && (Doclava.wearableSupportRef)) {
-      dir = Doclava.ensureSlash(dir) + Doclava.wearableSupportPath;
-    } else if ((Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS) && (Doclava.androidSupportRef)) {
-      dir = Doclava.ensureSlash(dir) + Doclava.androidSupportPath;
-    } else if ((Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS) && (Doclava.constraintSupportRef)) {
-      dir = Doclava.ensureSlash(dir) + Doclava.constraintSupportPath;
+    if (Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS && (Doclava.libraryRoot != null)) {
+      dir = Doclava.ensureSlash(dir) + Doclava.libraryRoot;
     }
 
     data.setValue("docs.classes.link", Doclava.ensureSlash(dir) + "classes.html");
