diff --git a/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_APACHE2
diff --git a/src/com/google/doclava/DocFile.java b/src/com/google/doclava/DocFile.java
index 24bcbb6..c3ad2c1 100644
--- a/src/com/google/doclava/DocFile.java
+++ b/src/com/google/doclava/DocFile.java
@@ -222,7 +222,7 @@
         } else if (filename.indexOf("distribute/analyze") == 0) {
           hdf.setValue("analyze", "true");
         } else if (filename.indexOf("distribute/tools") == 0) {
-          hdf.setValue("disttools", "true");
+          hdf.setValue("essentials", "true");
         } else if (filename.indexOf("distribute/stories") == 0) {
           hdf.setValue("stories", "true");
         }
@@ -246,6 +246,7 @@
         hdf.setValue("wear", "true");
       } else if (filename.indexOf("preview") == 0) {
         hdf.setValue("preview", "true");
+        hdf.setValue("page.type", "preview");
       } else if (filename.indexOf("auto") == 0) {
         hdf.setValue("auto", "true");
       } else if (filename.indexOf("tv") == 0) {
@@ -261,6 +262,8 @@
           hdf.setValue("samples", "true");
         } else if (filename.indexOf("ndk/downloads") == 0) {
           hdf.setValue("downloads", "true");
+          fromTemplate = hdf.getValue("page.template", "");
+
         }
       }
       //set metadata for this file in jd_lists_unified
diff --git a/src/com/google/doclava/Stubs.java b/src/com/google/doclava/Stubs.java
index c0705df..6157fa9 100644
--- a/src/com/google/doclava/Stubs.java
+++ b/src/com/google/doclava/Stubs.java
@@ -27,8 +27,10 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.regex.Pattern;
 
 public class Stubs {
   public static void writeStubsAndApi(String stubsDir, String apiFile, String keepListFile,
@@ -161,9 +163,10 @@
 
     // packages contains all the notStrippable classes mapped by their containing packages
     HashMap<PackageInfo, List<ClassInfo>> packages = new HashMap<PackageInfo, List<ClassInfo>>();
+    final HashSet<Pattern> stubPackageWildcards = extractWildcards(stubPackages);
     for (ClassInfo cl : notStrippable) {
       if (!cl.isDocOnly()) {
-        if (stubPackages == null || stubPackages.contains(cl.containingPackage().name())) {
+        if (shouldWriteStub(cl.containingPackage().name(), stubPackages, stubPackageWildcards)) {
           // write out the stubs
           if (stubsDir != null) {
             writeClassFile(stubsDir, notStrippable, cl);
@@ -211,6 +214,46 @@
     }
   }
 
+  private static boolean shouldWriteStub(final String packageName,
+          final HashSet<String> stubPackages, final HashSet<Pattern> stubPackageWildcards) {
+    if (stubPackages == null) {
+      // There aren't any stub packages set, write all stubs
+      return true;
+    }
+    if (stubPackages.contains(packageName)) {
+      // Stub packages contains package, return true
+      return true;
+    }
+    if (stubPackageWildcards != null) {
+      // Else, we will iterate through the wildcards to see if there's a match
+      for (Pattern wildcard : stubPackageWildcards) {
+        if (wildcard.matcher(packageName).matches()) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  private static HashSet<Pattern> extractWildcards(HashSet<String> stubPackages) {
+    HashSet<Pattern> wildcards = null;
+    if (stubPackages != null) {
+      for (Iterator<String> i = stubPackages.iterator(); i.hasNext();) {
+        final String pkg = i.next();
+        if (pkg.indexOf('*') != -1) {
+          if (wildcards == null) {
+            wildcards = new HashSet<Pattern>();
+          }
+          // Add the compiled wildcard, replacing * with the regex equivalent
+          wildcards.add(Pattern.compile(pkg.replace("*", ".*?")));
+          // And remove the raw wildcard from the packages
+          i.remove();
+        }
+      }
+    }
+    return wildcards;
+  }
+
   private static ClassInfo findHiddenClasses(TypeInfo ti) {
     ClassInfo ci = ti.asClassInfo();
     if (ci == null) return null;
