char *host_ip_addr_str; /**< String with dotted decimal representation
                                 of host's IP. NULL before connect_to() */
 
-#ifndef FEATURE_EXTENDED_HOST_PATTERNS
    char  *dbuffer; /**< Buffer with '\0'-delimited domain name.           */
    char **dvec;    /**< List of pointers to the strings in dbuffer.       */
    int    dcount;  /**< How many parts to this domain? (length of dvec)   */
-#endif /* ndef FEATURE_EXTENDED_HOST_PATTERNS */
 
 #ifdef FEATURE_HTTPS_INSPECTION
    int client_ssl;                                                  /**< Flag if we should communicate with client over ssl   */
 {
 #ifdef FEATURE_EXTENDED_HOST_PATTERNS
    regex_t *host_regex;/**< Regex for host matching                          */
-#else
+   enum host_regex_type { VANILLA_HOST_PATTERN, EXTENDED_HOST_PATTERN } host_regex_type;
+#endif /* defined FEATURE_EXTENDED_HOST_PATTERNS */
    char  *dbuffer;     /**< Buffer with '\0'-delimited domain name, or NULL to match all hosts. */
    char **dvec;        /**< List of pointers to the strings in dbuffer.       */
    int    dcount;      /**< How many parts to this domain? (length of dvec)   */
    int    unanchored;  /**< Bitmap - flags are ANCHOR_LEFT and ANCHOR_RIGHT.  */
-#endif /* defined FEATURE_EXTENDED_HOST_PATTERNS */
 
    char  *port_list;   /**< List of acceptable ports, or NULL to match all ports */
 
 
    RIGHT_ANCHORED,
    RIGHT_ANCHORED_HOST
 };
-static jb_err compile_host_pattern(struct pattern_spec *url, const char *host_pattern);
+static jb_err compile_vanilla_host_pattern(struct pattern_spec *url, const char *host_pattern);
+#ifdef FEATURE_EXTENDED_HOST_PATTERNS
+static jb_err compile_pcre_host_pattern(struct pattern_spec *url, const char *host_pattern);
+#endif
 
 /*********************************************************************
  *
    freez(http->path);
    freez(http->version);
    freez(http->host_ip_addr_str);
-#ifndef FEATURE_EXTENDED_HOST_PATTERNS
    freez(http->dbuffer);
    freez(http->dvec);
    http->dcount = 0;
-#endif
 }
 
 
-#ifndef FEATURE_EXTENDED_HOST_PATTERNS
 /*********************************************************************
  *
  * Function    :  init_domain_components
 
    return JB_ERR_OK;
 }
-#endif /* ndef FEATURE_EXTENDED_HOST_PATTERNS */
 
 
 /*********************************************************************
       freez(buf);
    }
 
-#ifdef FEATURE_EXTENDED_HOST_PATTERNS
-   return JB_ERR_OK;
-#else
    /* Split domain name so we can compare it against wildcards */
    return init_domain_components(http);
-#endif /* def FEATURE_EXTENDED_HOST_PATTERNS */
 
 }
 
 {
    char *p;
 
+#ifdef FEATURE_EXTENDED_HOST_PATTERNS
+   const size_t prefix_length = 18;
+   if (strncmpic(buf, "PCRE-HOST-PATTERN:", prefix_length) == 0)
+   {
+      url->pattern.url_spec.host_regex_type = EXTENDED_HOST_PATTERN;
+      /* Overwrite the "PCRE-HOST-PATTERN:" prefix */
+      memmove(buf, buf+prefix_length, strlen(buf+prefix_length)+1);
+   }
+   else
+   {
+      url->pattern.url_spec.host_regex_type = VANILLA_HOST_PATTERN;
+   }
+#endif
+
    p = strchr(buf, '/');
    if (NULL != p)
    {
 
    if (buf[0] != '\0')
    {
-      return compile_host_pattern(url, buf);
+#ifdef FEATURE_EXTENDED_HOST_PATTERNS
+      if (url->pattern.url_spec.host_regex_type == EXTENDED_HOST_PATTERN)
+      {
+         return compile_pcre_host_pattern(url, buf);
+      }
+      else
+#endif
+      {
+         return compile_vanilla_host_pattern(url, buf);
+      }
    }
 
    return JB_ERR_OK;
 #ifdef FEATURE_EXTENDED_HOST_PATTERNS
 /*********************************************************************
  *
- * Function    :  compile_host_pattern
+ * Function    :  compile_pcre_host_pattern
  *
- * Description :  Parses and compiles a host pattern.
+ * Description :  Parses and compiles a pcre host pattern.
  *
  * Parameters  :
  *          1  :  url = Target pattern_spec to be filled in.
  *                JB_ERR_PARSE - Cannot parse regex
  *
  *********************************************************************/
-static jb_err compile_host_pattern(struct pattern_spec *url, const char *host_pattern)
+static jb_err compile_pcre_host_pattern(struct pattern_spec *url, const char *host_pattern)
 {
    return compile_pattern(host_pattern, RIGHT_ANCHORED_HOST, url, &url->pattern.url_spec.host_regex);
 }
+#endif /* def FEATURE_EXTENDED_HOST_PATTERNS */
 
-#else
 
 /*********************************************************************
  *
- * Function    :  compile_host_pattern
+ * Function    :  compile_vanilla_host_pattern
  *
  * Description :  Parses and "compiles" an old-school host pattern.
  *
  *                JB_ERR_PARSE - Cannot parse regex
  *
  *********************************************************************/
-static jb_err compile_host_pattern(struct pattern_spec *url, const char *host_pattern)
+static jb_err compile_vanilla_host_pattern(struct pattern_spec *url, const char *host_pattern)
 {
    char *v[150];
    size_t size;
    }
 
 }
-#endif /* def FEATURE_EXTENDED_HOST_PATTERNS */
 
 
 /*********************************************************************
       regfree(pattern->pattern.url_spec.host_regex);
       freez(pattern->pattern.url_spec.host_regex);
    }
-#else
+#endif /* def FEATURE_EXTENDED_HOST_PATTERNS */
    freez(pattern->pattern.url_spec.dbuffer);
    freez(pattern->pattern.url_spec.dvec);
    pattern->pattern.url_spec.dcount = 0;
-#endif /* ndef FEATURE_EXTENDED_HOST_PATTERNS */
    freez(pattern->pattern.url_spec.port_list);
    if (pattern->pattern.url_spec.preg)
    {
 {
    assert(http->host != NULL);
 #ifdef FEATURE_EXTENDED_HOST_PATTERNS
-   return ((NULL == pattern->pattern.url_spec.host_regex)
-      || (0 == regexec(pattern->pattern.url_spec.host_regex, http->host, 0, NULL, 0)));
-#else
-   return ((NULL == pattern->pattern.url_spec.dbuffer) || (0 == domain_match(pattern, http)));
+   if (pattern->pattern.url_spec.host_regex_type == EXTENDED_HOST_PATTERN) {
+      return ((NULL == pattern->pattern.url_spec.host_regex)
+         || (0 == regexec(pattern->pattern.url_spec.host_regex,
+               http->host, 0, NULL, 0)));
+   }
 #endif
+   return ((NULL == pattern->pattern.url_spec.dbuffer) || (0 == domain_match(pattern, http)));
 }