diff --git a/.gitignore b/.gitignore
index c300c925e6..79e892f73a 100755
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,6 @@ Gemfile.lock
 .jekyll-metadata
 *ads.txt.bkp*
 .sass-cache
+
+# Files generated by `npm install`
+node_modules/
diff --git a/Gemfile b/Gemfile
index a0483f2507..cdaf1cdfe5 100755
--- a/Gemfile
+++ b/Gemfile
@@ -1,2 +1,2 @@
 source 'https://rubygems.org'
-gem 'github-pages', '>= 30'
\ No newline at end of file
+gem 'github-pages', '>= 30'
diff --git a/README.md b/README.md
index 8bf538b48f..bfe620a281 100755
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@ Please see the sections below for more information.
 
 ## Contributing
 
-Thanks in advance for your contribution!  Contributors are listed in the **Thanks** section below.
+Thanks in advance for your contribution!
 
 For smaller changes, such as fixing a typo or adding a new section to an existing page, submit a pull request.
 
@@ -33,7 +33,7 @@ All docs are under the license shown in the `LICENSE` file in this directory.
 
 ## Prerequisites
 
-The site uses [Jekyll](https://jekyllrb.com/), which is written in the [Ruby](https://www.ruby-lang.org/en/) language.
+The site is hosted on GitHub pages, and uses [Jekyll](https://jekyllrb.com/) to generate the HTML. Jekyll is written in the [Ruby](https://www.ruby-lang.org/en/) language.
 
 1. follow the instructions at https://jekyllrb.com/docs/installation/ for your OS
 1. gem install github-pages
@@ -42,7 +42,7 @@ The site uses [Jekyll](https://jekyllrb.com/), which is written in the [Ruby](ht
 For CSS, the site uses Laravel Mix to build CSS from Sass (scss-flavored) source files. Under the hood Laravel Mix uses Webpack.
 
 1. follow the instructions at https://nodejs.dev to install Node.js for your OS
-1. `npm install` to install packages for building assets
+1. `npm ci` to install packages for building assets
 1. build assets as described below
 
 <a name="running-jekyll-locally" />
@@ -54,19 +54,20 @@ Before submitting a pull request, you should run the site locally to make sure y
 To get started editing the site and seeing your changes, clone this repo and enter the following commands in your terminal:
 
 - `cd path/to/prebid.github.io`
+- `export JEKYLL_ENV=production`
 - `bundle exec jekyll serve`
 
 You should see output that looks something like this:
 
 ```
-Configuration file: /Users/rloveland/Dropbox/Code/prebid.github.io/_config.yml  
-            Source: /Users/rloveland/Dropbox/Code/prebid.github.io  
-       Destination: /Users/rloveland/Dropbox/Code/prebid.github.io/_site  
+Configuration file: /Users/me/git/prebid.github.io/_config.yml  
+            Source: /Users/me/git/prebid.github.io  
+       Destination: /Users/me/git/prebid.github.io/_site  
  Incremental build: disabled. Enable with --incremental  
       Generating...   
                     done in 13.596 seconds.  
- Auto-regeneration: enabled for '/Users/rloveland/Dropbox/Code/prebid.github.io'  
-Configuration file: /Users/rloveland/Dropbox/Code/prebid.github.io/_config.yml  
+ Auto-regeneration: enabled for '/Users/me/git/prebid.github.io'  
+Configuration file: /Users/me/git/prebid.github.io/_config.yml  
     Server address: http://127.0.0.1:8080/  
   Server running... press ctrl-c to stop.  
 ...  
diff --git a/_data/sidebar.yml b/_data/sidebar.yml
index a5a92549b0..c4c7204924 100644
--- a/_data/sidebar.yml
+++ b/_data/sidebar.yml
@@ -234,6 +234,15 @@
   isSectionHeader: 0
   sectionTitle:
   subgroup: 1
+  
+- sbSecId: 1
+  title: Meta Bid Filtering
+  link: /dev-docs/examples/meta-bid-filtering.html
+  Item: 1
+  isHeader: 0
+  isSectionHeader: 0
+  sectionTitle:
+  subgroup: 1
 
 - sbSecId: 1
   title: Troubleshooting
@@ -359,7 +368,7 @@
   subgroup: 4
 
 - sbSecId: 1
-  title: Prebid Modules
+  title: Prebid.js Modules
   link:
   isHeader: 1
   headerId: pbjsmodules
@@ -376,32 +385,24 @@
   subgroup: 5
 
 - sbSecId: 1
-  title: General Modules
-  link: /dev-docs/modules/index.html#general-modules
-  isHeader: 0
-  isSectionHeader: 0
-  sectionTitle:
-  subgroup: 5
-
-- sbSecId: 1
-  title: Real Time Data Providers
-  link: /dev-docs/modules/index.html#real-time-data-providers
+  title: Recommended Modules
+  link: /dev-docs/modules/index.html#recommended-modules
   isHeader: 0
   isSectionHeader: 0
   sectionTitle:
   subgroup: 5
 
 - sbSecId: 1
-  title: Video Modules
-  link: /dev-docs/modules/index.html#video-modules
+  title: General Modules
+  link: /dev-docs/modules/index.html#general-modules
   isHeader: 0
   isSectionHeader: 0
   sectionTitle:
   subgroup: 5
 
 - sbSecId: 1
-  title: Testing and Debug Modules
-  link: /dev-docs/modules/index.html#testing-and-debug-modules
+  title: Vendor-Specific Modules
+  link: /dev-docs/modules/index.html#vendor-specific-modules
   isHeader: 0
   isSectionHeader: 0
   sectionTitle:
@@ -1713,6 +1714,23 @@
   sectionTitle:
   subgroup: 3
 
+- sbSecId: 5
+  title: Programmatic Guaranteed
+  link: /prebid-server/features/pg/pbs-pg-idx.html
+  isHeader: 0
+  isSectionHeader: 0
+  sectionTitle:
+  subgroup: 3
+
+
+- sbSecId: 5
+  title: Modules
+  link: /prebid-server/pbs-modules/
+  isHeader: 0
+  isSectionHeader: 0
+  sectionTitle:
+  subgroup: 3
+
 - sbSecId: 5
   title: Developers
   link:
@@ -1746,6 +1764,14 @@
   sectionTitle:
   subgroup: 5
 
+- sbSecId: 5
+  title: Building a Module
+  link: /prebid-server/developers/add-a-module.html
+  isHeader: 0
+  isSectionHeader: 0
+  sectionTitle:
+  subgroup: 5
+
 - sbSecId: 5
   title: Code Reviews
   link: /prebid-server/developers/code-reviews.html
diff --git a/_includes/adops/adops-gam-video-setup.html b/_includes/adops/adops-gam-video-setup.html
index b8091311fc..1825186ccd 100644
--- a/_includes/adops/adops-gam-video-setup.html
+++ b/_includes/adops/adops-gam-video-setup.html
@@ -39,16 +39,11 @@ <h2 id="line-item-setup">Line Item Setup</h2>
 <h2 id="creative-setup">Creative Setup</h2>
 
 When setting up video creatives, it's important to understand where the VAST XML is stored for each of your bidders. The most common place to store VAST XML is AppNexus' cache, but some bidders (such as RubiconProject and SpotX) use their own cache services. To support such
-bidders, you will need to choose one of the following approaches:
-<ul>
-<li>Create a separate line item for each bidder.</li>
-<li>Include a creative for each cache service utilized by your implementation.</li>
-<li>Use the <a href="/dev-docs/publisher-api-reference/setConfig.html#setConfig-vast-cache">ignoreBidderCacheKey</a> option on setConfig({cache}).</li>
-</ul>
+bidders, see the <a href="#multiple_cache_locations">Multiple Cache Locations</a> instructions below.
 
 <h3 id="creative-single-cache">Single Cache Location</h3>
 
-If you only use bidders that provide full VAST responses, no special setup is needed. Otherwise, do the following:
+If you only use bidders that provide full VAST responses, do the following:
 
 <p>1. For each line item you create, click on the <b>Creatives</b> tab, click the <b>ADD CREATIVE</b> button, and choose the size you're entering.</p>
 
@@ -75,12 +70,15 @@ <h3 id="creative-single-cache">Single Cache Location</h3>
    URL failed. This is expected, since the creative URL above points
    to a server-side asset cache hosted by Prebid Server.</p>
 
-<p>4. Set the <b>Duration</b> to <b>1</b>.</p>
+<p>4. Set the <b>Duration</b> to the max length of video ads you serve. If you don't know what the max length is, set it to <b>30</b>.</p>
+
+<p class="alert alert-warning">In the past Prebid used to recommend setting duration to 0 or 1, but GAM now requires that this field reflect the actual video ad length. Since ads flowing through header bidding are going to differ in length, choose a value that matches a common ad length like 15 or 30.</p>
 
 <p>The resulting creative should look something like the following:</p>
 
 <p><img src="/assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png" alt="Google Ad Manager Video Creative Setup"/></p>
 
+<a name="multiple_cache_locations">
 <h3 id="creative-multiple-cache">Multiple Cache Locations</h3>
 
 If you're utilizing any bidders that cache their own VAST, you have two options:
diff --git a/_includes/footer.html b/_includes/footer.html
index 04ccfbc31f..7e04247fd6 100644
--- a/_includes/footer.html
+++ b/_includes/footer.html
@@ -5,7 +5,7 @@
         <p>All demos, instructions, documentation and code included on the Prebid.org website are released under the <a href="{{site.licenseUrl}}" target="_blank">{{site.license}}</a>.</p>
       </div>
       <div class="col-sm-3 offset-sm-1">
-        <p>Copyright© {{site.time | date: "%Y" }} Prebid.org  |  Privacy Policy</p>
+        <p>Copyright© {{site.time | date: "%Y" }} Prebid.org | <a href="https://prebid.org/privacy-policy/">Privacy Policy</a></p>
       </div>
     </div>
   </div>
diff --git a/_includes/video/pb-os-app.html b/_includes/video/pb-os-app.html
index ad8d7977ae..554cdf1a6e 100644
--- a/_includes/video/pb-os-app.html
+++ b/_includes/video/pb-os-app.html
@@ -4,8 +4,8 @@
 <head>
 {% include head--common.html %}
     <!--production version of prebid.js-->
-    <script async src="//www.googletagservices.com/tag/js/gpt.js"></script>
-    <script async src="//acdn.adnxs.com/prebid/not-for-prod/prebid.js"></script>
+    <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
+    <script async src="https://acdn.adnxs.com/prebid/not-for-prod/prebid.js"></script>
 
     <!--AdPlayer.Pro code-->
     <script src="https://static.adplayer.pro/player/demo.js"></script>
diff --git a/_includes/video/pb-os-dfp.html b/_includes/video/pb-os-dfp.html
index 39dd69f517..fd22f18c4e 100644
--- a/_includes/video/pb-os-dfp.html
+++ b/_includes/video/pb-os-dfp.html
@@ -4,7 +4,7 @@
 <head>
 {% include head--common.html %}    
     <!--production version of prebid.js-->
-    <script async src="//www.googletagservices.com/tag/js/gpt.js"></script>
+    <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
     <script async src="//acdn.adnxs.com/prebid/not-for-prod/prebid.js"></script>
     
     <!--pbjs and player code -->	
diff --git a/_includes/video/pb-os-nas.html b/_includes/video/pb-os-nas.html
index 51bebd75aa..e995efd511 100644
--- a/_includes/video/pb-os-nas.html
+++ b/_includes/video/pb-os-nas.html
@@ -4,7 +4,7 @@
 <head>
 {% include head--common.html %}    
     <!--production version of prebid.js-->
-    <script async src="//www.googletagservices.com/tag/js/gpt.js"></script>
+    <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
     <script async src="//acdn.adnxs.com/prebid/not-for-prod/prebid.js"></script>
     
     <!--pbjs and player code -->	
diff --git a/_includes/video/pb-os-rd.html b/_includes/video/pb-os-rd.html
index 3c93ee2988..a68d4d5627 100644
--- a/_includes/video/pb-os-rd.html
+++ b/_includes/video/pb-os-rd.html
@@ -4,8 +4,8 @@
 <head>
 {% include head--common.html %}    
     <!--production version of prebid.js-->
-    <script async src="//www.googletagservices.com/tag/js/gpt.js"></script>
-    <script async src="//acdn.adnxs.com/prebid/not-for-prod/prebid.js"></script>
+    <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
+    <script async src="https://acdn.adnxs.com/prebid/not-for-prod/prebid.js"></script>
     
     <!--radiant code-->
 	<script src="https://cdn.radiantmediatechs.com/rmp/5.5.6/js/rmp.debug.js"></script>
diff --git a/_layouts/bidder.html b/_layouts/bidder.html
index 35f39c9de1..ef9165c1cd 100644
--- a/_layouts/bidder.html
+++ b/_layouts/bidder.html
@@ -76,7 +76,7 @@ <h3>Features</h3>
                   </tr>
                   <tr>
                     <th class="pbTh">Supports Deals</th>
-                    <td class="pbTd">{% if page.bidder_supports_deals == false %}no{% elsif page.bidder_supports_deals == true %}yes{% else %}check with bidder{% endif %}</td>
+                    <td class="pbTd">{% if page.deals_supported == false %}no{% elsif page.deals_supported == true %}yes{% else %}check with bidder{% endif %}</td>
                     <th class="pbTh">Prebid.js Adapter</th>
                     <td class="pbTd">yes</td>
                   </tr>
@@ -88,9 +88,9 @@ <h3>Features</h3>
                   </tr>
                   <tr>
                     <th class="pbTh">Floors Module Support</th>
-                    <td class="pbTd">{% if page.getFloor  == true %}yes{% else %}no{% endif %}</td>
-                    <th class="pbTh"></th>
-                    <td class="pbTd"></td>
+                    <td class="pbTd">{% if page.floors_supported  == true %}yes{% else %}no{% endif %}</td>
+                    <th class="pbTh">First Party Data Support</th>
+                    <td class="pbTd">{% if page.fpd_supported == true %}yes{% elsif page.fpd_supported == false %}no{% else %}check with bidder{% endif %}</td>
                   </tr>
                 </table>
 
diff --git a/_layouts/example.html b/_layouts/example.html
index dc97cef97a..c917458838 100644
--- a/_layouts/example.html
+++ b/_layouts/example.html
@@ -43,19 +43,11 @@ <h4>This page contains:</h4>
           </ul>
         </p>
 
-        <p>
-          On the JSFiddle example below, click <strong>Result</strong> to see the result.
-        </p>
-
-        <p>
-          Click <strong>Edit in JSFiddle</strong> to open the example in a new tab.
-        </p>
-
         <p>
           For tips and troubleshooting info, see:
           <ul>
             <li>
-              <a href="{{site.github.url}}/dev-docs/troubleshooting-tips.html">Tips for Troubleshooting</a>
+              <a href="/troubleshooting/troubleshooting-guide.html">Troubleshooting Guide</a>
             </li>
             <li>
               <a href="{{site.github.url}}/dev-docs/common-issues.html">Common Issues</a>
@@ -71,6 +63,14 @@ <h4>This page contains:</h4>
           </div>
         </div>
 
+	<p></p>
+        <p>
+          On the JSFiddle example below:
+	    <ul><li>click 'Result' to see the output of the page.</li>
+            <li>Click 'Edit in JSFiddle' to open the example in a new tab.</li></ul>
+        </p>
+
+
         <div class="row">
           <!-- JSFiddle -->
           <div id="jsfiddle" class="col-md-12">
diff --git a/adops/send-all-bids-adops.md b/adops/send-all-bids-adops.md
index ff3995e142..19129ea43a 100644
--- a/adops/send-all-bids-adops.md
+++ b/adops/send-all-bids-adops.md
@@ -28,7 +28,7 @@ As a publisher, you may want to have your ad server see **all** header bidding b
 See the [Publisher API Reference](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids) for more details.
 
 
-If you decide to send all bids to the ad sever, your developers have the option of explicity adding `enableSendAllBids: true` to `pbjs.setConfig()`.  However, since the default value is `true` this addition is not strictly necessary.  For details, see the [Publisher API Reference](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids).
+If you decide to send all bids to the ad sever, your developers have the option of explicitly adding `enableSendAllBids: true` to `pbjs.setConfig()`.  However, since the default value is `true` this addition is not strictly necessary.  For details, see the [Publisher API Reference](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids).
 
 From the ad ops side, you can choose to set up one order per bidder, which allows for each order to have a set of line items using targeting keywords that include the bidder's name.  For example, if you are working with [Rubicon](/dev-docs/bidders.html#rubicon), you would use `hb_pb_rubicon` in your line item's key-value targeting, and `hb_adid_rubicon` in the creative.
 
diff --git a/assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png b/assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png
index 851fbabf76..bb7b93c607 100644
Binary files a/assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png and b/assets/images/ad-ops/dfp-creative-setup/appnexus_vast_tag.png differ
diff --git a/assets/images/logos/criteo-logo.png b/assets/images/logos/criteo-logo.png
index 154a84a52c..b0f345438f 100644
Binary files a/assets/images/logos/criteo-logo.png and b/assets/images/logos/criteo-logo.png differ
diff --git a/assets/images/partners/tech/criteo.png b/assets/images/partners/tech/criteo.png
index 8d4f5e2322..b0f345438f 100644
Binary files a/assets/images/partners/tech/criteo.png and b/assets/images/partners/tech/criteo.png differ
diff --git a/assets/images/prebid-server/module-atags.png b/assets/images/prebid-server/module-atags.png
new file mode 100644
index 0000000000..2a626c5742
Binary files /dev/null and b/assets/images/prebid-server/module-atags.png differ
diff --git a/assets/images/prebid-server/module-example.png b/assets/images/prebid-server/module-example.png
new file mode 100644
index 0000000000..24e419909c
Binary files /dev/null and b/assets/images/prebid-server/module-example.png differ
diff --git a/assets/images/prebid-server/pg/pg-arch-1.png b/assets/images/prebid-server/pg/pg-arch-1.png
new file mode 100644
index 0000000000..9dd267d668
Binary files /dev/null and b/assets/images/prebid-server/pg/pg-arch-1.png differ
diff --git a/assets/images/prebid-server/pg/pg-arch-2.png b/assets/images/prebid-server/pg/pg-arch-2.png
new file mode 100644
index 0000000000..777c7d8ea8
Binary files /dev/null and b/assets/images/prebid-server/pg/pg-arch-2.png differ
diff --git a/assets/images/prebid-server/pg/pg-bad-delivery.png b/assets/images/prebid-server/pg/pg-bad-delivery.png
new file mode 100644
index 0000000000..d65208e82d
Binary files /dev/null and b/assets/images/prebid-server/pg/pg-bad-delivery.png differ
diff --git a/assets/images/prebid-server/pg/pg-good-delivery.png b/assets/images/prebid-server/pg/pg-good-delivery.png
new file mode 100644
index 0000000000..f5f6568700
Binary files /dev/null and b/assets/images/prebid-server/pg/pg-good-delivery.png differ
diff --git a/assets/images/prebid-server/pg/pg-metrics.png b/assets/images/prebid-server/pg/pg-metrics.png
new file mode 100644
index 0000000000..6ba0ef05eb
Binary files /dev/null and b/assets/images/prebid-server/pg/pg-metrics.png differ
diff --git a/assets/images/prebid-server/stored-requests-amp.png b/assets/images/prebid-server/stored-requests-amp.png
new file mode 100644
index 0000000000..426a5bce4f
Binary files /dev/null and b/assets/images/prebid-server/stored-requests-amp.png differ
diff --git a/assets/images/prebid-server/stored-requests-app.png b/assets/images/prebid-server/stored-requests-app.png
new file mode 100644
index 0000000000..9b0868d37a
Binary files /dev/null and b/assets/images/prebid-server/stored-requests-app.png differ
diff --git a/debugging/debugging.md b/debugging/debugging.md
index 47c4ba2a5c..906dba744c 100644
--- a/debugging/debugging.md
+++ b/debugging/debugging.md
@@ -20,5 +20,4 @@ benefit from implementation improvements.
 
 Further Reading
 
-+ [Prebid.js Troubleshooting Guide]({{site.github.url}}/dev-docs/prebid-troubleshooting-guide.html)
-+ [Prebid.js Troubleshooting Tips]({{site.github.url}}/dev-docs/troubleshooting-tips.html)
++ [Prebid.js Troubleshooting Guide](/dev-docs/prebid-troubleshooting-guide.html)
diff --git a/dev-docs/add-rtd-submodule.md b/dev-docs/add-rtd-submodule.md
index f025d6f5ad..b965c92cf9 100644
--- a/dev-docs/add-rtd-submodule.md
+++ b/dev-docs/add-rtd-submodule.md
@@ -280,6 +280,7 @@ Once everything looks good, submit the code, tests, and markdown as a pull reque
     ---
     layout: page_v2
     title: Example Module
+    display_name: Example
     description: Useful statement for what this does
     page_type: module
     module_type: rtd
diff --git a/dev-docs/adunit-reference.md b/dev-docs/adunit-reference.md
index f8be5d59ad..ad7436892b 100644
--- a/dev-docs/adunit-reference.md
+++ b/dev-docs/adunit-reference.md
@@ -594,7 +594,7 @@ For more information on Interstitial ads, reference the [Interstitial feature pa
 
 ## Related Topics
 
-+ [Publisher API Reference]({{site.baseurl}}/dev-docs/publisher-api-reference/)
++ [Publisher API Reference]({{site.baseurl}}/dev-docs/publisher-api-reference)
 + [Conditional Ad Units][conditionalAds]
 + [Show Native Ads]({{site.baseurl}}/dev-docs/show-native-ads.html)
 + [Show Video Ads]({{site.baseurl}}/dev-docs/show-video-with-a-dfp-video-tag.html)
diff --git a/dev-docs/analytics/bydata.md b/dev-docs/analytics/bydata.md
new file mode 100644
index 0000000000..9c6438e975
--- /dev/null
+++ b/dev-docs/analytics/bydata.md
@@ -0,0 +1,32 @@
+---
+layout: analytics
+title: byData
+description: byData Analytics Adapter
+modulecode: bydata 
+prebid_member: false
+--- 
+
+#### Registration
+
+The byData Analytics adapter requires setup and approval from the
+byData team. Please visit [https://bydata.com/](https://bydata.com/) for more information.
+
+#### Analytics Options
+
+{: .table .table-bordered .table-striped }
+| Parameter | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| clientId | Required  | String | The byData Client ID  | `asc10001` | 
+| logFrequency | Optional  | Int | Sample rate  | 100 |   
+  
+### Example Configuration 
+
+```js 
+    pbjs.enableAnalytics({
+        provider: "bydata",  
+        options: {
+            clientId:'asc10001',   // please contact byData team to get a clientId for yourself 
+            logFrequency : 100,    // Default - 1%       
+        }
+    });
+``` 
diff --git a/dev-docs/analytics/malltv.md b/dev-docs/analytics/malltv.md
new file mode 100644
index 0000000000..afd6256816
--- /dev/null
+++ b/dev-docs/analytics/malltv.md
@@ -0,0 +1,33 @@
+---
+layout: analytics
+title: MallTv
+description: MallTv Analytics Adapter
+modulecode: malltvAnalytics
+enable_download: true
+---
+
+#### Registration
+
+This is currently a private adapter
+
+#### Analytics Options
+
+{: .table .table-bordered .table-striped }
+| Parameter | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| provider | Required | String | The name of this module: `malltvAnalytics` | `malltvAnalytics` |
+| options.propertyId | Required | String | This is the property id of the website where this adapter is being used. | `123456` |
+| options.server | Optional | String | Overrides the server used for sending analytics | `https://central.mall.tv/analytics` |
+
+
+### Example Configuration
+
+```javascript
+pbjs.enableAnalytics({
+    provider: 'malltvAnalytics',
+    options: {
+        propertyId: '123456',
+        server: 'https://central.mall.tv/analytics'
+    }
+});
+```
diff --git a/dev-docs/bidder-adaptor.md b/dev-docs/bidder-adaptor.md
index 238b10bfb5..7050602302 100644
--- a/dev-docs/bidder-adaptor.md
+++ b/dev-docs/bidder-adaptor.md
@@ -194,7 +194,8 @@ export const spec = {
     getUserSyncs: function(syncOptions, serverResponses, gdprConsent, uspConsent) {},
     onTimeout: function(timeoutData) {},
     onBidWon: function(bid) {},
-    onSetTargeting: function(bid) {}
+    onSetTargeting: function(bid) {},
+    onBidderError: function({ error, bidderRequest })
 }
 registerBidder(spec);
 
@@ -376,6 +377,7 @@ The `interpretResponse` function will be called when the browser has received th
             brandId: BRAND_ID,
             brandName: BRAND_NAME,
             dchain: DEMAND_CHAIN_OBJECT,
+	    demandSource: DEMAND_SOURCE
             mediaType: MEDIA_TYPE,
             networkId: NETWORK_ID,
             networkName: NETWORK_NAME,
@@ -421,11 +423,23 @@ The parameters of the `bidResponse` object are:
 | `meta.advertiserDomains`     | Optional                                    | Array of Advertiser Domains for the landing page(s). This is an array to align with the OpenRTB 'adomain' field.    | `["advertisera.com"]`     |
 | `meta.brandId`     | Optional                                    | Bidder-specific Brand ID (some advertisers may have many brands)                                                                                                   | 4444                    |
 | `meta.brandName`     | Optional                                    | Brand Name                                   | `"BrandB"`                          |
+| `meta.demandSource`     | Optional                                    | Demand Source (Some adapters may functionally serve multiple SSPs or exchanges, and this would specify which)                                  | `"SourceB"`                          
 | `meta.dchain`     | Optional                                    | Demand Chain Object                                   | `{ 'ver': '1.0', 'complete': 0, 'nodes': [ { 'asi': 'magnite.com', 'bsid': '123456789', } ] }`                          |
 | `meta.primaryCatId`     | Optional                                    | Primary [IAB category ID](https://www.iab.com/guidelines/iab-quality-assurance-guidelines-qag-taxonomy/)               |  `"IAB-111"`                         |
 | `meta.secondaryCatIds`     | Optional                                    | Array of secondary IAB category IDs      | `["IAB-222","IAB-333"]`       |
 | `meta.mediaType`     | Optional                                  | "banner", "native", or "video" - this should be set in scenarios where a bidder responds to a "banner" mediaType with a creative that's actually a video (e.g. outstream) or native. | `"native"`  |
 
+#### Resolve OpenRTB Macros in the Creatives
+
+If your endpoint can return creatives with OpenRTB macros, your adapter
+should resolve them.
+
+Prebid will resolve the AUCTION_PRICE macro, but it will be after currency conversion and any bid adjustments. This differs from how OpenRTB defines this value as being the clearing price in the 
+bid currency. Header Bidding is a first-price auction, the best candidate for
+"clearing price" is the original bid itself.
+
+Prebid won't resolve any other macros in the creative (e.g. AUCTION_ID, AUCTION_CURRENCY).
+
 <a name="bidder-adaptor-Registering-User-Syncs" />
 
 ### Registering User Syncs
@@ -542,6 +556,34 @@ Sample data received by this function:
 }
 {% endhighlight %}
 
+### Registering on Bidder Error
+
+The `onBidderError` function will be called when the bidder responded with an error. Which means that the HTTP response status code is not between `200-299` and not equal to `304`.
+
+Sample data received by this function:
+
+{% highlight js %}
+{
+    error: XMLHttpRequest,
+    bidderRequest: {
+        {
+            auctionId: "b06c5141-fe8f-4cdf-9d7d-54415490a917",
+            auctionStart: 1579746300522,
+            bidderCode: "myBidderCode",
+            bidderRequestId: "15246a574e859f",
+            bids: [{...}],
+            gdprConsent: {consentString: "BOtmiBKOtmiBKABABAENAFAAAAACeAAA", vendorData: {...}, gdprApplies: true},
+            refererInfo: {
+                canonicalUrl: undefined,
+                numIframes: 0,
+                reachedTop: true,
+                referer: "http://mypage?pbjs_debug=true"
+            }
+        }
+    }
+}
+{% endhighlight %}
+
 ### Adding adapter aliases
 
 Use aliases if you want to reuse your adapter using other name for your partner/client, or just a shortcut name.
@@ -980,8 +1022,8 @@ export const spec = {
                 ad: CREATIVE_BODY
             };
             bidResponses.push(bidResponse);
+            return bidResponses;
         };
-        return bidResponses;
     },
 
     /**
@@ -1039,6 +1081,14 @@ export const spec = {
     onSetTargeting: function(bid) {
         // Bidder specific code
     }
+
+    /**
+     * Register bidder specific code, which will execute if the bidder responded with an error
+     * @param {error, bidderRequest} An object with the XMLHttpRequest error and the bid request object
+     */
+    onBidderError: function({ error, bidderRequest }) {
+        // Bidder specific code
+    }
 }
 registerBidder(spec);
 
@@ -1056,15 +1106,16 @@ registerBidder(spec);
     - Add `pbjs: true`. If you also have a [Prebid Server bid adapter](/prebid-server/developers/add-new-bidder-go.html), add `pbs: true`. Default is false for both.
     - If you're on the IAB Global Vendor List, add your ID number in `gvl_id`.
     - If you support the GDPR consentManagement module and have a GVL ID, you may add `gdpr_supported: true`. Default is false.
-    - If you have an IAB Global Vendor List ID, add `gvl_id: ID`. There's no default.
     - If you support the US Privacy consentManagementUsp module, add `usp_supported: true`. Default is false.
     - If you support one or more userId modules, add `userId: (list of supported vendors)`. No default value.
     - If you support video and/or native mediaTypes add `media_types: video, native`. Note that display is added by default. If you don't support display, add "no-display" as the first entry, e.g. `media_types: no-display, native`. No default value.
     - If you support COPPA, add `coppa_supported: true`. Default is false.
     - If you support the [supply chain](/dev-docs/modules/schain.html) feature, add `schain_supported: true`. Default is false.
-    - If you support passing a demadn chain on the response, add `dchain_supported: true`. Default is false.
+    - If you support passing a demand chain on the response, add `dchain_supported: true`. Default is false.
     - If your bidder doesn't work well with safeframed creatives, add `safeframes_ok: false`. This will alert publishers to not use safeframed creatives when creating the ad server entries for your bidder. No default value.
-    - If you support deals, set `bidder_supports_deals: true`. No default value..
+    - If you support deals, set `deals_supported: true`. No default value..
+    - If you support floors, set `floors_supported: true`. No default value..
+    - If you support first party data, set `fpd_supported: true`. No default value..
     - If you're a member of Prebid.org, add `prebid_member: true`. Default is false.
 - Submit both the code and docs pull requests
 
@@ -1077,7 +1128,7 @@ description: Prebid example Bidder Adapter
 biddercode: example
 aliasCode: fileContainingPBJSAdapterCodeIfDifferentThenBidderCode
 gdpr_supported: true/false
-gvl_id: 111
+gvl_id: none
 usp_supported: true/false
 coppa_supported: true/false
 schain_supported: true/false
@@ -1085,11 +1136,12 @@ dchain_supported: true/false
 userId: (list of supported vendors)
 media_types: banner, video, native
 safeframes_ok: true/false
-bidder_supports_deals: true/false
+deals_supported: true/false
+floors_supported: true/false
+fpd_supported: true/false
 pbjs: true/false
 pbs: true/false
 prebid_member: true/false
-gvl_id: none
 ---
 ### Note:
 
diff --git a/dev-docs/bidder-data.csv b/dev-docs/bidder-data.csv
index 0cbf9761ab..b633024b54 100644
--- a/dev-docs/bidder-data.csv
+++ b/dev-docs/bidder-data.csv
@@ -2,6 +2,6 @@
 layout: none
 search: exclude
 ---
-bidder-code,bidder-name,banner,video,native,gdpr,schain,coppa,usp,safeframes,deals,client-adapter,server-adapter,user-ids,usp,mobile-apps,floors,prebid-member
-{% assign bidder_pages = site.pages | where: "layout", "bidder" %}{% for page in bidder_pages %}{{ page.biddercode }},{{ page.title }},{% if page.media_types contains 'banner' %}yes{% else %}no{% endif %},{% if page.media_types contains 'video' %}yes{% else %}no{% endif %},{% if page.media_types contains 'native' %}yes{% else %}no{% endif %},{% if page.gdpr_supported == true %}yes{% else %}no{% endif %},{% if page.schain_supported  == true %}yes{% else %}no{% endif %},{% if page.coppa_supported == true %}yes{% else %}no{% endif %},{% if page.usp_supported == true %}yes{% else %}no{% endif %},{% if page.safeframes_ok and page.safeframes_ok == false %}no{% elsif page.safeframes_ok and page.safeframes_ok == true %}yes{% else %}check with bidder{% endif %},{% if page.bidder_supports_deals and page.bidder_supports_deals == false %}no{% else %}yes{% endif %},{% if page.pbjs == true %}yes{% else %}no{% endif %},{% if page.pbs == true %}yes{% else %}no{% endif %},{% if page.userIds and page.userIds != '' %}"{{page.userIds}}"{% else %}none{% endif %},{% if page.usp_supported == true %}yes{% else %}no{% endif %},{% if page.pbs_app_supported and page.pbs_app_supported == false %}no{% elsif page.pbs_app_supported and page.pbs_app_supported == true %}yes{% elsif page.pbs and page.pbs == false %}no{% elsif page.pbs==nil %}no{% else %}check with bidder{% endif %},{% if page.getFloor == true %}yes{% else %}no{% endif %},{% if page.prebid_member == true %}yes{% else %}no{% endif %}
+bidder-code,bidder-name,banner,video,native,gdpr,schain,coppa,usp,safeframes,deals,client-adapter,server-adapter,user-ids,usp,mobile-apps,floors,fpd,prebid-member
+{% assign bidder_pages = site.pages | where: "layout", "bidder" %}{% for page in bidder_pages %}{{ page.biddercode }},{{ page.title }},{% if page.media_types contains 'banner' %}yes{% else %}no{% endif %},{% if page.media_types contains 'video' %}yes{% else %}no{% endif %},{% if page.media_types contains 'native' %}yes{% else %}no{% endif %},{% if page.gdpr_supported == true %}yes{% else %}no{% endif %},{% if page.schain_supported  == true %}yes{% else %}no{% endif %},{% if page.coppa_supported == true %}yes{% else %}no{% endif %},{% if page.usp_supported == true %}yes{% else %}no{% endif %},{% if page.safeframes_ok and page.safeframes_ok == false %}no{% elsif page.safeframes_ok and page.safeframes_ok == true %}yes{% else %}check with bidder{% endif %},{% if page.deals_supported and page.deals_supported == false %}no{% else %}yes{% endif %},{% if page.pbjs == true %}yes{% else %}no{% endif %},{% if page.pbs == true %}yes{% else %}no{% endif %},{% if page.userIds and page.userIds != '' %}"{{page.userIds}}"{% else %}none{% endif %},{% if page.usp_supported == true %}yes{% else %}no{% endif %},{% if page.pbs_app_supported and page.pbs_app_supported == false %}no{% elsif page.pbs_app_supported and page.pbs_app_supported == true %}yes{% elsif page.pbs and page.pbs == false %}no{% elsif page.pbs==nil %}no{% else %}check with bidder{% endif %},{% if page.floors_supported == true %}yes{% else %}no{% endif %},{% if page.fpd_supported == true %}yes{% elsif page.fpd_supported == false %}no{% else %}check with bidder{% endif %},{% if page.prebid_member == true %}yes{% else %}no{% endif %}
 {% endfor %}
diff --git a/dev-docs/bidders.md b/dev-docs/bidders.md
index 98cb8f9906..523c77f224 100644
--- a/dev-docs/bidders.md
+++ b/dev-docs/bidders.md
@@ -41,7 +41,7 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
   {% assign firstletter = page.title | slice:0 | downcase %}
   {% unless firstletter == "0" or firstletter == "1" or firstletter == "2" or firstletter == "3" or firstletter == "4" or firstletter == "5" or firstletter == "6" or firstletter == "7" or firstletter == "8" or firstletter == "9" or firstletter == "a" %}{% continue %}{% endunless %}
   <li>
-  <a href="bidders/{{ page.biddercode }}">{{ page.title }}</a>
+  <a href="{{ page.url }}">{{ page.title }}</a>
   </li>
 {% endfor %}
 </ul>
@@ -52,7 +52,7 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
   {% assign firstletter = page.title | slice:0 | downcase %}
   {% unless firstletter == "b" or firstletter == "c" %}{% continue %}{% endunless %}
   <li>
-  <a href="bidders/{{ page.biddercode }}">{{ page.title }}</a>
+  <a href="{{ page.url }}">{{ page.title }}</a>
   </li>
 {% endfor %}
 </ul>
@@ -63,7 +63,7 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
   {% assign firstletter = page.title | slice:0 | downcase %}
   {% unless firstletter == "d" or firstletter == "e" or firstletter == "f" or firstletter == "g" %}{% continue %}{% endunless %}
   <li>
-  <a href="bidders/{{ page.biddercode }}">{{ page.title }}</a>
+  <a href="{{ page.url }}">{{ page.title }}</a>
   </li>
 {% endfor %}
 </ul>
@@ -74,7 +74,7 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
   {% assign firstletter = page.title | slice:0 | downcase %}
   {% unless firstletter == "h" or firstletter == "i" or firstletter == "j" or firstletter == "k" or firstletter == "l" %}{% continue %}{% endunless %}
   <li>
-  <a href="bidders/{{ page.biddercode }}">{{ page.title }}</a>
+  <a href="{{ page.url }}">{{ page.title }}</a>
   </li>
 {% endfor %}
 </ul>
@@ -85,7 +85,7 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
   {% assign firstletter = page.title | slice:0 | downcase %}
   {% unless firstletter == "m" or firstletter == "n" or firstletter == "o" %}{% continue %}{% endunless %}
   <li>
-  <a href="bidders/{{ page.biddercode }}">{{ page.title }}</a>
+  <a href="{{ page.url }}">{{ page.title }}</a>
   </li>
 {% endfor %}
 </ul>
@@ -96,7 +96,7 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
   {% assign firstletter = page.title | slice:0 | downcase %}
   {% unless firstletter == "p" or firstletter == "q" or firstletter == "r" %}{% continue %}{% endunless %}
   <li>
-  <a href="bidders/{{ page.biddercode }}">{{ page.title }}</a>
+  <a href="{{ page.url }}">{{ page.title }}</a>
   </li>
 {% endfor %}
 </ul>
@@ -107,7 +107,7 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
   {% assign firstletter = page.title | slice:0 | downcase %}
   {% unless firstletter == "s" or firstletter == "t" %}{% continue %}{% endunless %}
   <li>
-  <a href="bidders/{{ page.biddercode }}">{{ page.title }}</a>
+  <a href="{{ page.url }}">{{ page.title }}</a>
   </li>
 {% endfor %}
 </ul>
@@ -118,7 +118,7 @@ var AutocompleteList = [{% for page in bidder_pages %}{ label: '{{ page.title }}
   {% assign firstletter = page.title | slice:0 | downcase %}
   {% unless firstletter == "u" or firstletter == "v" or firstletter == "w" or firstletter == "x" or firstletter == "y" or firstletter == "z" %}{% continue %}{% endunless %}
   <li>
-  <a href="bidders/{{ page.biddercode }}">{{ page.title }}</a>
+  <a href="{{ page.url }}">{{ page.title }}</a>
   </li>
 {% endfor %}
 </ul>
diff --git a/dev-docs/bidders/33across.md b/dev-docs/bidders/33across.md
index 17d07de9f0..91934b90ae 100644
--- a/dev-docs/bidders/33across.md
+++ b/dev-docs/bidders/33across.md
@@ -7,7 +7,7 @@ pbs: true
 biddercode: 33across
 media_types: banner, video
 gdpr_supported: true
-getFloor: true
+floors_supported: true
 schain_supported: true
 usp_supported: true
 userIds: all
@@ -156,4 +156,13 @@ var adUnits = [
   ...
 }
 ```
-
+### SRA Mode
+We recommend using SRA mode to optimize the bidding process as this allows our adapter to group together bid requests for Ad Units pertaining to the same product and site ID thereby minimizing the number of http requests made to our endpoint. To enable SRA set the following bidder specific config under 33Across
+```
+pbjs.setBidderConfig({
+   bidders: ['33across'],
+   config: {
+      enableSRAMode: true
+   }
+});
+```
\ No newline at end of file
diff --git a/dev-docs/bidders/aceex.md b/dev-docs/bidders/aceex.md
new file mode 100644
index 0000000000..e380d3aa54
--- /dev/null
+++ b/dev-docs/bidders/aceex.md
@@ -0,0 +1,27 @@
+---
+layout: bidder
+title: Aceex
+description: Prebid Aceex Bidder Adaptor
+biddercode: aceex
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+userId: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+media_types: banner, video, native
+safeframes_ok: true
+deals_supported: true
+pbjs: false
+pbs: true
+---
+
+### Note:
+
+The Example Bidding adapter requires setup before beginning. Please contact us at tech@aceex.com
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `accountid`      | required | Endpoint id | `'hash'`    | `string` |
diff --git a/dev-docs/bidders/acuityads.md b/dev-docs/bidders/acuityads.md
index a6f10c6e20..95d4784821 100644
--- a/dev-docs/bidders/acuityads.md
+++ b/dev-docs/bidders/acuityads.md
@@ -10,7 +10,7 @@ schain_supported: true
 userId: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
 media_types: banner, video, native
 safeframes_ok: true
-bidder_supports_deals: true
+deals_supported: true
 pbjs: false
 pbs: true
 ---
diff --git a/dev-docs/bidders/adagio.md b/dev-docs/bidders/adagio.md
index d658da1cbe..8c311afc1a 100644
--- a/dev-docs/bidders/adagio.md
+++ b/dev-docs/bidders/adagio.md
@@ -6,13 +6,15 @@ pbjs: true
 biddercode: adagio
 media_types: banner, native, video
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, pubProvidedId, sharedId, unifiedId
-getFloor: true
+floors_supported: true
 gdpr_supported: true
 usp_supported: true
 coppa_supported: true
 schain_supported: true
 gvl_id: 617
-prebid_member: true,
+prebid_member: true
+pbs: true
+fpd_supported: true
 ---
 
 ### Note
diff --git a/dev-docs/bidders/adblender.md b/dev-docs/bidders/adblender.md
index 94830f05fe..6f3edddf6a 100644
--- a/dev-docs/bidders/adblender.md
+++ b/dev-docs/bidders/adblender.md
@@ -13,6 +13,7 @@ usp_supported: true
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name   | Scope    | Description | Example | Type     |
-|--------|----------|-------------|---------|----------|
-| `zone` | required |             |         | `string` |
+| Name          | Scope    | Description                                                                                                      | Example                                | Type     |
+|---------------|----------|------------------------------------------------------------------------------------------------------------------|----------------------------------------|----------|
+| `zone`        | required | The unique identifier of the ad placement. Could be obtained from the AdBlender UI or from your account manager. | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` |
+| `kvTargeting` | optional | Key/Value - a pair of the unique values that will be used for the custom targeting option.                       | {key1: value2, key2: value2}           | `object` |
diff --git a/dev-docs/bidders/adf.md b/dev-docs/bidders/adf.md
index 34f70931ed..6854ef685e 100644
--- a/dev-docs/bidders/adf.md
+++ b/dev-docs/bidders/adf.md
@@ -9,21 +9,26 @@ usp_supported: true
 prebid_member: true
 pbjs: true
 pbs: true
+schain_supported: true
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, sharedId, unifiedId
 gvl_id: 50
 prevBiddercode: adformOpenRTB
+floors_supported: true
+fpd_supported: true
 ---
 
 ### Bid params
 
 {: .table .table-bordered .table-striped }
-| Name        | Scope    | Description          | Example            | Type      |
-|-------------|----------|----------------------|--------------------|-----------|
-| `mid`       | required |                      | `12345`            | `integer` |
-| `adxDomain` | optional | The Adform domain    | `'adx.adform.net'` | `string`  |
-| `priceType` | optional | Price type           | `'gross'`          | `string`  |
+| Name        | Scope                      | Description          | Example            | Type      |
+|-------------|----------------------------|----------------------|--------------------|-----------|
+| `mid`       | required, if `inv` and `nmane` not set | Placement ID | `12345`        | `integer` |
+| `inv`       | required, if `mid` not set | Inventory source ID  | `1234`             | `integer` |
+| `mname`     | required, if `mid` not set | Placement name       | `"Leaderboard"`    | `string`  |
+| `adxDomain` | optional, Prebid.js only   | The Adform domain    | `"adx.adform.net"` | `string`  |
+| `priceType` | optional, Prebid.js only   | Price type           | `"gross"`          | `string`  |
 
-Note: prebid-server adapter supports only `mid` parameter - other params could be set by adjusting prebid-server openRTB request.
+Note: Bid placement should be defined using the `mid` parameter or `inv` and `mname` parameters (dynamic master tag) but not both.
 
 ### OpenRTB request config
 
@@ -38,7 +43,3 @@ pbjs.setConfig({
   }
 });
 ```
-
-### Multi-format ads
-
-Adform bid adapter does not support multi-format ad unit setup. Please use [twin ad unit codes]({{site.baseurl}}/dev-docs/adunit-reference.html#twin-adunit-codes) to enable multi-format auctions.
diff --git a/dev-docs/bidders/adgeneration.md b/dev-docs/bidders/adgeneration.md
index 812cfbecd7..8ff03a0902 100644
--- a/dev-docs/bidders/adgeneration.md
+++ b/dev-docs/bidders/adgeneration.md
@@ -6,7 +6,6 @@ pbjs: true
 pbs: true
 biddercode: adgeneration
 media_types: native
-pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/adhash.md b/dev-docs/bidders/adhash.md
index 191bbec27c..f341d3e6de 100644
--- a/dev-docs/bidders/adhash.md
+++ b/dev-docs/bidders/adhash.md
@@ -5,7 +5,7 @@ description: Prebid AdHash Bidder Adapter
 pbjs: true
 biddercode: adhash
 safeframes_ok: false
-pbjs_version_notes: not in 5.x
+gdpr_supported: true
 ---
 
 ### Note
@@ -27,4 +27,4 @@ Please note that a number of AdHash functionalities are not supported in the Pre
 | Name          | Scope    | Description  | Example                                        | Type     |
 |---------------|----------|--------------|------------------------------------------------|----------|
 | `publisherId` | required | Publisher ID | `'0x1234567890123456789012345678901234567890'` | `string` |
-| `platformURL` | required | Platform URL | `'https://adhash.org/p/struma/'`               | `string` |
+| `platformURL` | required | Platform URL | `'https://adhash.org/p/example/'`              | `string` |
diff --git a/dev-docs/bidders/adhese.md b/dev-docs/bidders/adhese.md
index 07e592417d..d0bcaea03c 100644
--- a/dev-docs/bidders/adhese.md
+++ b/dev-docs/bidders/adhese.md
@@ -10,7 +10,6 @@ gdpr_supported: true
 userIds: id5Id
 gvl_id: 553
 pbs_app_supported: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Registration
diff --git a/dev-docs/bidders/adman.md b/dev-docs/bidders/adman.md
index 821ed67f9d..04077daf73 100644
--- a/dev-docs/bidders/adman.md
+++ b/dev-docs/bidders/adman.md
@@ -7,8 +7,8 @@ pbs: true
 biddercode: adman
 gdpr_supported: true
 usp_supported: true
-media_types: banner, video
-pbjs_version_notes: not in 5.x
+media_types: banner, video, native
+userIds: uid2
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/admixer.md b/dev-docs/bidders/admixer.md
index d2fa0061e5..67ebf06294 100644
--- a/dev-docs/bidders/admixer.md
+++ b/dev-docs/bidders/admixer.md
@@ -9,12 +9,14 @@ media_types: video
 gdpr_supported: true
 usp_supported: true
 schain_supported: true
+fpd_supported: true
 gvl_id: 511
 ---
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name   | Scope    | Description | Example | Type     |
-|--------|----------|-------------|---------|----------|
-| `zone` | required |             |         | `string` |
+| Name          | Scope    | Description                                                                                                    | Example                                | Type     |
+|---------------|----------|----------------------------------------------------------------------------------------------------------------|----------------------------------------|----------|
+| `zone`        | required | The unique identifier of the ad placement. Could be obtained from the Admixer UI or from your account manager. | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` |
+| `kvTargeting` | optional | Key/Value - a pair of the unique values that will be used for the custom targeting option.                     | {key1: value2, key2: value2}           | `object` |
diff --git a/dev-docs/bidders/adnuntius.md b/dev-docs/bidders/adnuntius.md
index cdb2766ccd..08603cfcbe 100644
--- a/dev-docs/bidders/adnuntius.md
+++ b/dev-docs/bidders/adnuntius.md
@@ -3,9 +3,12 @@ layout: bidder
 title: Adnuntius
 description: Prebid Adnuntius Bidder Adaptor
 pbjs: true
+pbs: true
 biddercode: adnuntius
 media_types: banner
 gdpr_supported: true
+fpd_supported: true
+gvl_id: 855
 ---
 
 ### Bid Params
@@ -53,23 +56,44 @@ Here's an example of sending targeting information about categories to adnuntius
 There's an option to send segment id in the bidder config that will be picked up and sent to the ad server. Below is an example on how to do this:
 
 ```
+pbjs.setBidderConfig({
+    bidders: ['adnuntius', 'bidderB'],
+    config: {
+        ortb2: {
+            user: {
+                data: [{
+                    name: "adnuntius",
+                    segment: [
+                        { id: "1" },
+                        { id: "2" }
+                    ]
+                }]
+            }
+        }
+    }
+});
+```
+
+### Prebid Server Test Request
 
-			pbjs.setBidderConfig({
-				bidders: ['adnuntius', 'bidderB'],
-				config: {
-					ortb2: {
-						user: {
-							data: [{
-								name: "adnuntius",
-								segment: [
-									{ id: "1" },
-									{ id: "2" }
-								]
-							}]
-						}
-					}
-				}
-			});
+The following test parameters can be used to verify that Prebid Server is working properly with the server-side Adnuntius adapter. the `auId` below will not return a creative. Please substitute it with your own.
 
-´´´
+```
+"imp": [{
+    "id": "impression-id",
+    "banner": {
+        "format": [{
+            "w": 980,
+            "h": 240
+        }, {
+            "w": 980,
+            "h": 360
+        }]
+    },
+    "ext": {
+        "adnuntius": {
+            "auId": "abc123"
+        }
+    }
+}]
 ```
diff --git a/dev-docs/bidders/adpartner.md b/dev-docs/bidders/adpartner.md
index caddd1ad55..ead43860ca 100644
--- a/dev-docs/bidders/adpartner.md
+++ b/dev-docs/bidders/adpartner.md
@@ -5,12 +5,11 @@ description: Prebid AdPartner Bidder Adaptor
 pbjs: true
 biddercode: adpartner
 media_types: banner
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name     | Scope    | Description | Example              | Type      |
-|----------|----------|-------------|----------------------|-----------|
-| `unitId` | required | Unit ID.    | `5809`               | `integer` | 
+| Name        | Scope    | Description | Example              | Type      |
+|-------------|----------|-------------|----------------------|-----------|
+| `partnerId` | required | Partner ID. | `5809`               | `integer` | 
diff --git a/dev-docs/bidders/adpone.md b/dev-docs/bidders/adpone.md
index 608b228ff1..c2da708ebd 100644
--- a/dev-docs/bidders/adpone.md
+++ b/dev-docs/bidders/adpone.md
@@ -5,7 +5,7 @@ description: Prebid Adpone Bidder Adaptor
 pbjs: true
 pbs: true
 biddercode: adpone
-bidder_supports_deals: false
+deals_supported: false
 media_types: banner
 gvl_id: 799
 ---
diff --git a/dev-docs/bidders/adprime.md b/dev-docs/bidders/adprime.md
index 11bd34ba16..4452ddfc97 100644
--- a/dev-docs/bidders/adprime.md
+++ b/dev-docs/bidders/adprime.md
@@ -5,11 +5,11 @@ description: Prebid Adprime Bidder Adapter
 biddercode: adprime
 gdpr_supported: true
 usp_supported: true
-media_types: banner, video
+media_types: banner, video, native
+tcf2_supported: true
 pbjs: true
 pbs: true
 pbs_app_supported: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
@@ -23,4 +23,5 @@ The Adprime Bidding adapter requires setup before beginning. Please contact us a
 |---------------|----------|-----------------------|-----------|-----------|
 | `placementId`      | required | Adprime placement id         | `'1234asdf'`    | `string` |
 | `keywords`    | optional | page context keywords | ['car','sport'] | `array` |
+| `audiences`    | optional | publisher audiences | ['aud1','aud2'] | `array` |
 
diff --git a/dev-docs/bidders/adquery.md b/dev-docs/bidders/adquery.md
new file mode 100644
index 0000000000..8ab327d42b
--- /dev/null
+++ b/dev-docs/bidders/adquery.md
@@ -0,0 +1,19 @@
+---
+layout: bidder
+title: Adquery
+description: Prebid Adquery Bidder Adaptor
+pbjs: true
+biddercode: adquery
+gdpr_supported: true
+usp_supported: true
+schain_supported: true
+gvl_id: 902
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description   | Example                                   | Type      |
+|---------------|----------|---------------|-------------------------------------------|-----------|
+| `placementId` | required | Placement ID  | `6d93f2a0e5f0fe2cc3a6e9e3ade964b43b07f897`| `string`  |
+| `type`        | required | Ad Type       | `banner300x250`                           | `string`  |
diff --git a/dev-docs/bidders/adrelevantis.md b/dev-docs/bidders/adrelevantis.md
index 97ceab7c8a..1d132f2b03 100644
--- a/dev-docs/bidders/adrelevantis.md
+++ b/dev-docs/bidders/adrelevantis.md
@@ -4,6 +4,7 @@ title: Adrelevantis
 description: Prebid Adrelevantis (adrelevantis.xyz) Bidder Adaptor
 biddercode: adrelevantis
 media_types: banner, video, native
+fpd_supported: true
 pbjs: true
 ---
 
diff --git a/dev-docs/bidders/adriver.md b/dev-docs/bidders/adriver.md
index 3461aceb2c..1a69fb4108 100644
--- a/dev-docs/bidders/adriver.md
+++ b/dev-docs/bidders/adriver.md
@@ -4,9 +4,9 @@ title: adriver
 description: Adriver adapter
 biddercode: adriver
 pbjs: true
-bidder_supports_deals: true
+deals_supported: true
 userIds: sharedId, id5Id, uid2Id
-getFloor: true
+floors_supported: true
 ---
 
 
diff --git a/dev-docs/bidders/adsyield.md b/dev-docs/bidders/adsyield.md
new file mode 100644
index 0000000000..f8e7b1b758
--- /dev/null
+++ b/dev-docs/bidders/adsyield.md
@@ -0,0 +1,18 @@
+---
+layout: bidder
+title: AdsYield
+description: Prebid AdsYield Bidder Adaptor
+pbjs: true
+biddercode: adsyield
+aliasCode: admixer
+media_types: video
+gdpr_supported: true
+usp_supported: true
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description                                                                                                      | Example                                | Type     |
+|---------------|----------|------------------------------------------------------------------------------------------------------------------|----------------------------------------|----------|
+| `zone`        | required | The unique identifier of the ad placement. Could be obtained from the AdsYield UI or from your account manager. | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` |
diff --git a/dev-docs/bidders/advangelists.md b/dev-docs/bidders/advangelists.md
index 0d5f47a56d..79fdaca310 100644
--- a/dev-docs/bidders/advangelists.md
+++ b/dev-docs/bidders/advangelists.md
@@ -5,7 +5,6 @@ description: Prebid Advangelists Bidder Adapter
 pbjs: true
 pbs: true
 biddercode: advangelists
-pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/adxcg.md b/dev-docs/bidders/adxcg.md
index 9f85e7170e..f7803f0ac5 100644
--- a/dev-docs/bidders/adxcg.md
+++ b/dev-docs/bidders/adxcg.md
@@ -2,7 +2,7 @@
 layout: bidder
 title: adxcg
 description: Prebid adxcg bidder adaptor
-bidder_supports_deals: true
+deals_supported: true
 pbjs: true
 pbs: true
 pbs_app_supported: true
diff --git a/dev-docs/bidders/adyoulike.md b/dev-docs/bidders/adyoulike.md
index cdfc18ccca..a8f6b5a454 100644
--- a/dev-docs/bidders/adyoulike.md
+++ b/dev-docs/bidders/adyoulike.md
@@ -8,6 +8,7 @@ media_types: banner, video, native
 biddercode: adyoulike
 gdpr_supported: true
 usp_supported: true
+floors_supported: true
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/afp.md b/dev-docs/bidders/afp.md
new file mode 100644
index 0000000000..07e3d197ea
--- /dev/null
+++ b/dev-docs/bidders/afp.md
@@ -0,0 +1,201 @@
+---
+layout: bidder
+title: AFP
+description: Prebid AFP Bidder Adapter
+pbjs: true
+media_types: banner, video
+biddercode: afp
+safeframes_ok: false
+---
+
+### Note
+
+You can use this adapter to get a bid from AFP.
+Please reach out to your AFP account team before using this plugin to get placeId.
+The code below returns a demo ad.
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name                | Scope                                                   | Description                                                                                               | Example                                                                                                                                                                       | Type      |
+|---------------------|---------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|
+| `placeId`           | required                                                | Place id.                                                                                                 | '5af45ad34d506ee7acad0c26'                                                                                                                                                    | `string`  |
+| `placeType`         | required                                                | Place type.                                                                                               | 'In-image', 'In-image Max', 'In-content Banner', 'In-content Video', 'Out-content Video', 'In-content Stories', 'Action Scroller', 'Action Scroller Light', 'Just Banner'     | `string`  |
+| `placeContainer`    | required (if the frame is not safe)                     | The container of the place where the ad will be displayed. The css selector is specified as the value.    | '#container'                                                                                                                                                                  | `string`  |
+| `imageUrl`          | required (for 'In-image', 'In-image Max' placeType)     | URL of the image on which the banner will be displayed.                                                   | 'https://creative.astraone.io/files/default_image-1-600x400.jpg'                                                                                                              | `string`  |
+| `imageWidth`        | required (for 'In-image', 'In-image Max' placeType)     | Image width.                                                                                              | 600                                                                                                                                                                           | `integer` |
+| `imageHeight`       | required (for 'In-image', 'In-image Max' placeType)     | Image height.                                                                                             | 400                                                                                                                                                                           | `integer` |
+
+
+### InImage Example page
+
+
+```html
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="UTF-8">
+	<title>Prebid.js In-image Example</title>
+	<script async src="prebid.js"></script>
+	<script>
+		var adUnits = [{
+			code: 'iib-target',
+			mediaTypes: {
+				banner: {
+					sizes: [0, 0],
+				}
+			},
+			bids: [{
+				bidder: "afp",
+				params: {
+					placeType: "In-image",
+					placeId: "613221112871613d1517d181",
+					placeContainer: '#iib-container',
+					imageUrl: "https://rtbinsight.ru/content/images/size/w1000/2021/05/ximage-30.png.pagespeed.ic.IfuX4zAEPP.png",
+					imageWidth: 1000,
+					imageHeight: 524,
+				}
+			}]
+		},{
+			code: 'jb-target',
+			mediaTypes: {
+				banner: {
+					sizes: [[300, 250]],
+				}
+			},
+			bids: [{
+				bidder: "afp",
+				params: {
+					placeType: "Just Banner",
+					placeId: "6139ae832871613d1517dee9", // id from personal account
+					placeContainer: '#jb-container',
+				}
+			}]
+		}];
+		
+		var pbjs = pbjs || {};
+		pbjs.que = pbjs.que || [];
+		
+		pbjs.que.push(function() {
+			pbjs.addAdUnits(adUnits);
+			pbjs.requestBids({
+				bidsBackHandler: function (e) {
+					if (pbjs.adserverRequestSent) return;
+					pbjs.adserverRequestSent = true;
+					var params = pbjs.getAdserverTargetingForAdUnitCode("iib-target");
+					var iframe = document.getElementById("iib-target");
+					
+					if (params && params['hb_adid']) {
+						pbjs.renderAd(iframe.contentDocument, params['hb_adid']);
+					}
+					
+					params = pbjs.getAdserverTargetingForAdUnitCode("jb-target");
+					iframe = document.getElementById("jb-target");
+					
+					if (params && params['hb_adid']) {
+						pbjs.renderAd(iframe.contentDocument, params['hb_adid']);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body>
+<h2>In-image</h2>
+<div class="container-wrapper">
+	<div id="iib-container" style="max-width: 600px;">
+		<img src="https://creative.astraone.io/files/default_image-1-600x400.jpg" width="100%" />
+	</div>
+	<iframe id="iib-target" style="display: none;"></iframe>
+</div>
+
+<h2>Just Banner</h2>
+<div class="container-wrapper">
+	<div id="jb-container"></div>
+	<iframe id="jb-target" style="display: none;"></iframe>
+</div>
+</body>
+</html>
+```
+### InImage Example page with GPT
+
+```html
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="UTF-8">
+	<title>Prebid.js In-image Example</title>
+	<script async src="https://www.googletagservices.com/tag/js/gpt.js"></script>
+	<script async src="prebid.js"></script>
+	<script>
+		var adUnits = [{
+			code: 'div-gpt-ad-1574864639578-0',
+			mediaTypes: {
+				banner: {
+					sizes: [0, 0],
+				}
+			},
+			bids: [{
+				bidder: "afp",
+				params: {
+					placeType: "In-image",
+					placeId: "613221112871613d1517d181",
+					placeContainer: '#iib-container',
+					imageUrl: "https://rtbinsight.ru/content/images/size/w1000/2021/05/ximage-30.png.pagespeed.ic.IfuX4zAEPP.png",
+					imageWidth: 600,
+					imageHeight: 400,
+				}
+			}]
+		}];
+		
+		var pbjs = pbjs || {};
+		pbjs.que = pbjs.que || [];
+		
+		var googletag = googletag || {};
+		googletag.cmd = googletag.cmd || [];
+		
+		googletag.cmd.push(() => {
+			googletag.pubads().disableInitialLoad();
+		});
+		
+		pbjs.que.push(() => {
+			pbjs.addAdUnits(adUnits);
+			pbjs.requestBids({ bidsBackHandler: sendAdServerRequest });
+		});
+		
+		function sendAdServerRequest() {
+			googletag.cmd.push(() => {
+				pbjs.que.push(() => {
+					pbjs.setTargetingForGPTAsync('div-gpt-ad-1574864639578-0');
+					googletag.pubads().refresh();
+				});
+			});
+		}
+		
+		googletag.cmd.push(() => {
+			googletag
+				.defineSlot('/19968336/header-bid-tag-0', [300, 250], 'div-gpt-ad-1574864639578-0')
+				.addService(googletag.pubads());
+			googletag.pubads().enableSingleRequest();
+			googletag.enableServices();
+		});
+	</script>
+</head>
+<body>
+<h2>In-image</h2>
+<div class="container-wrapper">
+	<div id="iib-container" style="width: 600px;">
+		<img src="https://creative.astraone.io/files/default_image-1-600x400.jpg" width="100%" />
+	</div>
+	<div id="div-gpt-ad-1574864639578-0">
+		<script type="text/javascript">
+			googletag.cmd.push(function() {
+				googletag.display('div-gpt-ad-1574864639578-0');
+			});
+		</script>
+	</div>
+</div>
+</body>
+</html>                   
+```
diff --git a/dev-docs/bidders/aja.md b/dev-docs/bidders/aja.md
index 334ece6150..11233433ec 100644
--- a/dev-docs/bidders/aja.md
+++ b/dev-docs/bidders/aja.md
@@ -2,23 +2,23 @@
 layout: bidder
 title: AJA
 description: Prebid AJA Bidder Adaptor
+userIds: criteo, unifiedId, imuid
 pbjs: true
 pbs: true
 biddercode: aja
 media_types: video, native
-pbjs_version_notes: not in 5.x
 ---
 
-### Note:
+### Note
 
 The AJA Bidding adaptor requires setup and approval before beginning. Please reach out to <ssp_support@aja-kk.co.jp> for more details
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name  | Scope    | Description         | Example    | Type     |
+| Name | Scope | Description | Example | Type |
 |-------|----------|---------------------|------------|----------|
-| `asi` | required | ad spot hash code   | `'123abc'` | `string` |
+| `asi` | required | ad spot hash code | `'123abc'` | `string` |
 
 ### Configuration
 
@@ -31,11 +31,11 @@ pbjs.setConfig({
   userSync: {
     filterSettings: {
       iframe: {
-        bidders: '*',      // '*' represents all bidders
-        filter: 'include'
-      }
-    }
-  }
+        bidders: "*", // '*' represents all bidders
+        filter: "include",
+      },
+    },
+  },
 });
 ```
 
@@ -45,8 +45,7 @@ For Prebid.js v1.14.0 and before:
 pbjs.setConfig({
   userSync: {
     iframeEnabled: true,
-    enabledBidders: ['aja']
-  }
+    enabledBidders: ["aja"],
+  },
 });
 ```
-
diff --git a/dev-docs/bidders/algorix.md b/dev-docs/bidders/algorix.md
index d6b6c0a363..48ab5b9694 100644
--- a/dev-docs/bidders/algorix.md
+++ b/dev-docs/bidders/algorix.md
@@ -5,17 +5,19 @@ description: Prebid AlgoriX Bidder Adapter
 biddercode: algorix
 gdpr_supported: false
 gvl_id:
-usp_supported: false
-coppa_supported: false
+usp_supported: true
+coppa_supported: true
+schain_supported: true
 media_types: banner, video, native
 pbjs: false
 pbs: true
 pbs_app_supported: true
+prebid_member: true
 ---
 
 ### Note:
 
-Algorix adapter requires setup and approval from the Algorix team, even for existing in-app developers and publishers. Please reach out to your account team or email to prebid@algorix.co for more information.
+AlgoriX adapter requires setup and approval from the AlgoriX team, even for existing in-app developers and publishers. Please reach out to your account team or email to prebid@algorix.co for more information.
 
 ### Bid Params
 
@@ -24,5 +26,9 @@ Algorix adapter requires setup and approval from the Algorix team, even for exis
 |---------------|----------|---------------|--------------------------------------|----------|
 | `sid`         | required | Sid           | `'30014'`                            | `string` |
 | `token`       | required | Token         | `'028bca2d3b5c4f0ba155fa34864b0c4d'` | `string` |
+| `placementId` | optional | Placement Id  | `'123456'`                           | `string` |
+| `appId`       | optional | App Id        | `'asdasdasd'`                        | `string` |
 
-Note: Prebid Server adapter only checks for and uses first imp bid params. All other imp bid params are ignored.
+Note:
+* Prebid Server adapter only checks for and uses first imp bid params. All other imp bid params are ignored.
+* placementId and appId will be generated on AlgoriX Platform.
diff --git a/dev-docs/bidders/amx.md b/dev-docs/bidders/amx.md
index bddf72a938..f8f3ff6574 100644
--- a/dev-docs/bidders/amx.md
+++ b/dev-docs/bidders/amx.md
@@ -14,6 +14,7 @@ media_types: banner, video
 pbjs: true
 pbs: true
 pbs_app_supported: true
+fpd_supported: true
 gvl_id: 737
 ---
 
@@ -22,8 +23,8 @@ gvl_id: 737
 {: .table .table-bordered .table-striped }
 | Name        | Scope    | Description                                                     | Example                         | Type     |
 |-------------|----------|-----------------------------------------------------------------|---------------------------------|----------|
+| `tagId`     | required | Tag ID                                                          | `'cHJlYmlkLm9yZw'`              | `string` |
 | `testMode`  | optional | Activate 100% fill ads                                          | `true`                          | `boolean`|
-| `tagId`     | optional | Tag ID                                                          | `'cHJlYmlkLm9yZw'`              | `string` |
 | `adUnitId`  | optional | Ad Unit ID used in reporting. Will default to `bid.adUnitCode`  | `'sticky_banner'`               | `string` |
 
 ### Test Parameters
@@ -37,4 +38,6 @@ To enable 100% fill test ads, you can use the following `params`:
 }
 ```
 
-Note that the `tagId` is case-sensitive. This will produce a bid at $10 with a test creative.
+This will produce a bid at $10 with a test creative.
+
+Note that the `tagId` is case-sensitive. Do not use `cHJlYmlkLm9yZw` in production environments: this ID is for testing only.
diff --git a/dev-docs/bidders/aniview.md b/dev-docs/bidders/aniview.md
index 4ae7c6ce14..a51cc6f840 100644
--- a/dev-docs/bidders/aniview.md
+++ b/dev-docs/bidders/aniview.md
@@ -1,16 +1,19 @@
 ---
 layout: bidder
 title: ANIVIEW
-description: Prebid ANIVIEW Bidder Adaptor
+description: Prebid ANIVIEW Bidder Adapter
 pbjs: true
 biddercode: aniview
-media_types: video
+media_types: banner, video
 gdpr_supported: true
 usp_supported: true
+schain_supported: true
+safeframes_ok: true
+gvl_id: 780
 ---
 
 ### Note:
-For more information about [Aniview Ad Server](http://www.aniview.com/), please contact info@aniview.com.
+For more information about [Aniview Ad Server](https://www.aniview.com/), please contact info@aniview.com.
 
 ### Bid Params
 
@@ -19,3 +22,24 @@ For more information about [Aniview Ad Server](http://www.aniview.com/), please
 |------------------|----------|------------------|------------------------------|----------|
 | `AV_PUBLISHERID` | required | Publisher/Netid  | `'55b88d4a181f465b3e8b4567'` | `string` |
 | `AV_CHANNELID`   | required | Channel id       | `'5a5f17a728a06102d14c2718'` | `string` |
+
+### Test Parameters
+```
+videoAdUnit = [
+{
+  code: 'video1',
+  mediaTypes: {
+    video: {
+      playerSize: [[640, 480]],
+      context: 'outstream'
+    },
+  },
+  bids: [{
+    bidder: 'aniview',
+    params: {
+      AV_PUBLISHERID: '55b78633181f4603178b4568',
+      AV_CHANNELID: '5d19dfca4b6236688c0a2fc4'
+    }
+  }]
+}];
+```
diff --git a/dev-docs/bidders/aol.md b/dev-docs/bidders/aol.md
index a7b454b426..6e162546aa 100644
--- a/dev-docs/bidders/aol.md
+++ b/dev-docs/bidders/aol.md
@@ -7,9 +7,22 @@ biddercode: aol
 gdpr_supported: true
 usp_supported: true
 gvl_id: 25
-userIds: verizonMediaId
+userIds: connectId
 
 ---
+### IMPORTANT NOTICE!
+**TL;DR**
+1. The `aol` adapter is scheduled to be depreciated.
+2. Our New `yahoossp` is available for early adoption.
+3. Please contact your Account Manager/Executive for migration details.
+
+Dear Publishers & Partners,
+As part of our platform consolidation process to simplify your integrations moving forward
+We invite you to switch from the `oneVideo` Adapter to our NEW `yahoossp` bid adapter for both Display & Video inventory.
+FYI - The oneVideo adapter is scheduled for depreciation in the upcoming months.
+
+Thanks in advance,
+Yahoo SSP
 
 ### Note:
 This adapter allows use of both ONE by AOL: Display and ONE by AOL: Mobile platforms. In order to differentiate these sources of demand in your ad server and reporting, you may use the optional `onedisplay` and `onemobile` adapter aliases instead.
diff --git a/dev-docs/bidders/apacdex.md b/dev-docs/bidders/apacdex.md
index 3257909e1a..a7a7da140b 100644
--- a/dev-docs/bidders/apacdex.md
+++ b/dev-docs/bidders/apacdex.md
@@ -9,7 +9,7 @@ gdpr_supported: true
 schain_supported: true
 usp_supported: true
 userIds: all
-getFloor: true
+floors_supported: true
 ---
 
 ### Table of Contents
@@ -26,12 +26,14 @@ getFloor: true
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-|  Name        | Scope    | Description                                                                         | Example                                           | Type     |
-|--------------|----------|-------------------------------------------------------------------------------------|---------------------------------------------------|----------|
-| `siteId`     | required | Publisher site ID from Apacdex                                                      | `'apacdex1234'`                                   | `string` |
-| `floorPrice` | optional | CPM bidfloor in USD                                                                 | `0.03`                                            | `float`  |
-| `geo`        | optional | GEO data of device. See [Geo Object](#apacdex-geo-object) for details.              | `{"lat":17.98928,"lon":99.7741712,"accuracy":20}` | `object` |
+|  Name         | Scope    | Description                                                                         | Example                                           | Type     |
+|---------------|----------|-------------------------------------------------------------------------------------|---------------------------------------------------|----------|
+| `placementId`*| required | Placement ID provided by Apacdex                                                    | `'plc100000'`                                     | `string` |
+| `siteId`*     | required | Publisher site ID from Apacdex                                                      | `'apacdex1234'`                                   | `string` |
+| `floorPrice`  | optional | CPM bidfloor in USD                                                                 | `0.03`                                            | `float`  |
+| `geo`         | optional | GEO data of device. See [Geo Object](#apacdex-geo-object) for details.              | `{"lat":17.98928,"lon":99.7741712,"accuracy":20}` | `object` |
 
+(*) Please do not use `placementId` and `siteId` at the same time.
 
 <a name="apacdex-geo-object" />
 
@@ -59,9 +61,9 @@ Publishers declare video inventory by passing the following parameters via media
 |----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------|
 | `context` | required | instream or outstream |`"outstream"` | `string` |
 | `playerSize`| required | width, height of the player in pixels | `[640,360]` - will be translated to w and h in bid request | `array<integers>` |
-| `mimes` | required | List of content MIME types supported by the player (see openRTB v2.5 for options) | `["video/mp4"]`| `array<string>`|
-| `protocols` | required | Supported video bid response protocol values <br />1: VAST 1.0 <br />2: VAST 2.0 <br />3: VAST 3.0 <br />4: VAST 1.0 Wrapper <br />5: VAST 2.0 Wrapper <br />6: VAST 3.0 Wrapper <br />7: VAST 4.0 <br />8: VAST 4.0 Wrapper | `[2,3,5,6]` | `array<integers>`|
-| `api` | required | Supported API framework values: <br />1: VPAID 1.0 <br />2: VPAID 2.0 <br />3: MRAID-1 <br />4: ORMMA <br />5: MRAID-2 | `[2]` |  `array<integers>` |
+| `mimes` | recommended | List of content MIME types supported by the player (see openRTB v2.5 for options) | `["video/mp4"]`| `array<string>`|
+| `protocols` | recommended | Supported video bid response protocol values <br />1: VAST 1.0 <br />2: VAST 2.0 <br />3: VAST 3.0 <br />4: VAST 1.0 Wrapper <br />5: VAST 2.0 Wrapper <br />6: VAST 3.0 Wrapper <br />7: VAST 4.0 <br />8: VAST 4.0 Wrapper | `[2,3,5,6]` | `array<integers>`|
+| `api` | recommended | Supported API framework values: <br />1: VPAID 1.0 <br />2: VPAID 2.0 <br />3: MRAID-1 <br />4: ORMMA <br />5: MRAID-2 | `[2]` |  `array<integers>` |
 | `maxduration` | recommended | Maximum video ad duration in seconds. | `30` | `integer` |
 | `minduration` | recommended | Minimum video ad duration in seconds | `6` | `integer` |
 | `playbackmethod` | recommended | Playback methods that may be in use. Only one method is typically used in practice. (see openRTB v2.5 section 5.10 for options)| `[2]`| `array<integers>` |
@@ -170,4 +172,4 @@ var outstreamAdUnit = {
 };
 ```
 mediaTypes.video object reference to section 3.2.7 Object: Video in the OpenRTB 2.5 document
-You must review all video parameters to ensure validity for your player and DSPs
\ No newline at end of file
+You must review all video parameters to ensure validity for your player and DSPs
diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md
index c29e3e4f30..0d9360bb28 100644
--- a/dev-docs/bidders/appnexus.md
+++ b/dev-docs/bidders/appnexus.md
@@ -10,7 +10,8 @@ userIds: criteo, unifiedId, netId, identityLink, flocId, uid2
 schain_supported: true
 coppa_supported: true
 usp_supported: true
-getFloor: true
+floors_supported: true
+fpd_supported: true
 pbjs: true
 pbs: true
 gvl_id: 32
@@ -49,7 +50,7 @@ All AppNexus (Xandr) placements included in a single call to `requestBids` must
 | `keywords`          | optional | A set of key-value pairs applied to all ad slots on the page.  Mapped to [buy-side segment targeting](https://monetize.xandr.com/docs/segment-targeting) (login required). Values can be empty. See [Passing Keys Without Values](#appnexus-no-value) below for examples. Note that to use keyword with the Prebid Server adapter, that feature must be enabled for your account by an AppNexus account manager. | `keywords: { genre: ['rock', 'pop'] }`                | `object`         |
 | `video`             | optional | Object containing video targeting parameters.  See [Video Object](#appnexus-video-object) for details.                                                                        | `video: { playback_method: ['auto_play_sound_off'] }` | `object`         |
 | `app`               | optional | Object containing mobile app parameters.  See the [App Object](#appnexus-app-object) for details.                                                                      | `app : { id: 'app-id'}`                               | `object`         |
-| `reserve`           | optional | Sets a floor price for the bid that is returned. If floors have been configured in the AppNexus Console, those settings will override what is configured here.                | `0.90`                                                | `float`          |
+| `reserve`           | optional | Sets a floor price for the bid that is returned. If floors have been configured in the AppNexus Console, those settings will override what is configured here unless 'Reserve Price Override' is checked. See [Xandr docs](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-a-floor-rule.html)                | `0.90`                                                | `float`          |
 | `position`          | optional | Identify the placement as above or below the fold.  Allowed values: Unknown: `unknown`; Above the fold: `above`; Below the fold: `below`                                      | `'above'`                                               | `string`        |
 | `trafficSourceCode` | optional | Specifies the third-party source of this impression.                                                                                                                          | `'my_traffic_source'`                                 | `string`         |
 | `supplyType`        | optional | Indicates the type of supply for this placement. Possible values are `web`, `mobile_web`, `mobile_app`                                                                        | `'web'`                                               | `string`         |
diff --git a/dev-docs/bidders/aso.md b/dev-docs/bidders/aso.md
new file mode 100644
index 0000000000..8e4fae6934
--- /dev/null
+++ b/dev-docs/bidders/aso.md
@@ -0,0 +1,58 @@
+---
+layout: bidder
+title: Adserver.Online
+description: Prebid Adserver.Online Bidder Adapter
+biddercode: aso
+gdpr_supported: true
+usp_supported: true
+media_types: video
+safeframes_ok: true
+deals_supported: false
+pbjs: true
+pbs: false
+floors_supported: true
+---
+### Note:
+
+For more information about [Adserver.Online](https://adserver.online), please contact support@adsrv.org.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `zone`        | required | Zone ID               | `73815`   | `integer` |
+
+### Test Parameters
+
+```js
+ var adUnit = {
+    code: 'unit1',
+    mediaTypes: {
+        banner: {
+            sizes: [[300, 250]]
+        }
+    },
+    bids: [
+        {
+            bidder: 'aso',
+            params: {
+                zone: 73815,
+            }
+        }
+    ]
+}
+```
+
+#### Video Caching
+
+Note that the Adserver.Online adapter expects a client-side Prebid Cache to be enabled for video bidding.
+
+```js
+pbjs.setConfig({
+    usePrebidCache: true,
+    cache: {
+        url: 'https://prebid.adnxs.com/pbc/v1/cache'
+    }
+});
+```
diff --git a/dev-docs/bidders/audiencerun.md b/dev-docs/bidders/audiencerun.md
index b7d4a9fbcd..d582380046 100644
--- a/dev-docs/bidders/audiencerun.md
+++ b/dev-docs/bidders/audiencerun.md
@@ -8,11 +8,6 @@ media_types: banner
 gdpr_supported: true
 ---
 
-### Disclosure
-
-This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness
-of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381).
-
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/automatad.md b/dev-docs/bidders/automatad.md
index cd1c2045b4..27714c6d15 100644
--- a/dev-docs/bidders/automatad.md
+++ b/dev-docs/bidders/automatad.md
@@ -5,6 +5,7 @@ description: Automatad OpenRTB Bid Adapter
 biddercode: automatad 
 pbjs: true
 media_types: banner
+fpd_supported: true
 ---
 
 #### Bid Params
diff --git a/dev-docs/bidders/avantisvideo.md b/dev-docs/bidders/avantisvideo.md
index 2f1d2e72ee..bdc5ae4dd9 100644
--- a/dev-docs/bidders/avantisvideo.md
+++ b/dev-docs/bidders/avantisvideo.md
@@ -5,13 +5,15 @@ description: Avantis Video Bidder Adapter
 pbjs: true
 biddercode: avantisvideo
 aliasCode: aniview
-media_types: video
+media_types: banner, video
 gdpr_supported: true
 usp_supported: true
+schain_supported: true
+safeframes_ok: true
 ---
 
 ### Note:
-For more information about [Avantis Video](https://www.avantisvideo.com/).
+For more information about [Avantis Video](https://www.avantisvideo.com/), please contact contact@avantisvideo.com.
 
 ### Bid Params
 
diff --git a/dev-docs/bidders/axonix.md b/dev-docs/bidders/axonix.md
index 6a7ecae034..84ffe5dcd6 100644
--- a/dev-docs/bidders/axonix.md
+++ b/dev-docs/bidders/axonix.md
@@ -5,6 +5,8 @@ description: Axonix Prebid Adaptor
 biddercode: axonix
 media_types: banner, video
 pbjs: true
+pbs: true
+gvl_id: 678
 ---
 
 ### Prebid Server Note:
diff --git a/dev-docs/bidders/beachfront.md b/dev-docs/bidders/beachfront.md
index 0a12f356e0..aa28971a92 100644
--- a/dev-docs/bidders/beachfront.md
+++ b/dev-docs/bidders/beachfront.md
@@ -4,10 +4,10 @@ title: Beachfront
 description: Prebid Beachfront Bidder Adapter
 biddercode: beachfront
 media_types: video
-getFloor: true
+floors_supported: true
 gdpr_supported: true
 usp_supported: true
-userIds: unifiedId, identityLink, uid2
+userIds: unifiedId, identityLink, uid2, haloId
 schain_supported: true
 prebid_member: true
 pbjs: true
diff --git a/dev-docs/bidders/beop.md b/dev-docs/bidders/beop.md
new file mode 100644
index 0000000000..3f7786d8b7
--- /dev/null
+++ b/dev-docs/bidders/beop.md
@@ -0,0 +1,16 @@
+---
+layout: bidder
+title: BeOp
+description: BeOp Bidder Adaptor
+pbjs: true
+biddercode: beop
+fpd_supported: true
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description | Example | Type     |
+|---------------|----------|-------------|---------|----------|
+| `accountId` or `networkId` | required |  Your BeOp account ID   | `'5a8af500c9e77c00017e4cad'`   | `string` |
+| `currency`      | optional |  Your currency        |  `'EUR'` (default) or `'USD'`   | `string` |
diff --git a/dev-docs/bidders/between.md b/dev-docs/bidders/between.md
index 59eac200bd..b37304b1b5 100644
--- a/dev-docs/bidders/between.md
+++ b/dev-docs/bidders/between.md
@@ -8,9 +8,10 @@ biddercode: between
 schain_supported: true
 gdpr_supported: true
 pbs_app_supported: true
-userIds: sharedId
+userIds: all
 gvl_id: 724
 usp_supported: true
+safeframes_ok: false
 ---
 
 ### Prebid.js Bid Params
@@ -19,8 +20,6 @@ usp_supported: true
 | Name          | Scope    | Description | Example | Type     |
 |---------------|----------|-------------|---------|----------|
 | `s` | required |  Section ID from Between SSP control panel | 999999 | `integer` |
-| `w`        | required | width of placement(Number)                | 240       |
-| `h`        | required | height of placement(Number)               | 400       |
 
 ### Prebid-Server Bid Params
 
diff --git a/dev-docs/bidders/bidmachine.md b/dev-docs/bidders/bidmachine.md
index c314667874..82f1dd997e 100644
--- a/dev-docs/bidders/bidmachine.md
+++ b/dev-docs/bidders/bidmachine.md
@@ -11,7 +11,7 @@ schain_supported: true
 dchain_supported: false
 media_types: banner, video
 safeframes_ok: true
-bidder_supports_deals: false
+deals_supported: false
 pbjs: false
 pbs: true
 pbs_app_supported: true
diff --git a/dev-docs/bidders/bizzclick.md b/dev-docs/bidders/bizzclick.md
index dee853df60..57846d529e 100644
--- a/dev-docs/bidders/bizzclick.md
+++ b/dev-docs/bidders/bizzclick.md
@@ -9,9 +9,8 @@ coppa_supported: true
 schain_supported: true
 media_types: banner, video, native
 safeframes_ok: true
-bidder_supports_deals: true
+deals_supported: true
 pbjs: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/bliink.md b/dev-docs/bidders/bliink.md
new file mode 100644
index 0000000000..5344187d2b
--- /dev/null
+++ b/dev-docs/bidders/bliink.md
@@ -0,0 +1,25 @@
+---
+layout: bidder
+title: BLIINK
+description: Prebid BLIINK Bidder Adaptor
+pbjs: true
+pbs: false
+media_types: video, banner
+biddercode: bliink
+gdpr_supported: true
+usp_supported: false
+---
+
+### Note:
+The BLIINK Header Bidding adaptor requires setup and approval from the BLIINK team. Please reach out to your account manager for more informations.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name        | Scope    | Description                      | Example                              | Type     |
+|-------------|----------|----------------------------------|--------------------------------------|----------|
+| `tagId` | required | The TagID from BLIINK. | `'32'` | `string` |
+| `placement` | required | The placement from BLIINK. | `'video'` | `string` |
+
+
+Same 'placement' parameter can be used from either prebid JS or prebid server.
diff --git a/dev-docs/bidders/bmtm.md b/dev-docs/bidders/bmtm.md
index 8c7f67c8d1..3d99a82779 100644
--- a/dev-docs/bidders/bmtm.md
+++ b/dev-docs/bidders/bmtm.md
@@ -4,10 +4,11 @@ title: Bright Mountain Media
 description: Prebid Bright Mountain Media Bidder Adapter
 biddercode: bmtm
 media_types: banner, video
-getFloor: true
+floors_supported: true
 schain_supported: true
 pbjs: true
 pbs: true
+userIds: id5Id, sharedId
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/boldwin.md b/dev-docs/bidders/boldwin.md
index 10e7ed89d5..084e923814 100644
--- a/dev-docs/bidders/boldwin.md
+++ b/dev-docs/bidders/boldwin.md
@@ -5,8 +5,7 @@ description: Prebid Boldwin Bidder Adapter
 pbjs: true
 biddercode: boldwin
 gdpr_supported: true
-media_types: banner, video
-pbjs_version_notes: not in 5.x
+media_types: banner, video, native
 ---
 
 ### Note:
@@ -18,4 +17,4 @@ The Boldwin Bidding adapter requires setup before beginning. Please contact us a
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description           | Example   | Type      |
 |---------------|----------|-----------------------|-----------|-----------|
-| `placementId`      | required | Adprime placement id         | `'1234asdf'`    | `'string'` |
+| `placementId`      | required | Boldwin placement id         | `'1234asdf'`    | `'string'` |
diff --git a/dev-docs/bidders/brave.md b/dev-docs/bidders/brave.md
new file mode 100644
index 0000000000..e26f0f7249
--- /dev/null
+++ b/dev-docs/bidders/brave.md
@@ -0,0 +1,26 @@
+---
+layout: bidder
+title: Brave
+description: Prebid Brave Bidder Adapter
+biddercode: brave
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+media_types: banner, video, native
+safeframes_ok: true
+deals_supported: true
+pbjs: true
+pbs: false
+---
+
+### Note:
+
+The Brave Header Bidding adapter requires setup and approval from the Brave team. Please reach out to your account manager or support@thebrave.io for more information
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description                   | Example                             | Type      |
+|---------------|----------|-------------------------------|-------------------------------------|-----------|
+| `placementId` | required | Brave's platform placement id | `'to0QI2aPgkbBZq6vgf0oHitouZduz0qw'`  | `string`  |
diff --git a/dev-docs/bidders/catapultx.md b/dev-docs/bidders/catapultx.md
new file mode 100644
index 0000000000..abb551bf81
--- /dev/null
+++ b/dev-docs/bidders/catapultx.md
@@ -0,0 +1,23 @@
+---
+layout: bidder
+title: CatapultX
+description: CatapultX Bidder Adaptor
+pbjs: true
+pbs: true
+biddercode: catapultx
+aliasCode : adkernel
+media_types: banner, video
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: true
+schain_supported: true
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name     | Scope    | Description           | Example                   | Type     |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host`   | required | RTB host              | `'cpm.catapultx.com'`     | `string` |
+| `zoneId` | required | Zone Id               | 76156                     | `integer`|
diff --git a/dev-docs/bidders/clickforce.md b/dev-docs/bidders/clickforce.md
index a617304ee7..2b961b28b7 100644
--- a/dev-docs/bidders/clickforce.md
+++ b/dev-docs/bidders/clickforce.md
@@ -5,7 +5,6 @@ description: Prebid Clickforce Bidder Adaptor
 pbjs: true
 biddercode: clickforce
 media_types: native
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params (display ad)
diff --git a/dev-docs/bidders/codefuel.md b/dev-docs/bidders/codefuel.md
new file mode 100644
index 0000000000..f2b9b20833
--- /dev/null
+++ b/dev-docs/bidders/codefuel.md
@@ -0,0 +1,35 @@
+---
+layout: bidder
+title: CodeFuel
+description: CodeFuel Prebid Bidder Adapter
+pbjs: true
+pbs: true
+media_types: banner
+biddercode: CodeFuel
+gdpr_supported: false
+usp_supported: false
+floors_supported: false
+---
+
+### Description
+
+Module that connects to Codefuel bidder to fetch bids.
+Display format is supported but not native format. Using OpenRTB standard.
+
+### Bid Params
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description                         | Example                                  | Type     |
+|---------------|----------|-------------------------------------|------------------------------------------|----------|
+| `placementId` | required | Placement-Id defined by the caller  | `'0111f8ac-2d40-4613-8557-b47dbf622fff'` | `string` |
+
+
+### Configuration
+
+
+```javascript
+    pbjs.setConfig({
+    codefuel: {
+        bidderUrl: 'https://prebidtest.zemanta.com/api/bidder/prebidtest/bid/'
+    }
+});
+```
diff --git a/dev-docs/bidders/colossus.md b/dev-docs/bidders/colossus.md
index a01899d0af..e7b322df75 100644
--- a/dev-docs/bidders/colossus.md
+++ b/dev-docs/bidders/colossus.md
@@ -6,7 +6,7 @@ biddercode: colossus
 usp_supported: true
 schain_supported: true
 media_types: banner, video, native
-userIds: britepoolid, identityLink, unifiedId, id5Id
+userIds: britepoolid, identityLink, unifiedId, id5Id, uid2
 gdpr: true
 pbjs: false
 pbs: true
diff --git a/dev-docs/bidders/colossusssp.md b/dev-docs/bidders/colossusssp.md
index a571a4f42b..50931a7c99 100644
--- a/dev-docs/bidders/colossusssp.md
+++ b/dev-docs/bidders/colossusssp.md
@@ -6,11 +6,11 @@ biddercode: colossusssp
 usp_supported: true
 schain_supported: true
 media_types: banner, video, native
-userIds: britepoolid, identityLink, unifiedId, id5Id
+userIds: britepoolid, identityLink, unifiedId, id5Id, uid2
 gdpr: true
+fpd_supported: true
 pbjs: true
 pbs: false
-pbjs_version_notes: not in 5.x
 ---
 
 ### Prebid.JS Bid Params
diff --git a/dev-docs/bidders/connectad.md b/dev-docs/bidders/connectad.md
index 2a8c0e1558..b5f67acab3 100644
--- a/dev-docs/bidders/connectad.md
+++ b/dev-docs/bidders/connectad.md
@@ -11,7 +11,7 @@ schain_supported: true
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
 prebid_member: true
 safeframes_ok: true
-getFloor: true
+floors_supported: true
 pbjs: true
 pbs: true
 gvl_id: 138
diff --git a/dev-docs/bidders/contentexchange.md b/dev-docs/bidders/contentexchange.md
new file mode 100644
index 0000000000..364ee93d6f
--- /dev/null
+++ b/dev-docs/bidders/contentexchange.md
@@ -0,0 +1,21 @@
+---
+layout: bidder
+title: ContentExchange
+description: Prebid Contentexchange Bidder Adapter
+biddercode: contentexchange
+usp_supported: true
+schain_supported: true
+media_types: banner, video, native
+gdpr_supported: true
+pbjs: true
+pbs: false
+pbs_app_supported: false
+---
+
+### Prebid.JS Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                              | Example    | Type      |
+|----------------|----------|----------------------------------------------------------|------------|-----------|
+| `placementId` | required | Placement Id will be generated on ContentExchange Platform. | `'1234'`        | `string` |
+| `adFormat` | required | `[banner, video, native]` | `'banner'`        | `string` |
diff --git a/dev-docs/bidders/converge.md b/dev-docs/bidders/converge.md
index e2720237b0..fe7843d9b1 100644
--- a/dev-docs/bidders/converge.md
+++ b/dev-docs/bidders/converge.md
@@ -1,21 +1,28 @@
 ---
 layout: bidder
-title: Converge
-description: Prebid Converge Bidder Adaptor
+title: Converge-Digital
+description: Converge-Digital Bidder Adaptor
 pbjs: true
+pbs: true
 biddercode: converge
-media_types: banner, video
+aliasCode : adkernel
+media_types: banner, native, video
 gdpr_supported: true
 usp_supported: true
-pbjs_version_notes: not in 5.x
+coppa_supported: true
+pbs_app_supported: true
+gvl_id: 248
+schain_supported: true
 ---
 
+### Note:
+
+The Converge-Digital Bidding adapter requires setup and approval before implementation. Please reach out to <info@converge-digital.com> for more details.
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name        | Scope    | Description                                                                                                                                                                                                             | Example                                   | Type      |
-|-------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------|-----------|
-| `uid`       | required | Represents the Converge bidder system Ad Slot ID associated with the respective div id from the site page.                                                                                                              | `59`                                      | `integer` |
-| `priceType` | optional | Can take the values `gross` or `net`, default value is `net`. Net represents the header bid price with the Converge header bidder margin already extracted. Gross price does contain the Converge bidder margin within. | `'gross'`                                 | `string`  |
-| `keywords`  | optional | A set of key-value pairs applied to all ad slots on the page. Values can be empty.                                                                                                                                      | `keywords: { topic: ['stress', 'fear'] }` | `object`  |
+| Name     | Scope    | Description           | Example                   | Type     |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host`   | required | ConvergeDigital RTB host | `'cpm.convergeselect.net'` | `string` |
+| `zoneId` | required | Zone Id           | `30164`                 | `integer` |
diff --git a/dev-docs/bidders/conversant.md b/dev-docs/bidders/conversant.md
index 6991323c74..d8c76b9d2b 100644
--- a/dev-docs/bidders/conversant.md
+++ b/dev-docs/bidders/conversant.md
@@ -7,7 +7,7 @@ pbs: true
 biddercode: conversant
 media_types: video
 gdpr_supported: true
-userIds: criteo, id5Id, identityLink, liveIntentId, parrableId, pubCommonId, unifiedId
+userIds: criteo, id5Id, identityLink, liveIntentId, parrableId, pubCommonId, unifiedId, publinkId
 prebid_member: true
 gvl_id: 24
 ---
diff --git a/dev-docs/bidders/cpmstar.md b/dev-docs/bidders/cpmstar.md
index f01b0b56f7..3b97562e91 100644
--- a/dev-docs/bidders/cpmstar.md
+++ b/dev-docs/bidders/cpmstar.md
@@ -9,7 +9,6 @@ media_types: banner, video
 gdpr_supported: true
 usp_supported: true
 coppa_supported: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/criteo.md b/dev-docs/bidders/criteo.md
index fe5d109427..37bdc717a4 100644
--- a/dev-docs/bidders/criteo.md
+++ b/dev-docs/bidders/criteo.md
@@ -10,17 +10,14 @@ gdpr_supported: true
 usp_supported: true
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, pubProvidedId, sharedId, unifiedId
 prebid_member: true
-getFloor: false*
+floors_supported: false
+fpd_supported: true
 gvl_id: 91
 ---
 ### Notes
 {: .alert.alert-warning :}
-For Native Ads, in order to avoid further decoding issues of special characters, the assets need to be sent as placeholders. 
-That means, `sendId: true` becomes mandatory for all fields receiving URLs, notably: `icon`, `image`, `clickUrl`, `privacyLink`, `privacyIcon`.
+*Criteo currently only supports getFloor if floors are in USD and if the publisher is enabling the Criteo Publisher Tag external js call. 
 
-*Criteo currently only supports getFloor if floors are in Euros and if the publisher is enabling the Criteo Publisher Tag external js call. 
-
-See [Sending Asset Placeholders]({{site.baseurl}}/dev-docs/show-native-ads.html#sending-asset-placeholders).
 
 {: .alert.alert-warning :}
 Prebid-Server support is on alpha test and is currently a non-finished product. Activation requires setup and approval before beginning. Please reach out to your account manager or publishers@criteo.com for more details.
diff --git a/dev-docs/bidders/cwire.md b/dev-docs/bidders/cwire.md
new file mode 100644
index 0000000000..9137f50690
--- /dev/null
+++ b/dev-docs/bidders/cwire.md
@@ -0,0 +1,21 @@
+---
+layout: bidder
+title: C-WIRE
+description: C-WIRE Prebid Bidder Adapter
+pbjs: true
+biddercode: cwire
+gdpr_supported: false
+usp_supported: false
+schain_supported: false
+userIds: flocId, uid2Id
+media_types: banner, video
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `pageId`      | required | C-WIRE page id        | `2453`    | `integer` |
+| `placementId` | required | C-WIRE placement id   | `113244`  | `integer` |
+| `adUnitElementId` | optional | Target div to write to  | `'other_div_id'`  | `string` |
diff --git a/dev-docs/bidders/datablocks.md b/dev-docs/bidders/datablocks.md
index 761405f240..58aea81085 100644
--- a/dev-docs/bidders/datablocks.md
+++ b/dev-docs/bidders/datablocks.md
@@ -12,6 +12,7 @@ pbs_app_supported: true
 schain_supported: true
 usp_supported: true
 userIds: criteo,unifiedId,netId,pubcid
+fpd_supported: true
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/deltaprojects.md b/dev-docs/bidders/deltaprojects.md
new file mode 100644
index 0000000000..cafcc93ef8
--- /dev/null
+++ b/dev-docs/bidders/deltaprojects.md
@@ -0,0 +1,54 @@
+---
+layout: bidder
+title: Delta Projects
+description: Prebid Delta Projects Bidder Adapter
+biddercode: deltaprojects
+gdpr_supported: true
+gvl_id: 209
+media_types: banner
+safeframes_ok: false
+floors_supported: true
+pbjs: true
+---
+
+### Note
+Contact publishers@deltaprojects.com to get a publisher id and to agree on a currency. Delta Projects
+will always bid and log values in the agreed upon currency, utilizing the currency module if necessary and available.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                                              | Example         | Type     |
+|----------------|----------|--------------------------------------------------------------------------|-----------------|----------|
+| `publisherId`  | required | Publisher ID from Delta Projects. Contact publishers@deltaprojects.com   | `'4'`           | `string` |
+| `currency`     | optional | The bid currency agreed with Delta Projects.                             | `'SEK'`         | `string` |
+| `siteId`       | optional | Site ID from Delta Projects.                                             | `'example.com'` | `string` |
+| `tagId`        | optional | Identifier for specific ad placement or ad tag.                          | `'1234'`        | `string` |
+| `test`         | optional | Indicate test model. Don't set anything if it is not in test mode.       | `'true'`        | `string` |
+
+### Example
+#### Banner
+```
+var adUnits = [
+  {
+    code: 'adunit-code',
+    mediaTypes: {
+      banner: {
+        sizes: [[300, 250]]
+      }
+    },
+    bids: [
+      {
+          bidder: 'deltaprojects',
+          params: {
+              publisherId: '4',             // publisherId from Delta Projects.
+              currency: 'SEK',              // the currency agreed with Delta Projects.
+              siteId: 'example.com',        // siteId from Delta Projects.
+              tagId: 'tagId123',            // id for ad placement or ad tag. 
+              test: 'true',                 // disable test mode by remove this parameter.
+          }
+      }
+    ]
+  }
+];
+```
diff --git a/dev-docs/bidders/districtmdmx.md b/dev-docs/bidders/districtmdmx.md
index 6af35635eb..fef2443cc5 100644
--- a/dev-docs/bidders/districtmdmx.md
+++ b/dev-docs/bidders/districtmdmx.md
@@ -6,7 +6,7 @@ pbjs: true
 biddercode: districtmDMX
 gdpr_supported: true
 schain_supported: true
-getFloor: true
+floors_supported: true
 usp_supported: true
 coppa_supported: true
 userIds: britepoolId, criteo, id5Id, identityLink, intentiq, liveIntentId, netId, parrableId, pubCommonId, unifiedId
@@ -33,4 +33,3 @@ userIds: britepoolId, criteo, id5Id, identityLink, intentiq, liveIntentId, netId
 | `floor`    | optional | Bid floor price         | `"1.00"`           | `string`  |
 | `revShare` | optional | Publisher Revenue Share | `"0.85"`           | `string`  |
 | `currency` | optional | Currency code           | `"usd"`            | `string`  |
-
diff --git a/dev-docs/bidders/duration.md b/dev-docs/bidders/duration.md
new file mode 100644
index 0000000000..2c2e61cb9a
--- /dev/null
+++ b/dev-docs/bidders/duration.md
@@ -0,0 +1,86 @@
+---
+layout: bidder
+title: Duration Media
+description: Prebid Duration Media Bidder Adapter
+biddercode: duration
+aliasCode: nobid
+pbjs: true
+pbs: true
+media_types: banner, video
+gdpr_supported: true
+gvl_id: 816
+usp_supported: true
+schain_supported: true
+coppa_supported: true
+userId: criteo, unifiedId, id5Id
+safeframes_ok: true
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description | Example | Type     |
+|---------------|----------|-------------|---------|----------|
+| `siteId` | required | siteId is provided by your Duration Media account manager(s) |         | `integer` |
+| `placementId` | optional | placementId is provided by your Duration Media account manager(s). This parameter allows to report on a specific ad unit |         | `integer` |
+| `video`| optional | Object containing video targeting parameters. Note that this parameter is not used in Prebid Server.  See [Video Object](#duration-video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object`|
+
+
+### Note
+If you are using Google Ad Manager (GAM), it is highly recommended to make sure the “Serve in Safeframe” box in creative settings is unchecked. 
+If you absolutely want to run Duration Media in a Saferame creative, please contact your Duration Media repsentative to coordinate this setup.
+
+
+# Test Parameters
+```
+    var adUnits = [
+        {
+            code: 'test-div1',
+            mediaTypes: {
+                banner: {
+                    sizes: [[300, 250]],  // a display size
+                }
+            },
+            bids: [
+                {
+                    bidder: "duration",
+                    params: {
+                        siteId: 2,
+                        placementId: 3
+                    }
+                }
+            ]
+        },{
+            code: 'test-div2',
+            mediaTypes: {
+                banner: {
+                    sizes: [[320, 50]],   // a mobile size
+                }
+            },
+            bids: [
+                {
+                    bidder: "duration",
+                    params: {
+                        siteId: 2
+                    }
+                }
+            ]
+        }
+    ];
+```
+
+<a name="duration-video-object" />
+
+#### Video Object
+
+{: .table .table-bordered .table-striped }
+| Name              | Description                                                                                                                                                                                                                                          | Type             |
+|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|
+| `skippable`       | Boolean which, if `true`, means the user can click a button to skip the video ad. Defaults to `false`.                                                                                                                                               | `boolean`        |
+| `playback_method` | Array of strings listing playback methods supported by the publisher. Allowed values: `"auto_play_sound_on"`; `"auto_play_sound_off"`; `"click_to_play"`; `"mouseover"`; `"auto_play_sound_unknown"`; `"viewport_sound_on"`, `"viewport_sound_off"`. | `Array<string>`  |
+| `position`        | Array of strings listing video player position supported by the publisher. Allowed values: `"na"`, `"atf"`, `"btf"`, `"head"`, `"foot"`, `"sidebar"`, `"full"`.                                                                                      | `Array<string>`  |
+| `mimes`           | Array of strings listing the content MIME types supported, e.g., `["video/x-flv", "video/x-ms-wmv"]`.                                                                                                                                                | `Array<string>`  |
+| `minduration`     | Integer that defines the minimum video ad duration in seconds.                                                                                                                                                                                       | `integer`        |
+| `maxduration`     | Integer that defines the maximum video ad duration in seconds.                                                                                                                                                                                       | `integer`        |
+| `frameworks`      | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; ORMMA: `4`; MRAID 2.0: `5`.                                                                          | `Array<integer>` |
+
diff --git a/dev-docs/bidders/emx_digital.md b/dev-docs/bidders/emx_digital.md
index f87facc38e..00acc8c306 100644
--- a/dev-docs/bidders/emx_digital.md
+++ b/dev-docs/bidders/emx_digital.md
@@ -10,6 +10,7 @@ gdpr_supported: true
 gvl_id: 183
 usp_supported: true
 schain_supported: true
+userIds: identityLink, uid2
 ---
 
 ### Registration
diff --git a/dev-docs/bidders/engageya.md b/dev-docs/bidders/engageya.md
index 1e8066d8c4..a085c9bd45 100644
--- a/dev-docs/bidders/engageya.md
+++ b/dev-docs/bidders/engageya.md
@@ -6,7 +6,6 @@ media_type: banner, native
 biddercode: engageya
 pbjs: true
 gdpr_supported: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid params
diff --git a/dev-docs/bidders/epom.md b/dev-docs/bidders/epom.md
index 228670bceb..d1d5897a28 100644
--- a/dev-docs/bidders/epom.md
+++ b/dev-docs/bidders/epom.md
@@ -10,7 +10,7 @@ coppa_supported: true
 schain_supported: false
 media_types: banner, video, native
 safeframes_ok: true
-bidder_supports_deals: true
+deals_supported: true
 pbjs: false
 pbs: true
 pbs_app_supported: true
diff --git a/dev-docs/bidders/ergadx.md b/dev-docs/bidders/ergadx.md
new file mode 100644
index 0000000000..2aedf405a1
--- /dev/null
+++ b/dev-docs/bidders/ergadx.md
@@ -0,0 +1,27 @@
+---
+layout: bidder
+title: eRGADX
+description: eRGADX Bidder Adaptor
+pbjs: true
+pbs: true
+biddercode: ergadx
+aliasCode : adkernel
+media_types: banner, native, video
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: true
+schain_supported: true
+---
+
+### Note:
+
+The eRGADX bidding adapter requires setup and approval before implementation. Please reach out to <prashant.musale@erelego.com> for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name     | Scope    | Description           | Example                   | Type     |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host`   | required | RTB host | `'cpm.ergadx.com'` | `string` |
+| `zoneId` | required | Zone Id           | 30164                 | `integer` |
diff --git a/dev-docs/bidders/etarget.md b/dev-docs/bidders/etarget.md
index 251697a776..41c3198529 100644
--- a/dev-docs/bidders/etarget.md
+++ b/dev-docs/bidders/etarget.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: etarget
 media_types: banner, video
 gdpr_supported: true
+fpd_supported: true
 ---
 
 
diff --git a/dev-docs/bidders/fluct.md b/dev-docs/bidders/fluct.md
index 9360ed72d2..5403970b0d 100644
--- a/dev-docs/bidders/fluct.md
+++ b/dev-docs/bidders/fluct.md
@@ -9,7 +9,6 @@ coppa_supported: false
 usp_supported: false
 schain_supported: true
 pbjs: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/gamma.md b/dev-docs/bidders/gamma.md
index c514b25192..3935c66e0e 100644
--- a/dev-docs/bidders/gamma.md
+++ b/dev-docs/bidders/gamma.md
@@ -6,7 +6,6 @@ pbjs: true
 pbs: true
 biddercode: gamma
 media_types: video
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/getintent.md b/dev-docs/bidders/getintent.md
index 6e0f519249..671ec6fe1f 100644
--- a/dev-docs/bidders/getintent.md
+++ b/dev-docs/bidders/getintent.md
@@ -4,8 +4,8 @@ title: GetIntent
 description: Prebid GetIntent Bidder Adaptor
 pbjs: true
 biddercode: getintent
-media_types: video
-pbjs_version_notes: not in 5.x
+media_types: video, banner
+floors_supported: true
 ---
 
 
@@ -24,6 +24,22 @@ pbjs_version_notes: not in 5.x
 
 #### video
 
+Adapter supports the following mediaTypes.video parameters:
+
+{: .table .table-bordered .table-striped }
+| Name         | Scope    | Description                                                                                                                                                                                                                                                          | Example                      | Type             |
+|--------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|------------------|
+| `protocols`  | optional | The list of the restricted VAST protocol versions. Possible values: `1` – VAST 1.0, `2` – VAST 2.0, `3` – VAST 3.0, `4` – VAST 1.0 Wrapper, `5` – VAST 2.0 Wrapper, `6` – VAST 3.0 Wrapper.                                                                          | `[4,5,6]`                    | `Array<integer>` |
+| `mimes`      | optional | Array of Mime Type strings.                                                                                                                                                                                                                                          | `['application/javascript']` | `Array<string>`  |
+| `minduration`| optional | Minimal video duration.                                                                                                                                                                                                                                              | `30`                         | `integer`        |
+| `maxduration`| optional | Maximal video duration.                                                                                                                                                                                                                                              | `30`                         | `integer`        |
+| `minbitrate` | optional | Minimal Video bitrate.                                                                                                                                                                                                                                               | `256`                        | `integer`        |
+| `maxbitrate` | optional | Maximal Video bitrate.                                                                                                                                                                                                                                               | `512`                        | `integer`        |
+| `api`        | optional | API of the inventory. Possible values: `1` - VPAID 1.0, `2` - VPAID 2.0, `3` - MRAID-1, `4` - ORMMA, `5` - MRAID-2.                                                                                                                                                  | `[3,4]`                      | `Array<integer>` |
+| `skip`       | optional | Skippability of the inventory. Possible values (case insensitive): `1` - skippable inventory is allowed, `0` - skippable inventory is not allowed.                                                                                                                   | `0`                          | `integer`        |
+
+List of custom parameters available at bidder params level
+
 {: .table .table-bordered .table-striped }
 | Name        | Scope    | Description                                                                                                                                                                                                                                                          | Example                      | Type             |
 |-------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|------------------|
diff --git a/dev-docs/bidders/gnet.md b/dev-docs/bidders/gnet.md
index 8cd6b3af53..3365cc1602 100644
--- a/dev-docs/bidders/gnet.md
+++ b/dev-docs/bidders/gnet.md
@@ -1,10 +1,9 @@
 ---
 layout: bidder
-title: gnet
+title: Gnet
 description: Prebid Gnet Bidder Adaptor
 pbjs: true
 biddercode: gnet
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
@@ -13,5 +12,4 @@ pbjs_version_notes: not in 5.x
 | Name          | Scope    | Description                                | Example                             | Type     |
 |---------------|----------|--------------------------------------------|-------------------------------------|----------|
 | `websiteId`      | required | The Gnet website ID                            | `'4'`                                    | `string` |
-| `externalId`      | required | The Gnet external ID                          | `'4d52cccf30309282256012cf30309282'`     | `string` |
 
diff --git a/dev-docs/bidders/go2net.md b/dev-docs/bidders/go2net.md
index 7210f822de..f1ce1099d6 100644
--- a/dev-docs/bidders/go2net.md
+++ b/dev-docs/bidders/go2net.md
@@ -11,6 +11,7 @@ media_types: video
 ### bid params
 
 {: .table .table-bordered .table-striped }
-| Name   | Scope    | Description | Example | Type     |
-|--------|----------|-------------|---------|----------|
-| `zone` | required |             |         | `string` |
+| Name          | Scope    | Description                                                                                                    | Example                                | Type     |
+|---------------|----------|----------------------------------------------------------------------------------------------------------------|----------------------------------------|----------|
+| `zone`        | required | The unique identifier of the ad placement. Could be obtained from the Go2Net UI or from your account manager.  | "e5ff8e48-4bd0-4a2c-9236-55530ab8981d" | `string` |
+| `kvTargeting` | optional | Key/Value - a pair of the unique values that will be used for the custom targeting option.                     | {key1: value2, key2: value2}           | `object` |
diff --git a/dev-docs/bidders/gothamads.md b/dev-docs/bidders/gothamads.md
index e3fabc29e7..d41aa86cbd 100644
--- a/dev-docs/bidders/gothamads.md
+++ b/dev-docs/bidders/gothamads.md
@@ -10,7 +10,7 @@ ccpa_supported: true
 schain_supported: true
 media_types: banner, video, native
 safeframes_ok: true
-bidder_supports_deals: true
+deals_supported: true
 pbjs: true
 ---
 
diff --git a/dev-docs/bidders/grid.md b/dev-docs/bidders/grid.md
index c6a619cc28..1f6a3db4ff 100644
--- a/dev-docs/bidders/grid.md
+++ b/dev-docs/bidders/grid.md
@@ -9,10 +9,11 @@ media_types: banner, video
 gdpr_supported: true
 usp_supported: true
 schain_supported: true
-getFloor: true
+floors_supported: true
 userIds: all
 tcf2_supported: true
 coppa_supported: true
+fpd_supported: true
 ---
 
 
@@ -24,3 +25,17 @@ coppa_supported: true
 | `uid`          | required | Represents the MediaGrid bidder system Ad Slot ID associated with the respective div id from the site page. | `1`                                       | `integer` |
 | `keywords`     | optional | A set of key-value pairs applied to all ad slots on the page. Values can be empty.                          | `keywords: { topic: ['stress', 'fear'] }` | `object`  |
 | `bidFloor`     | optional | Floor of the impression opportunity. If present in the request overrides XML info.                          | `0.8`                                     | `float`   |
+
+
+###Bidder Config
+
+You can allow writing in localStorage `pbjs.setBidderConfig` for the bidder `grid`
+```
+pbjs.setBidderConfig({
+    bidders: ["grid"],
+    config: {
+        localStorageWriteAllowed: true
+    }
+})
+```
+If it will be "true" this allow TheMediaGrid Bid Adapter to write userId in first party localStorage
diff --git a/dev-docs/bidders/gridNM.md b/dev-docs/bidders/gridNM.md
index 3524b8df87..fc92e91a17 100644
--- a/dev-docs/bidders/gridNM.md
+++ b/dev-docs/bidders/gridNM.md
@@ -7,6 +7,7 @@ biddercode: gridNM
 media_types: video
 gdpr_supported: true
 usp_supported: true
+fpd_supported: true
 ---
 
 
diff --git a/dev-docs/bidders/growadvertising.md b/dev-docs/bidders/growads.md
similarity index 88%
rename from dev-docs/bidders/growadvertising.md
rename to dev-docs/bidders/growads.md
index 46d320b517..8f7c295ad4 100644
--- a/dev-docs/bidders/growadvertising.md
+++ b/dev-docs/bidders/growads.md
@@ -4,12 +4,12 @@ title: GrowAdvertising
 description: Prebid GrowAdvertising Bidder Adapter
 pbjs: true
 biddercode: growads
-media_types: banner
+media_types: banner, native
 ---
 
-
 ### Bid Params
 
+{: .table .table-bordered .table-striped }
 | Name          | Scope    | Description  |  Example  | Type     |
 |----------|----------|-----------|--------------------|----------|
 | `zoneId` | required | ZoneId ID | `'unique-zone-id'` | `string` |
diff --git a/dev-docs/bidders/gumgum.md b/dev-docs/bidders/gumgum.md
index 34ed13433e..c655f75fd9 100644
--- a/dev-docs/bidders/gumgum.md
+++ b/dev-docs/bidders/gumgum.md
@@ -8,10 +8,11 @@ pbs_app_supported: true
 biddercode: gumgum
 media_types: banner, video
 schain_supported: true
-getFloor: true
-userIds: unifiedId
+floors_supported: true
+userIds: unifiedId, identityLink
 gdpr_supported: true
 usp_supported: true
+fpd_supported: true
 ---
 
 ### Note:
@@ -33,6 +34,7 @@ Client side and server side parameters differ slightly. For Server side (Prebid
 | `zone`         | required for all bid requests tracking a single domain or site   | Tracking ID           | `'ggumtest'`           | `string`  |
 | `pubId`        | required for all bid requests tracking multiple domains or sites | Publisher ID          | `123`                  | `integer` |
 | `irisid`       | optional                                                         | Iris.tv ID            | `'iris_6f9285823a4'`   | `string`  |
+| `slot`         | optional                                                         | Placement ID          | `40`                   | `number`  |
 
 ### Client Side Bid Params
 
diff --git a/dev-docs/bidders/huaweiads.md b/dev-docs/bidders/huaweiads.md
new file mode 100644
index 0000000000..1211990c2b
--- /dev/null
+++ b/dev-docs/bidders/huaweiads.md
@@ -0,0 +1,34 @@
+---
+layout: bidder
+title: HuaweiAds
+description: Prebid HuaweiAds Bidder Adapter
+biddercode: huaweiads
+gvl_id: 856
+media_types: banner, video, native
+safeframes_ok: false
+deals_supported: true
+pbjs: false
+pbs: true
+pbs_app_supported: true
+prebid_member: false
+---
+
+### Note:
+
+The Example Bidding adapter requires setup before beginning. Please contact us at hwads@huawei.com.
+1. The following parameters need to be registered on the HuaweiAds platform, and at the same time, the permission to access the server interface needs to be opened on the HuaweiAds platform.
+2. You can find ( publisherid, signkey, keyid ) on the platform after registration.
+3. You need to create your advertising creative on the platform and get the corresponding ( slotid, adtype ).
+4. We need OAID, GAID, IMEI (One must not be empty, you can collect OAID first, or use GAID) in our request, so when using prebidmobile, please add something like "TargetingParams.addUserData("oaid", "oaid-test") TargetingParams.addUserData("gaid", "gaid-test") TargetingParams.addUserData("imei", "imei-test")".
+5. You can also send the clientTime to the HuaweiAds Adx server, like "TargetingParams.addUserData("clientTime", "2018-11-02 16:34:07.981+0800")". if not, it will use the prebid server time and zone.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description  | Example   | Type     |
+|---------------|----------|--------------|-----------|----------|
+| `publisherid` | required | Publisher Id | `'2001000399'` | `string` |
+| `signkey` | required | Sign Key | `'5d********82c38594f8b2bdfd9f********a398dca734932898e3********8d'` | `string` |
+| `keyid` | required | Key Id | `'2'` | `string` |
+| `slotid` | required | Slot Id | `'u42ohmaufh'` | `string` |
+| `adtype` | required | Ad Type | `'native'` | `string` |
diff --git a/dev-docs/bidders/impactify.md b/dev-docs/bidders/impactify.md
index 5bb97133a9..20c55f326b 100644
--- a/dev-docs/bidders/impactify.md
+++ b/dev-docs/bidders/impactify.md
@@ -3,7 +3,7 @@ layout: bidder
 title: Impactify
 description: Prebid Impactify Bidder Adapter
 pbjs: true
-pbs: false
+pbs: true
 biddercode: impactify
 gdpr_supported: true
 tcf2_supported: true
@@ -11,8 +11,8 @@ usp_supported: true
 schain_supported: true
 coppa_supported: true
 media_types: video
+userIds: criteo, id5Id, pubCommonId, unifiedId, uid2, netId
 gvl_id: 606
-pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/improvedigital.md b/dev-docs/bidders/improvedigital.md
index c2257fcf6b..89a765d3a4 100644
--- a/dev-docs/bidders/improvedigital.md
+++ b/dev-docs/bidders/improvedigital.md
@@ -6,7 +6,7 @@ biddercode: improvedigital
 pbjs: true
 pbs: true
 gdpr_supported: true
-userIds: criteo, id5Id
+userIds: all
 usp_supported: true
 media_types: banner, native, video
 schain_supported: true
diff --git a/dev-docs/bidders/inmar.md b/dev-docs/bidders/inmar.md
index 23f028e296..f00dc47243 100644
--- a/dev-docs/bidders/inmar.md
+++ b/dev-docs/bidders/inmar.md
@@ -8,7 +8,8 @@ usp_supported: true
 userIds: identityLink, liveIntentId, unifiedId, pubCommonId, pubProvidedId, sharedId
 media_types: banner, video
 safeframes_ok: false
-bidder_supports_deals: true
+deals_supported: true
+fpd_supported: true
 pbjs: true
 ---
 ### Note:
diff --git a/dev-docs/bidders/inmobi.md b/dev-docs/bidders/inmobi.md
index aa87c6cb33..bafea45f6d 100644
--- a/dev-docs/bidders/inmobi.md
+++ b/dev-docs/bidders/inmobi.md
@@ -7,7 +7,8 @@ gdpr_supported: true
 usp_supported: false
 gvl_id: 333
 coppa_supported: true
-media_types: banner, video
+schain_supported: true
+media_types: banner, video, native
 pbs: true
 pbs_app_supported: true
 ---
@@ -17,6 +18,12 @@ pbs_app_supported: true
 The InMobi Prebid adapter requires a setup to create placement IDs. Please contact your InMobi partner manager for setup assistance. 
 For queries, write to us at prebid-support@inmobi.com
 
+### User Sync Disclosure:
+
+InMobi has partnered with a third party, ID5, to use their ID as our primary user identifier for mobile web supply. We will also rely on ID5 IDs to handle compliance flows related to Data Subject Right requests in our systems. Hence, we require the publisher to use ID5’s sync URL for user syncing and passing the corresponding ID5 ID to InMobi in the bid request. For this purpose, we provide ID5’s sync URL in our Prebid adapter for User ID sync. Note that, InMobi has a direct contract with ID5 for consuming ID5 ID and the user sync via Prebid does not require the publisher to get into a contractual relationship with ID5.
+
+To opt out of InMobi ads on mobile web inventory or for any other requests, the user needs to visit the Opt-out page on InMobi website (https://www.inmobi.com/page/opt-out/). For opting out of ID5 ID entirely, the user needs to visit ID5’s opt out page: https://id5.io/platform-privacy-policy/.
+
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/innity.md b/dev-docs/bidders/innity.md
index f5dc7b7d0e..228490a590 100644
--- a/dev-docs/bidders/innity.md
+++ b/dev-docs/bidders/innity.md
@@ -4,7 +4,6 @@ title: Innity
 description: Prebid Innity Bidder Adapter
 pbjs: true
 biddercode: innity
-pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/insticator.md b/dev-docs/bidders/insticator.md
new file mode 100644
index 0000000000..794279bd07
--- /dev/null
+++ b/dev-docs/bidders/insticator.md
@@ -0,0 +1,17 @@
+---
+layout: bidder
+title: Insticator
+description: Prebid Insticator Bidder Adapter
+biddercode: insticator
+gdpr_supported: true
+media_types: banner
+pbjs: true
+gvl_id: 910
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name    | Scope    | Description     | Example              | Type      |
+|---------|----------|-----------------|----------------------|-----------|
+| `adUnitId`  | Required | The ad unit ID provided by Insticator | `'test'` | `string`  |
diff --git a/dev-docs/bidders/integr8.md b/dev-docs/bidders/integr8.md
new file mode 100644
index 0000000000..27662ef942
--- /dev/null
+++ b/dev-docs/bidders/integr8.md
@@ -0,0 +1,17 @@
+---
+layout: bidder
+title: Integr8
+description: Prebid Integr8 Bidder Adapter
+pbjs: true
+biddercode: integr8
+media_types: banner, video
+---
+
+
+### Bid Params
+
+| Name          | Scope    |Description                                                             | Example            | Type      |
+|---------------|----------|------------------------------------------------------------------------|--------------------|-----------|
+| `propertyId`  | required |Property id                                                             | `"12345"`          | `string`  |
+| `placementId` | required |Placement id                                                            | `"54321"`          | `string`  |
+| `data`        | optional |Catalog data (contents) and/or inventory data (custom key/value pairs)  | `{catalogs: [{ catalogId: "699229", items: ["193", "4", "1"] }], inventory: { category: ["tech"], query: ["iphone 12"] }}` | `object` |
diff --git a/dev-docs/bidders/interactiveOffers.md b/dev-docs/bidders/interactiveOffers.md
index f95591a67f..daadab5e9d 100644
--- a/dev-docs/bidders/interactiveOffers.md
+++ b/dev-docs/bidders/interactiveOffers.md
@@ -10,14 +10,14 @@ media_types: banner
 ---
 
 ### Note:
-Module that connects to interactiveOffers demand sources. Param pubid is required.
+Module that connects to interactiveOffers demand sources. Param partnerId is required.
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description | Example | Type     |
 |---------------|----------|-------------|---------|----------|
-| `pubid` | required |  Publisher id          | 35   | `integer` |
+| `partnerId` | required |  Partner id          | 'abc123'   | `string` |
 
 Example:
 
@@ -25,7 +25,7 @@ Example:
 {
     bidder: "interactiveOffers",
     params: {
-        pubid: 35
+        partnerId: "abc123"
     }
 }
 ```
diff --git a/dev-docs/bidders/iqm.md b/dev-docs/bidders/iqm.md
index a9c01669a9..a3251a5a72 100644
--- a/dev-docs/bidders/iqm.md
+++ b/dev-docs/bidders/iqm.md
@@ -6,14 +6,78 @@ pbjs: true
 biddercode: iqm
 ---
 
-
-### Bid Params
+# Parameters
 
 {: .table .table-bordered .table-striped }
+| Name          | Scope    | Description               | Example              |
+| :------------ | :------- | :------------------------ | :------------------- |
+| `publisherId` | required | The Publisher ID from iQM | "df5fd732-c5f3-11e7-abc4-cec278b6b50a" |
+| `geo.country` | required | The publisher country| "USA" |
+| `placementId` | required | The Placement ID from iQM | 23451                |
+| `bidfloor`    | optional | Bid Floor                 | 0.50                 |
+
+# Description
+
+Module that connects to iQM demand sources
+
+# Test Parameters
+```
+var adUnits = [{
+        code: 'div-gpt-ad-1460505748561-0',
+        mediaTypes: {
+          banner: {
+            sizes: [[300,250]]
+          }
+        },
+
+        bids: [{
+          bidder: 'iqm',
+          params: {
+            geo:{
+              country:'USA'
+            },
+
+            publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a',
+            placementId: 23451,
+            bidfloor: 0.50
+          }
+        }]
+
+      }]
+
+```
+
+# adUnit Video
+
+```
+ var videoAdUnit = {
+      code: 'video1',
+      mediaTypes: {
+        video: {
+          playerSize: [640, 480],
+          context: 'instream'
+        }
+      },
+      bids: [{
+        bidder: 'iqm',
+        params: {
+          // placementId: iosDevice ? 13239390 : 13232361, // Add your own placement id here. Note, skippable video is not supported on iOS
+          publisherId: 'df5fd732-c5f3-11e7-abc4-cec278b6b50a',
+          placementId: 23451,
+          geo:{
+            country:'USA'
+          },
+
+          bidfloor: 0.05,
+          video: {
+            placement :2,
+            mimes: ['video/mp4'],
+            protocols: [2,5],
+            skipppable: true,
+            playback_method: ['auto_play_sound_off']
+          }
+        }
+      }]
+      };
 
-| Name          | Scope    | Description                | Example                                  | Type      |
-|---------------|----------|----------------------------|------------------------------------------|-----------|
-| `publisherId` | required | The Publisher ID from iQM. | `'df5fd732-c5f3-11e7-abc4-cec278b6b50a'` | `string`  |
-| `tagId`       | required | The Tag ID from iQM.       | `'1c5c9ec2-c5f4-11e7-abc4-cec278b6b50a'` | `string`  |
-| `placementId` | required | The Placement ID from iQM. | `'50cc36fe-c5f4-11e7-abc4-cec278b6b50a'` | `string`  |
-| `bidfloor`    | required | Bid floor                  | `0.50`                                   | `integer` |
+```
diff --git a/dev-docs/bidders/iqzone.md b/dev-docs/bidders/iqzone.md
new file mode 100644
index 0000000000..099cde3ba5
--- /dev/null
+++ b/dev-docs/bidders/iqzone.md
@@ -0,0 +1,32 @@
+---
+layout: bidder
+title: IQzone
+description: Prebid IQzone Bidder Adapter
+biddercode: iqzone
+usp_supported: true
+gdpr_supported: true
+schain_supported: true
+media_types: banner, video, native
+pbjs: true
+pbs: true
+pbs_app_supported: true
+---
+
+### Prebid.js Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId`      | required | Placement Id         | `'0'`    | `'string'` |
+
+### Prebid server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description           | Example   | Type      |
+|---------------|----------|-----------------------|-----------|-----------|
+| `placementId`      | optional | Placement Id         | `'0'`    | `'string'` |
+| `endpointId`      | optional | Endpoint Id         | `'0'`    | `'string'` |
+
+### Note
+
+For the prebid server, you only need to use one parameter, placementId or endpointId
diff --git a/dev-docs/bidders/ix.md b/dev-docs/bidders/ix.md
index 8dd0d38e33..c19447d1ee 100644
--- a/dev-docs/bidders/ix.md
+++ b/dev-docs/bidders/ix.md
@@ -10,9 +10,10 @@ pbs_app_supported: true
 schain_supported: true
 coppa_supported: true
 gdpr_supported: true
-getFloor: true
+floors_supported: true
 usp_supported: true
 media_types: banner, video
+fpd_supported: true
 gvl_id: 10
 prebid_member: yes
 ---
@@ -27,37 +28,16 @@ Maintainer: prebid.support@indexexchange.com
 
 ## Description
 
-Publishers may access Index Exchange's (IX) network of demand
-sources through our Prebid.js and Prebid Server adapters. Both of these modules are GDPR and CCPA compliant.
+Publishers may access Index Exchange's (IX) network of demand sources through our Prebid.js and Prebid Server adapters. Both of these modules are GDPR and CCPA compliant.
 
 ### IX Prebid.js Adapter
 
-Our Prebid.js adapter is compatible with both the older ad unit format where the `sizes` and
-`mediaType` properties are placed at the top-level of the ad unit, and the newer
-format where this information is encapsulated within the `mediaTypes` object. We
-recommend that you use the newer format when possible as it will be better able
-to accommodate new feature additions.
+This module connects publishers to Index Exchange's (IX) network of demand sources through Prebid.js. This module is GDPR and CCPA compliant.
 
-If a mix of properties from both formats is present within an ad unit, the
-newer format's properties will take precedence.
+It is compatible with the new Prebid.js 5.0 ad unit format where banner and video properties, including the size parameter, are stored in the `adUnits[].mediaTypes` object. IX still supports both size as an optional parameter and the Missing Sizes feature, but we recommend upgrading to the Prebid.js 5.0 format.
 
-Here are examples of both formats.
+For more information about how the `adUnits[].mediaTypes` object is formatted in Prebid.js 5.0, refer to the following example.
 
-##### Older Format
-```javascript
-var adUnits = [{
-    // ...
-
-    sizes: [
-        [300, 250],
-        [300, 600]
-    ]
-
-    // ...
-}];
-```
-
-##### Newer Format
 ```javascript
 var adUnits = [{
     // ...
@@ -70,60 +50,63 @@ var adUnits = [{
         },
         video: {
             context: 'instream',
-            playerSize: [
-                [1280, 720]
-            ]
+            playerSize: [300, 250]
         }
     },
     // ...
 }];
 ```
-
 ### Supported Media Types (Prebid.js)
 
 {: .table .table-bordered .table-striped }
-| Type   | Support |
-| ------ | ------- |
-| `Banner` | Fully supported for all IX approved sizes |
-| `Video`  | Fully supported for all IX approved sizes |
-| `Native` | Not supported |
+| Type | Support |
+|---|---|
+| `banner` | Fully supported for all IX approved sizes |
+| `video`  | Fully supported for all IX approved sizes |
+| `native` | Not supported |
 
 ### Supported Media Types (Prebid Server)
 
 {: .table .table-bordered .table-striped }
 | Type   | Support |
-| ------ | ------- |
-| `Banner` | Fully supported |
-| `Video`  | Fully supported, including ad pods for OTT |
-| `Native` | Not supported |
+|------|-------|
+| `banner` | Fully supported |
+| `video`  | Fully supported, including ad pods for OTT |
+| `native` | Not supported |
+
+# Ad Unit or Bidder Parameters
+
+These params can be specified in the ad unit level, which will be the preferred way going forward with PBJS 5.0
+
+Each of the IX-specific parameters provided under the object are detailed here.
 
-## Bid Parameters
+The following parameters are specified in the ad unit `adUnits[].mediaTypes`. This includes each of the IX-specific parameters provided under `adUnits[].bids[].params`. 
 
-Each of the IX-specific parameters provided under the `adUnits[].bids[].params`
-object are detailed here.
+In Prebid.js versions 5.0 and above, mediaType and sizes are not required to be defined at the ad unit level.
 
 ### Banner
 
 {: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-| ---- | ----- | ----------- | ------- | ---- |
-| `siteId` | Required | An IX-specific identifier that is associated with a specific size on this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. | `'3723'` | `string` | 
-| `size` | Required for client-side serving | The single size associated with the site ID. It should be one of the sizes listed in the ad unit under `adUnits[].sizes` or `adUnits[].mediaTypes.banner.sizes`. Note that the 'ix' Prebid Server bid adapter ignores this parameter. | `[300, 250]` | `Array<integer>` | 
-| `id` | Optional | An alphanumerical value used to identify the `slot_id` in reporting | `id: 'billboardHomepage'`, `id: 'billboardArticle'` | `string` |
+| Key | Scope | Type | Description |
+|---|---|---|---|
+| `siteId` | Required | String | An IX-specific identifier that is associated with this ad unit. It will be associated to the single size, if the size provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'3723'`, `'6482'`, `'3639'`|
+| `sizes` | Optional | Number[Number[]] | The size/sizes associated with the site ID, as listed in the ad unit under `adUnits[].mediaTypes.banner.sizes`. For example, `[300, 250], [300, 600], [728, 90]`|
 
 ### Video
 
 {: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-| ---- | ----- | ----------- | ------- | ---- |
-| `siteId` | Required | An IX-specific identifier that is associated with a specific size on this ad unit. This is similar to a placement ID or an ad unit ID that some other modules have. | `'3723'` | `string` |
-| `size` | Required | The single size associated with the site ID. It should be one of the sizes listed in the ad unit under `adUnits[].sizes` or `adUnits[].mediaTypes.video.playerSize`. | `[300, 600]` | `Array<integer>` |
-| `video` | Required | The video object will serve as the properties of the video ad. You can create any field under the video object that is mentioned in the `OpenRTB Spec v2.5`. Some fields like `mimes`, `protocols`, `minduration`, `maxduration` are required. Properties not defined at this level, will be pulled from the Adunit level. | `video: { startdelay: 0 }` | `object` |
-| `video.mimes` | Required | Array list of content MIME types supported. | `['video/mp4', 'video/x-flv']` | `Array<string>` |
-| `video.minduration` | Required | Minimum video ad duration in seconds. | `0` | `integer` |
-| `video.maxduration` | Required | Maximum video ad duration in seconds. | `300` | `integer` |
-| `video.protocol` / `video.protocols` | Required | Either a single protocol provided as an integer, or protocols provided as a list of integers. `2` - VAST 2.0, `3` - VAST 3.0, `5` - VAST 2.0 Wrapper, `6` - VAST 3.0 Wrapper | `[2,3,5,6]` | `integer` / `Array<integer>` |
-| `id` | Optional | An alphanumerical value used to identify the `slot_id` in reporting | `id: 'inStreamCTP'`, `id: 'inStreamAutoPlay'` | `string` |
+| Key | Scope | Type | Description |
+|---|---|---|---|
+| `siteId` | Required | String | An IX-specific identifier that is associated with this ad unit. It will be associated to the single size, if the size is provided. This is similar to a placement ID or an ad unit ID that some other modules have. For example, `'3723'`, `'6482'`, `'3639'`|
+| `size` | Optional | Number[] | The single size that is associated with the site ID, as listed in the ad unit under `adUnits[].sizes` or `adUnits[].mediaTypes.video.playerSize`. For example, [300, 250], [300, 600]. <BR><BR>This parameter is optional in Prebid.js versions 5.0 and above. Versions prior to 5.0 will still require a size parameter.|
+| `video` | Optional | Hash | The video object will serve as the properties of the video ad. You can create any field under the video object that is mentioned in the `OpenRTB Spec v2.5`. Some fields like `mimes, protocols, minduration, maxduration` are required. Properties not defined at this level, will be pulled from the Adunit level.|
+| `video.w` | Required | Integer | The video player size width in pixels that will be passed to demand partners.|
+| `video.h` | Required | Integer | The video player size height in pixels that will be passed to demand partners.|
+| `video.playerSize` | Optional* | Integer | The video player size that will be passed to demand partners. * In the absence of `video.w` and `video.h`, this field is required.|
+| `video.mimes` | Required | String[] | Array list of content MIME types supported. Popular MIME types include, but are not limited to, `"video/x-ms- wmv"` for Windows Media and `"video/x-flv"` for Flash Video.|
+| `video.minduration` | Required | Integer | Minimum video ad duration in seconds.|
+| `video.maxduration` | Required | Integer | Maximum video ad duration in seconds.|
+| `video.protocol` / `video.protocols` | Required | Integer / Integer[] | Either a single protocol provided as an integer, or protocols provided as a list of integers. `2` - VAST 2.0, `3` - VAST 3.0, `5` - VAST 2.0 Wrapper, `6` - VAST 3.0 Wrapper|
 
 ## Setup Guide
 
@@ -152,9 +135,7 @@ var adUnits = [{
     mediaTypes: {
         video: {
             context: 'instream',
-            playerSize: [
-                [1280, 720]
-            ]
+            playerSize: [1280, 720]
         }
     },
     bids: []
@@ -170,13 +151,12 @@ bid objects under `adUnits[].bids`:
 {
     bidder: 'ix',
     params: {
-        siteId: '123456',
-        size: [300, 250]
+        siteId: '123456'
     }
 }
 ```
 
-Set `params.siteId` and `params.size` in each bid object to the values provided
+Set `params.siteId` in the bid object to the values provided
 by your IX representative.
 
 **Examples**
@@ -196,14 +176,12 @@ var adUnits = [{
     bids: [{
         bidder: 'ix',
         params: {
-            siteId: '123456',
-            size: [300, 250]
+            siteId: '123456'
         }
     }, {
         bidder: 'ix',
         params: {
-            siteId: '123456',
-            size: [300, 600]
+            siteId: '123456'
         }
     }]
 }];
@@ -211,28 +189,33 @@ var adUnits = [{
 **Video (Instream):**
 ```javascript
 var adUnits = [{
-    code: 'video-request-a',
+    code: 'video-div-a',
     mediaTypes: {
         video: {
+            // Preferred location for openrtb v2.5 compatible video obj
             context: 'instream',
-            playerSize: [
-                [1280, 720]
-            ]
+            playerSize: [300, 250],
+            mimes: [
+                    'video/mp4',
+                    'video/webm'
+                ],
+            minduration: 0,
+            maxduration: 60,
+            protocols: [6]
         }
     },
     bids: [{
         bidder: 'ix',
         params: {
-            siteId: '123456',
-            size: [1280, 720],
+            siteId: '12345'
+        }
+    }, {
+        bidder: 'ix',
+        params: {
+            siteId: '12345',
             video: {
-                mimes: [
-                    'video/mp4',
-                    'video/webm'
-                ],
-                minduration: 0,
-                maxduration: 60,
-                protocols: [6]
+                // openrtb v2.5 compatible video obj
+                // If required, use this to override mediaTypes.video.XX properties
             }
         }
     }]
@@ -250,7 +233,14 @@ var adUnits = [{
     mediaTypes: {
         video: {
             context: 'outstream',
-            playerSize: [[640, 360]]
+            playerSize: [300, 250],
+            mimes: [
+                    'video/mp4',
+                    'video/webm'
+                ],
+            minduration: 0,
+            maxduration: 60,
+            protocols: [6]
         }
     },
     renderer: {
@@ -262,16 +252,9 @@ var adUnits = [{
     bids: [{
         bidder: 'ix',
         params: {
-            siteId: '123456',
-            size: [640, 360],
+            siteId: '12345',
             video: {
-                mimes: [
-                    'video/mp4',
-                    'video/webm'
-                ],
-                minduration: 0,
-                maxduration: 60,
-                protocols: [6]
+                // If required, use this to override mediaTypes.video.XX properties   
             }
         }
     }]
@@ -312,21 +295,21 @@ pbjs.setConfig({
 By default, the IX bidding adapter bids on all banner sizes available in the ad unit when configured to at least one banner size. If you want the IX bidding adapter to only bid on the banner size it’s configured to, switch off this feature using `detectMissingSizes`.
 ```
 pbjs.setConfig({
-                ix: {
-                    detectMissingSizes: false
-                }
-            });
+    ix: {
+        detectMissingSizes: false
+    }
+});
 ```
 OR
 ```
 pbjs.setBidderConfig({
-                bidders: ["ix"],
-                config: {
-                    ix: {
-                        detectMissingSizes: false
-                    }
-                }
-            });
+    bidders: ["ix"],
+    config: {
+        ix: {
+            detectMissingSizes: false
+        }
+    }
+});
 ```
 
 ### 2. Include `ixBidAdapter` in your build process
@@ -357,6 +340,35 @@ gulp build --modules=bidderModules.json
 
 ## Setting First Party Data (FPD)
 
+As a part of 4.30, IX will start to pick up FPD in the global FPD module, as well as continue to pick up IX bidder-specific FPD. Previous versions of IX Bid Adapter will only support the IX bidder-specific FPD.
+
+### Global FPD
+
+As of Prebid.js 4.30, use the more generic `ortb2` interface, which can be used for more than just First Party Data.
+
+The First Party Data feature allows publishers to specify key/value data in one place where each compatible bid adapter can read it.
+
+To supply global data, use the [`setConfig()`](/dev-docs/publisher-api-reference/setConfig.html) function as illustrated below:
+
+```
+pbjs.setConfig({
+   ortb2: {
+       site: {
+            ...
+       },
+       user: {
+            ...
+       }
+    }
+});
+```
+
+Use the [`setBidderConfig()`](/dev-docs/publisher-api-reference/setBidderConfig.html) function to supply bidder-specific data.
+
+For more information about the standard or more detailed examples, refer to [First Party Data Feature](/features/firstPartyData.html).
+
+### IX bidder-specific FPD
+
 FPD allows you to specify key-value pairs that are passed as part of the
 query string to IX for use in Private Marketplace Deals which rely on query
 string targeting for activation. For example, if a user is viewing a
@@ -384,6 +396,9 @@ pbjs.setConfig({
 The values can be updated at any time by calling `pbjs.setConfig` again. The
 changes will be reflected in any proceeding bid requests.
 
+{: .alert.alert-warning :}
+Continue to use IX bidder-specific First Party Data for IX deals. Global First Party Data is not yet supported in IX deals. Consult your IX representative with any questions.
+
 ## Setting a Server Side Timeout
 
 Setting a server-side timeout allows you to control the max length of time taken to connect to the server. The default value when unspecified is 50ms.
@@ -454,18 +469,11 @@ towards total impressions on IX's side.
 
 ## FAQs
 
-### Why do I have to input size in `adUnits[].bids[].params` for IX when the size is already in the ad unit?
-
-There are two important reasons why we require it:
-
-1. An IX site ID maps to a single size, whereas an ad unit can have multiple
-sizes. To ensure that the right site ID is mapped to the correct size in the ad
-unit we require the size to be explicitly stated.
+#### Why do I have to input size in `adUnits[].bids[].params` for IX when the size is already in the ad unit?
 
-2. An ad unit may have sizes that IX does not support. By explicitly stating the
-size, you can choose not to have IX bid on certain sizes that are invalid.
+If you are using Prebid.js version 5.0 and above, the `size` parameter is not a required field. Only the `siteID` is required, and it is stored with the sizes in the ad unit.
 
-### How can I view the bid request sent to IX by Prebid.js?
+#### How can I view the bid request sent to IX by Prebid.js?
 
 In your browser of choice, create a new tab and open the developer tools. In
 developer tools, select the network tab. Then, navigate to a page where IX is
diff --git a/dev-docs/bidders/jixie.md b/dev-docs/bidders/jixie.md
index b9241665de..e2945d6bc5 100644
--- a/dev-docs/bidders/jixie.md
+++ b/dev-docs/bidders/jixie.md
@@ -5,7 +5,7 @@ description: Prebid Jixie Bidder Adaptor
 pbjs: true
 pbs: true
 biddercode: jixie
-bidder_supports_deals: false
+deals_supported: false
 media_types: banner, video
 gdpr_supported: false
 ---
diff --git a/dev-docs/bidders/justpremium.md b/dev-docs/bidders/justpremium.md
index 20732ff502..f5eebddc3c 100644
--- a/dev-docs/bidders/justpremium.md
+++ b/dev-docs/bidders/justpremium.md
@@ -6,6 +6,7 @@ pbjs: true
 biddercode: justpremium
 gdpr_supported: true
 usp_supported: true
+schain_supported: true
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
 ---
 
diff --git a/dev-docs/bidders/kargo.md b/dev-docs/bidders/kargo.md
index 926a62f1a1..562d797b4d 100644
--- a/dev-docs/bidders/kargo.md
+++ b/dev-docs/bidders/kargo.md
@@ -4,6 +4,7 @@ title: Kargo
 description: Prebid Kargo Bidder Adaptor
 pbjs: true
 biddercode: kargo
+media_types: banner, video
 gdpr_supported: true
 userIds: unifiedId
 usp_supported: true
diff --git a/dev-docs/bidders/kobler.md b/dev-docs/bidders/kobler.md
index a93b1032b3..3a2951ce6d 100644
--- a/dev-docs/bidders/kobler.md
+++ b/dev-docs/bidders/kobler.md
@@ -5,8 +5,8 @@ description: Kobler Bidder Adapter
 biddercode: kobler
 pbjs: true
 media_types: banner
-getFloor: true
-bidder_supports_deals: true
+floors_supported: true
+deals_supported: true
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/krushmedia.md b/dev-docs/bidders/krushmedia.md
index a6b4ce8012..90b4734ed9 100644
--- a/dev-docs/bidders/krushmedia.md
+++ b/dev-docs/bidders/krushmedia.md
@@ -9,7 +9,6 @@ media_types: banner, video, native
 gdpr: true
 pbjs: true
 pbs: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/kubient.md b/dev-docs/bidders/kubient.md
index 4161e77ef1..f8f124fa63 100644
--- a/dev-docs/bidders/kubient.md
+++ b/dev-docs/bidders/kubient.md
@@ -6,17 +6,70 @@ pbjs: true
 pbs: true
 schain_supported: true
 biddercode: kubient
-media_types: banner
+media_types: banner, video
 gdpr_supported: true
 usp_supported: true
+tcf2_supported: true
+pbjs: true
+pbs: true
 gvl_id: 794
-pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
 
 The Kubient Bidder Adapter requires setup and approval before beginning. Please reach out to <prebid@kubient.com> for more details.
 
+Banner Settings:
+
+var adUnits = [
+    {
+        code: 'banner-ad-unit',
+        mediaTypes: {
+            banner: {
+                sizes: [[300, 100]]
+            }
+        },
+        bids: [{
+            bidder: 'kubient',
+            params: {
+                zoneid: "5fbb948f1e22b",
+            }
+        }]
+    }
+];
+
+Video Settings:
+
+var adUnits = [
+    {
+        code: 'video-ad-unit',
+        mediaTypes: {
+            video: {
+                playerSize: [300, 250],               // required
+                context: 'instream',                  // required
+                mimes: ['video/mp4','video/x-flv'],   // required
+                protocols: [ 2, 3 ],                  // required, set at least 1 value in array
+                placement: 1,                         // optional, defaults to 2 when context = outstream
+                api: [ 1, 2 ],                        // optional
+                skip: 0,                              // optional
+                minduration: 5,                       // optional
+                maxduration: 30,                      // optional
+                playbackmethod: [1,3],                // optional
+                battr: [ 13, 14 ],                    // optional
+                linearity: 1,                         // optional
+                minbitrate: 10,                       // optional
+                maxbitrate: 10                        // optional
+            }
+        },
+        bids: [{
+            bidder: 'kubient',
+            params: {
+                zoneid: "60ad1c0b35864",
+            }
+        }]
+    }
+];
+
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/limelight-digital.md b/dev-docs/bidders/limelightDigital.md
similarity index 78%
rename from dev-docs/bidders/limelight-digital.md
rename to dev-docs/bidders/limelightDigital.md
index aa7d5e95b1..6acf929fb6 100644
--- a/dev-docs/bidders/limelight-digital.md
+++ b/dev-docs/bidders/limelightDigital.md
@@ -4,7 +4,6 @@ title: Limelight Digital
 description: Prebid Limelight Digital Bidder Adaptor
 pbjs: true
 biddercode: limelightDigital
-aliasCode: pll
 media_types: video
 ---
 
@@ -13,6 +12,6 @@ media_types: video
 {: .table .table-bordered .table-striped }
 | Name           | Scope      | Description                                                    | Example            |type|
 | :-----------   | :--------- | :------------                                                  | :----------------- |:---|
-| `host` | required | Ad network's RTB host | `'exchange.ortb.net` | `string` |
+| `host` | required | Ad network's RTB host | `'exchange.ortb.net'` | `string` |
 | `adUnitId` | required   | Ad Unit Id will be generated on Limelight Digital Platform. | 0                        |integer|
-| `adUnitType`      | required   | Type of Ad Unit ('video', 'banner')                                             | 'banner'                 |string|
+| `adUnitType`      | required   | Type of Ad Unit (`'video'`, `'banner'`)                                             | `'banner'`                 |string|
diff --git a/dev-docs/bidders/logan.md b/dev-docs/bidders/logan.md
index d50f36fabe..01fb0f3af2 100644
--- a/dev-docs/bidders/logan.md
+++ b/dev-docs/bidders/logan.md
@@ -8,7 +8,6 @@ schain_supported: true
 media_types: banner, video, native
 gdpr: true
 pbjs: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/logicad.md b/dev-docs/bidders/logicad.md
index 038c9a7eac..f0c28c3825 100644
--- a/dev-docs/bidders/logicad.md
+++ b/dev-docs/bidders/logicad.md
@@ -6,12 +6,11 @@ pbjs: true
 pbs: true
 pbs_app_supported: true
 biddercode: logicad
-bidder_supports_deals: false
+deals_supported: false
 media_types: banner, native
 userIds: all
 gdpr_supported: false
 prebid_member: false
-pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/mantis.md b/dev-docs/bidders/mantis.md
index 5e663ba17f..ba004f27b6 100644
--- a/dev-docs/bidders/mantis.md
+++ b/dev-docs/bidders/mantis.md
@@ -7,7 +7,6 @@ biddercode: mantis
 media_types: native, video
 usp_supported: true
 gdpr_supported: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/marsmedia.md b/dev-docs/bidders/marsmedia.md
index a38b704088..8281cb732f 100644
--- a/dev-docs/bidders/marsmedia.md
+++ b/dev-docs/bidders/marsmedia.md
@@ -7,7 +7,7 @@ pbs: true
 biddercode: marsmedia
 media_types: video, banner
 gdpr_supported: true
-getFloor: true
+floors_supported: true
 schain_supported: true
 usp_supported: true
 coppa_supported: true
diff --git a/dev-docs/bidders/mathildeads.md b/dev-docs/bidders/mathildeads.md
new file mode 100644
index 0000000000..c7dbe99b03
--- /dev/null
+++ b/dev-docs/bidders/mathildeads.md
@@ -0,0 +1,20 @@
+---
+layout: bidder
+title: MathildeAds
+description: Prebid MathildeAds Bidder Adapter
+biddercode: mathildeads
+usp_supported: true
+schain_supported: true
+media_types: banner, video, native
+gdpr_supported: true
+pbjs: true
+pbs: false
+pbs_app_supported: false
+---
+
+### Prebid.JS Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                              | Example    | Type      |
+|----------------|----------|----------------------------------------------------------|------------|-----------|
+| `placementId` | required | Placement Id will be generated on MathildeAds Platform. | `'1234'`        | `string` |
diff --git a/dev-docs/bidders/mediakeys.md b/dev-docs/bidders/mediakeys.md
new file mode 100644
index 0000000000..8c9a8d5c81
--- /dev/null
+++ b/dev-docs/bidders/mediakeys.md
@@ -0,0 +1,24 @@
+---
+layout: bidder
+title: Mediakeys
+description: Mediakeys Prebid Bidder Adapter
+biddercode: mediakeys
+media_types: banner
+gvl_id: 498
+pbjs: true
+floors_supported: true
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+safeframes_ok: true
+userIds: all
+fpd_supported: true
+---
+### Note:
+
+The Mediakeys Bidding adapter requires setup before beginning and will repsond with bids for whitelisted domains only. Please contact us at prebidjs@mediakeys.com.
+
+### Bid Params
+
+No bid params are required. See Note section.
diff --git a/dev-docs/bidders/medianet.md b/dev-docs/bidders/medianet.md
index 73de20eb45..594e349bc7 100644
--- a/dev-docs/bidders/medianet.md
+++ b/dev-docs/bidders/medianet.md
@@ -11,7 +11,8 @@ prebid_member: true
 pbjs: true
 gvl_id: 142
 schain_supported: true
-getFloor: true
+floors_supported: true
+fpd_supported: true
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/mgid.md b/dev-docs/bidders/mgid.md
index 8365380c02..f363ab5d96 100644
--- a/dev-docs/bidders/mgid.md
+++ b/dev-docs/bidders/mgid.md
@@ -8,7 +8,6 @@ biddercode: mgid
 media_types: banner,native
 gdpr_supported: true
 gvl_id: 358
-pbjs_version_notes: not in 5.x
 ---
 
 ### Table of Contents
diff --git a/dev-docs/bidders/microad.md b/dev-docs/bidders/microad.md
index 0e133ab94a..09f710565b 100644
--- a/dev-docs/bidders/microad.md
+++ b/dev-docs/bidders/microad.md
@@ -5,7 +5,6 @@ description: Prebid MicroAd SSP Bidder Adaptor
 pbjs: true
 biddercode: microad
 media_types: banner
-pbjs_version_notes: not in 5.x
 ---
 
 Note:
diff --git a/dev-docs/bidders/mytarget.md b/dev-docs/bidders/mytarget.md
index cf96c21dff..d53cbca13a 100644
--- a/dev-docs/bidders/mytarget.md
+++ b/dev-docs/bidders/mytarget.md
@@ -4,7 +4,6 @@ title: myTarget
 description: Prebid myTarget Bidder Adapter
 pbjs: true
 biddercode: mytarget
-pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/nativo.md b/dev-docs/bidders/nativo.md
index 67d7921d18..9c72c55f07 100644
--- a/dev-docs/bidders/nativo.md
+++ b/dev-docs/bidders/nativo.md
@@ -18,5 +18,5 @@ The Nativo Bidder adapter requires setup before beginning. Please contact us at
 {: .table .table-bordered .table-striped }
 | Name          | Scope    | Description                                                                     | Example      | Type      |
 |---------------|----------|---------------------------------------------------------------------------------|--------------|-----------|
-| `placementId` | required | Publication placement ID value from the Nativo Platform                         |  `13144370`  | `integer` |
+| `placementId` | optional | Publication placement ID value from the Nativo Platform                         |  `13144370`  | `integer` |
 | `url`         | optional | Publication url value associated with placement ID value in the Nativo Platform |  `https://test-sites.internal.nativo.net/testing/prebid_adpater.html`  | `string` |
diff --git a/dev-docs/bidders/nextMillennium.md b/dev-docs/bidders/nextMillennium.md
index 926bcd6eeb..6b863fd025 100644
--- a/dev-docs/bidders/nextMillennium.md
+++ b/dev-docs/bidders/nextMillennium.md
@@ -1,11 +1,21 @@
 ---
 layout: bidder
 title: NextMillennium
-description: NextMillennium bid adapter
+gdpr_supported: true
+usp_supported: true
+coppa_supported: false
+schain_supported: false
+dchain_supported: false
+safeframes_ok: false
+deals_supported: false
+floors_supported: false
+fpd_supported: false
+pbs_app_supported: false
 pbjs: true
+pbs: true
 biddercode: nextMillennium
 media_types: banner
-pbjs_version_notes: not in 5.x
+description: NextMillennium bid adapter
 ---
 
 ### bid params
@@ -14,3 +24,6 @@ pbjs_version_notes: not in 5.x
 | Name           | Scope    | Description                              | Example   | Type    |
 |----------------+----------+------------------------------------------+-----------|---------|
 | `placement_id` | required | Placement ID, provided by nextMillennium | `'12345'` | String  |
+
+As input parameters, it accepts only `placement_id`, which is issued when registering in NextMillennium.
+Further information for the auction on NextMillennium side is generated automatically.
diff --git a/dev-docs/bidders/nextroll.md b/dev-docs/bidders/nextroll.md
index accca4ab35..c99e92a4b3 100644
--- a/dev-docs/bidders/nextroll.md
+++ b/dev-docs/bidders/nextroll.md
@@ -8,7 +8,6 @@ media_types: display, native
 gdpr_supported: false
 usp_supported: true
 prebid_member: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
@@ -19,7 +18,7 @@ pbjs_version_notes: not in 5.x
 | `sellerId`     | required | The seller ID from NextRoll.Please reach out your NextRoll representative for more details.       | `'541459'`                  | `string` |
 | `publisherId`  | optional | The publisher ID from NextRoll.Please reach out your NextRoll representative for more details.    | `'956812'`                  | `string` |
 | `zoneId`       | optional | Descriptive or unique identifier for the ad position                                              | `'main-banner-505/600x160'` | `string` |
-| `bidfloor`     | optional | Per ad-unit bid floor                                                                             | `2.3`                       | `number` |
+| `bidfloor`     | optional | Per ad-unit bid floor, used if the floor module is not available                                  | `2.3`                       | `number` |
 
 #### Example of Banner Ad-unit
 ```
@@ -29,6 +28,17 @@ var adUnits = [
         mediaTypes: {
             banner: {sizes: [[300, 250], [160, 600]]}
         },
+        // If floors module is enabled
+        floors: {
+            currency: "USD",
+            schema: {
+                delimiter: "|",
+                fields: ["mediaType", "size"]
+            },
+            values: {
+                "*|*": 2.0
+            }
+        },
         bids: [{
             bidder: 'nextroll',
             params: {
diff --git a/dev-docs/bidders/nobid.md b/dev-docs/bidders/nobid.md
index 7f8cfd41dd..02d54e53c0 100644
--- a/dev-docs/bidders/nobid.md
+++ b/dev-docs/bidders/nobid.md
@@ -13,6 +13,7 @@ schain_supported: true
 coppa_supported: true
 userId: criteo, unifiedId, id5Id
 safeframes_ok: true
+fpd_supported: true
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/ogury.md b/dev-docs/bidders/ogury.md
index 213001ce90..a1ae8c5f42 100644
--- a/dev-docs/bidders/ogury.md
+++ b/dev-docs/bidders/ogury.md
@@ -8,10 +8,11 @@ gvl_id: 31
 usp_supported: false
 coppa_supported: false
 schain_supported: false
+floors_supported: true
 dchain_supported: false
 media_types: banner
 safeframes_ok: false
-bidder_supports_deals: false
+deals_supported: false
 pbjs: true
 pbs: false
 prebid_member: false
diff --git a/dev-docs/bidders/oneVideo.md b/dev-docs/bidders/oneVideo.md
index d77c059d67..4b50d23c55 100644
--- a/dev-docs/bidders/oneVideo.md
+++ b/dev-docs/bidders/oneVideo.md
@@ -9,6 +9,20 @@ gdpr_supported: true
 usp_supported: true
 ---
 
+### IMPORTANT NOTICE!
+**TL;DR**
+1. The `oneVideo` adapter is scheduled to be depreciated.
+2. Our New `yahoossp` is available for early adoption.
+3. Please contact your Account Manager/Executive for migration details.
+
+Dear Publishers & Partners,
+As part of our platform consolidation process to simplify your integrations moving forward
+We invite you to switch from the `oneVideo` Adapter to our NEW `yahoossp` bid adapter for both Display & Video inventory.
+FYI - The oneVideo adapter is scheduled for depreciation in the upcoming months.
+
+Thanks in advance,
+Yahoo SSP
+
 ### Note:
 
 One Video adapter only supports video ads.
diff --git a/dev-docs/bidders/onedisplay.md b/dev-docs/bidders/onedisplay.md
index d7d4002b83..e0749df141 100644
--- a/dev-docs/bidders/onedisplay.md
+++ b/dev-docs/bidders/onedisplay.md
@@ -6,7 +6,19 @@ pbjs: true
 biddercode: onedisplay
 aliasCode : aol
 ---
+### IMPORTANT NOTICE!
+**TL;DR**
+1. The `onedisplay` adapter is scheduled to be depreciated.
+2. Our New `yahoossp` is available for early adoption.
+3. Please contact your Account Manager/Executive for migration details.
 
+Dear Publishers & Partners,
+As part of our platform consolidation process to simplify your integrations moving forward
+We invite you to switch from the `onedisplay` Adapter to our NEW `yahoossp` bid adapter for both Display & Video inventory.
+FYI - The oneVideo adapter is scheduled for depreciation in the upcoming months.
+
+Thanks in advance,
+Yahoo SSP
 
 
 ### Bid Params
diff --git a/dev-docs/bidders/onemobile.md b/dev-docs/bidders/onemobile.md
index c830acf841..aabc65de76 100644
--- a/dev-docs/bidders/onemobile.md
+++ b/dev-docs/bidders/onemobile.md
@@ -7,7 +7,19 @@ biddercode: onemobile
 aliasCode : aol
 ---
 
+### IMPORTANT NOTICE!
+**TL;DR**
+1. The `onemobile` adapter is scheduled to be depreciated.
+2. Our New `yahoossp` is available for early adoption.
+3. Please contact your Account Manager/Executive for migration details.
 
+Dear Publishers & Partners,
+As part of our platform consolidation process to simplify your integrations moving forward
+We invite you to switch from the `onemobile` Adapter to our NEW `yahoossp` bid adapter for both Display & Video inventory.
+FYI - The oneVideo adapter is scheduled for depreciation in the upcoming months.
+
+Thanks in advance,
+Yahoo SSP
 
 ### Bid Params
 
diff --git a/dev-docs/bidders/openweb.md b/dev-docs/bidders/openweb.md
new file mode 100644
index 0000000000..162df57a03
--- /dev/null
+++ b/dev-docs/bidders/openweb.md
@@ -0,0 +1,64 @@
+---
+layout: bidder
+title: OpenWeb
+description: Prebid OpenWeb Bidder Adapter
+biddercode: openweb
+media_types: banner
+gdpr_supported: true
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+safeframes_ok: true
+prebid_member: true
+pbjs: true
+pbs: true
+gvl_id: 280
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name  | Scope    | Description                     | Example  | Type      |
+|-------|----------|---------------------------------|----------|-----------|
+| `aid` | required | The source ID from OpenWeb. | `650342` | `integer` |
+
+### Description
+OpenWeb.com official prebid adapter. Available in both client and server side versions.
+OpenWeb header bidding adapter provides solution for accessing banner demand.
+
+### Test Parameters
+```
+var adUnits = [
+    // Banner adUnit
+    {
+        mediaTypes: {
+          banner: {
+            sizes: [[300, 250]]
+          }
+        },
+        code: 'div-test-div',
+        bids: [{
+         bidder: 'openweb',
+         params: {
+           aid: 650342
+         }
+        }]
+    },
+    // Prebid server 
+    {
+        mediaTypes: {
+          banner: {
+            sizes: [[300, 250]]
+          }
+        },
+        code: 'div-test-div',
+        bids: [{
+         bidder: 'openweb',
+         params: {
+           aid: 650346
+         }
+        }]
+    }
+];
+```
diff --git a/dev-docs/bidders/openwebvideo.md b/dev-docs/bidders/openwebvideo.md
new file mode 100644
index 0000000000..bc6a663c50
--- /dev/null
+++ b/dev-docs/bidders/openwebvideo.md
@@ -0,0 +1,45 @@
+---
+layout: bidder
+title: OpenWeb Video
+description: Prebid OpenWeb Video Bidder Adapter
+pbjs: true
+biddercode: openwebvideo
+aliasCode: aniview
+media_types: banner, video
+gdpr_supported: true
+usp_supported: true
+schain_supported: true
+safeframes_ok: true
+---
+
+### Note:
+For more information about [OpenWeb](https://www.openweb.com/).
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name             | Scope    | Description      | Example                      | Type     |
+|------------------|----------|------------------|------------------------------|----------|
+| `AV_PUBLISHERID` | required | Publisher/Netid  | `'55b88d4a181f465b3e8b4567'` | `string` |
+| `AV_CHANNELID`   | required | Channel id       | `'5a5f17a728a06102d14c2718'` | `string` |
+
+### Test Parameters
+```
+videoAdUnit = [
+{
+  code: 'video1',
+  mediaTypes: {
+    video: {
+      playerSize: [[640, 480]],
+      context: 'outstream'
+    },
+  },
+  bids: [{
+    bidder: 'openwebvideo',
+    params: {
+      AV_PUBLISHERID: '55b78633181f4603178b4568',
+      AV_CHANNELID: '5d19dfca4b6236688c0a2fc4'
+    }
+  }]
+}];
+```
diff --git a/dev-docs/bidders/openx.md b/dev-docs/bidders/openx.md
index e3c6a103b9..3adddca5d9 100644
--- a/dev-docs/bidders/openx.md
+++ b/dev-docs/bidders/openx.md
@@ -10,9 +10,10 @@ schain_supported: true
 gdpr_supported: true
 usp_supported: true
 coppa_supported: true
-getFloor: true
-userIds: britepoolId, criteo, fabrickId, haloId, id5Id, identityLink, idxId, intentIqId, liveIntentId, lotamePanoramaId, merkleId, netId, parrableId, pubCommonId, quantcastId, sharedId, tapadId, unifiedId, verizonMediaId, zeotapIdPlus
+floors_supported: true
+userIds: admixerId, amxId, britepoolId, criteo, dapId, deepintentId, dmdId, fabrickId, flocId, haloId, id5Id, identityLink, idxId, intentIqId, liveIntentId, lotamePanoramaId, merkleId, mwOpenLinkId, netId, nextrollId, novatiq, parrableId, pubCommonId, quantcastId, sharedId, tapadId, uid2, unifiedId, verizonMediaId, zeotapIdPlus
 prebid_member: true
+fpd_supported: true
 gvl_id: 69
 ---
 
diff --git a/dev-docs/bidders/operaads.md b/dev-docs/bidders/operaads.md
new file mode 100644
index 0000000000..49393966e3
--- /dev/null
+++ b/dev-docs/bidders/operaads.md
@@ -0,0 +1,31 @@
+---
+layout: bidder
+title: OperaAds
+description: Prebid OperaAds Bidder Adapter
+biddercode: operaads
+gdpr_supported: false
+gvl_id: none
+usp_supported: false
+coppa_supported: true
+schain_supported: true
+dchain_supported: false
+media_types: banner, video, native
+safeframes_ok: false
+deals_supported: false
+pbjs: true
+pbs: true
+prebid_member: false
+---
+
+### Registration
+
+If you have any questions regarding set up, please reach out to your account manager or adtech-prebid-group@opera.com.
+
+### Bid Parameters
+
+{: .table .table-bordered .table-striped }
+| Name        | Scope    | Description            | Example          | Type     |
+|-------------|----------|------------------------|------------------|----------|
+| `placementId`| required | Placement Id          | `s12345678`      | `string` |
+| `endpointId`| required | Endpoint ID            | `ep1234566`      | `string` |
+| `publisherId`| required | Publisher ID          | `pub123456`      | `string` |
diff --git a/dev-docs/bidders/optout.md b/dev-docs/bidders/optout.md
index dc558f411a..a4a0ebb62c 100644
--- a/dev-docs/bidders/optout.md
+++ b/dev-docs/bidders/optout.md
@@ -6,6 +6,7 @@ pbjs: true
 pbs: true
 biddercode: optout
 gdpr_supported: true
+fpd_supported: true
 gvl_id: 227
 ---
 
diff --git a/dev-docs/bidders/otm.md b/dev-docs/bidders/otm.md
index eb664b5f80..e900908c94 100644
--- a/dev-docs/bidders/otm.md
+++ b/dev-docs/bidders/otm.md
@@ -4,7 +4,8 @@ title: OTM
 description: OTM Bidder Adapter
 pbjs: true
 biddercode: otm
-pbjs_version_notes: not in 5.x
+floors_supported: true
+media_types: banner
 ---
 
 ### Bid Params
@@ -14,3 +15,4 @@ pbjs_version_notes: not in 5.x
 |---------------|----------|----------------------------------------|-------------|----------|
 | `tid`         | required | A tag id                               | `'99'`      | `string` |
 | `bidfloor`    | optional | Floor price                            | `20`        | `integer`|
+| `domain`      | optional | Custom domain                          | `domain.tld`| `string` |
diff --git a/dev-docs/bidders/outbrain.md b/dev-docs/bidders/outbrain.md
index 573cf5b87f..a20717d68d 100644
--- a/dev-docs/bidders/outbrain.md
+++ b/dev-docs/bidders/outbrain.md
@@ -13,6 +13,7 @@ pbjs: true
 pbs: true
 pbs_app_supported: true
 prebid_member: true
+userIds: identityLink
 pbjs_version_notes: v4.35 and later
 ---
 
@@ -60,7 +61,7 @@ adapters:
 | `publisher.domain` | optional | The publisher domain                                           | `'publisher.com'`  | `string`       |
 | `tagid`            | optional | Identifier for specific ad placement or ad tag                 | `'tag-id'`         | `string`       |
 | `bcat`             | optional | Blocked advertiser categories using the IAB content categories | `['IAB1-1']`       | `string array` |
-| `badv`             | optional | Block list of advertisers by their domains                     | `['example.com]'`  | `string array` |
+| `badv`             | optional | Block list of advertisers by their domains                     | `['example.com']`  | `string array` |
 
 #### Native example
 
diff --git a/dev-docs/bidders/outbrain_old.md b/dev-docs/bidders/outbrain_old.md
index 5bf0794eb3..e0529b8eee 100644
--- a/dev-docs/bidders/outbrain_old.md
+++ b/dev-docs/bidders/outbrain_old.md
@@ -61,7 +61,7 @@ adapters:
 | `publisher.domain` | optional | The publisher domain                                           | `'publisher.com'`  | `string`       |
 | `tagid`            | optional | Identifier for specific ad placement or ad tag                 | `'tag-id'`         | `string`       |
 | `bcat`             | optional | Blocked advertiser categories using the IAB content categories | `['IAB1-1']`       | `string array` |
-| `badv`             | optional | Block list of advertisers by their domains                     | `['example.com]'`  | `string array` |
+| `badv`             | optional | Block list of advertisers by their domains                     | `['example.com']`  | `string array` |
 
 #### Native example
 
diff --git a/dev-docs/bidders/ozone.md b/dev-docs/bidders/ozone.md
index 8b59183e35..d576a29689 100644
--- a/dev-docs/bidders/ozone.md
+++ b/dev-docs/bidders/ozone.md
@@ -8,7 +8,8 @@ media_types: banner
 gdpr_supported: true
 userIds: criteo, id5Id, tdid, identityLink, liveIntentId, parrableId, pubCommonId, lotamePanoramaId, sharedId, fabrickId
 gvl_id: 524
-bidder_supports_deals: true
+deals_supported: true
+fpd_supported: true
 
 ---
 
diff --git a/dev-docs/bidders/pangle.md b/dev-docs/bidders/pangle.md
index b7168ad589..6d4da22aea 100644
--- a/dev-docs/bidders/pangle.md
+++ b/dev-docs/bidders/pangle.md
@@ -8,7 +8,7 @@ coppa_supported: true
 schain_supported: false
 media_types: banner, video, native
 safeframes_ok: false
-bidder_supports_deals: false
+deals_supported: false
 pbjs: false
 pbs: true
 pbs_app_supported: true
diff --git a/dev-docs/bidders/pixfuture.md b/dev-docs/bidders/pixfuture.md
new file mode 100644
index 0000000000..58159bb843
--- /dev/null
+++ b/dev-docs/bidders/pixfuture.md
@@ -0,0 +1,20 @@
+---
+layout: bidder
+title: PixFuture
+description: Prebid PixFuture Bidder Adapter
+biddercode: pixfuture
+media_types: banner
+gdpr_supported: true
+prebid_member: false
+coppa_supported: true
+usp_supported: true
+fpd_supported: true
+userIds: flocId, criteoId, unifiedId, id5Id, sharedId, identityLink, liveIntentId, fabrickId
+pbs: false
+pbjs: true
+---
+#### Bid Params
+
+| Name                | Scope    | Description                                                                                                                                                                   | Example                                               | Type             |
+|---------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|------------------|
+| `pix_id`       | required | The pix_id is an ID from PixFuture.  The `pix_id` parameter should be a `string`                                                  | `"Abc123"`                                            | `string`         |
diff --git a/dev-docs/bidders/playwire.md b/dev-docs/bidders/playwire.md
new file mode 100644
index 0000000000..69270e0e21
--- /dev/null
+++ b/dev-docs/bidders/playwire.md
@@ -0,0 +1,27 @@
+---
+layout: bidder
+title: Playwire
+description: Prebid Playwire Bidder Adapter
+pbjs: true
+biddercode: playwire
+aliasCode: grid
+media_types: banner, video
+gdpr_supported: true
+usp_supported: true
+schain_supported: true
+floors_supported: true
+userIds: all
+tcf2_supported: true
+coppa_supported: true
+fpd_supported: true
+---
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                                                                                 | Example                                   | Type      |
+|----------------|----------|-------------------------------------------------------------------------------------------------------------|-------------------------------------------|-----------|
+| `uid`          | required | Represents the Playwire bidder system Ad Slot ID associated with the respective div id from the site page.  | `1`                                       | `integer` |
+| `keywords`     | optional | A set of key-value pairs applied to all ad slots on the page. Values can be empty.                          | `keywords: { topic: ['stress', 'fear'] }` | `object`  |
+| `bidFloor`     | optional | Floor of the impression opportunity. If present in the request overrides XML info.                          | `0.8`                                     | `float`   |
diff --git a/dev-docs/bidders/projectLimelight.md b/dev-docs/bidders/projectLimelight.md
new file mode 100644
index 0000000000..39a7a867e2
--- /dev/null
+++ b/dev-docs/bidders/projectLimelight.md
@@ -0,0 +1,19 @@
+---
+layout: bidder
+title: Project Limelight
+description: Prebid Project Limelight Bidder Adaptor
+pbjs: true
+biddercode: project-limelight
+aliasCode: projectLimeLight
+media_types: video
+pbjs_version_notes: not in 5.x
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope      | Description                                                    | Example            |type|
+| :-----------   | :--------- | :------------                                                  | :----------------- |:---|
+| `host` | required | Ad network's RTB host | `'exchange.ortb.net'` | `string` |
+| `adUnitId` | required   | Ad Unit Id will be generated on Limelight Digital Platform. | 0                        |integer|
+| `adUnitType`      | required   | Type of Ad Unit (`'video'`, `'banner'`)                                             | `'banner'`                 |string|
diff --git a/dev-docs/bidders/proxistore.md b/dev-docs/bidders/proxistore.md
index 6e884a2cd8..1b111d30da 100644
--- a/dev-docs/bidders/proxistore.md
+++ b/dev-docs/bidders/proxistore.md
@@ -5,7 +5,7 @@ description: Prebid Proxistore Bidder Adapter
 pbjs: true
 biddercode: proxistore
 gdpr_supported: true
-pbjs_version_notes: not in 5.x
+fpd_supported: true
 ---
 
 
diff --git a/dev-docs/bidders/pubgenius.md b/dev-docs/bidders/pubgenius.md
index 23cb4e5fab..3085968a32 100644
--- a/dev-docs/bidders/pubgenius.md
+++ b/dev-docs/bidders/pubgenius.md
@@ -5,7 +5,7 @@ description: Prebid pubGENIUS Bidder Adaptor
 pbjs: true
 biddercode: pubgenius
 media_types: banner
-getFloor: true
+floors_supported: true
 gdpr_supported: true
 usp_supported: true
 schain_supported: true
diff --git a/dev-docs/bidders/pubmatic.md b/dev-docs/bidders/pubmatic.md
index 0265738a9f..f8cbcd0a12 100644
--- a/dev-docs/bidders/pubmatic.md
+++ b/dev-docs/bidders/pubmatic.md
@@ -8,13 +8,14 @@ gdpr_supported: true
 usp_supported: true
 coppa_supported: true
 schain_supported: true
-getFloor: true
+floors_supported: true
 userIds: all
 prebid_member: true
 safeframes_ok: true
 pbjs: true
 pbs: true
 pbs_app_supported: true
+fpd_supported: true
 gvl_id: 76
 ---
 
diff --git a/dev-docs/bidders/pubx.md b/dev-docs/bidders/pubx.md
index 3fc59db779..e734c91ed6 100644
--- a/dev-docs/bidders/pubx.md
+++ b/dev-docs/bidders/pubx.md
@@ -9,7 +9,6 @@ coppa_supported: false
 usp_supported: false
 schain_supported: true
 pbjs: true
-pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/pulsepoint.md b/dev-docs/bidders/pulsepoint.md
index c394d717f7..0c575f9994 100644
--- a/dev-docs/bidders/pulsepoint.md
+++ b/dev-docs/bidders/pulsepoint.md
@@ -7,7 +7,7 @@ gdpr_supported: true
 usp_supported: true
 schain_supported: true
 media_types: banner, video, native
-userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, parrableId, pubCommonId, unifiedId
+userIds: britepoolId, criteo, fabrickId, haloId, id5Id, identityLink, liveIntentId, lotamePanoramaId, merkleId, parrableId, pubCommonId, sharedId, unifiedId, verizonMediaId
 pbjs: true
 pbs: true
 gvl_id: 81
diff --git a/dev-docs/bidders/pwbid.md b/dev-docs/bidders/pwbid.md
index 48c08c33b4..26715707a2 100644
--- a/dev-docs/bidders/pwbid.md
+++ b/dev-docs/bidders/pwbid.md
@@ -12,7 +12,7 @@ schain_supported: true
 prebid_member: true
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, pubProvidedId, sharedId, unifiedId
 tcf1_supported: true
-getFloor: false
+floors_supported: false
 gvl_id: 842
 ---
 
diff --git a/dev-docs/bidders/quantumdex.md b/dev-docs/bidders/quantumdex.md
index 1119a035c4..bc03315282 100644
--- a/dev-docs/bidders/quantumdex.md
+++ b/dev-docs/bidders/quantumdex.md
@@ -10,8 +10,8 @@ gdpr_supported: true
 schain_supported: true
 usp_supported: true
 userIds: all
-getFloor: true
+floors_supported: true
 ---
 
 # Description
-Quantumdex is an aliased bidder of Apacdex bid adapter. Please refer to [Apacdex documentation](https://docs.prebid.org/dev-docs/bidders/apacdex) for bid parameters and implementation guide.
\ No newline at end of file
+Quantumdex is an aliased bidder of Apacdex bid adapter. Please refer to [Apacdex documentation](https://docs.prebid.org/dev-docs/bidders/apacdex) for bid parameters and implementation guide.
diff --git a/dev-docs/bidders/relaido.md b/dev-docs/bidders/relaido.md
index 451554d9d4..08ef84f34f 100644
--- a/dev-docs/bidders/relaido.md
+++ b/dev-docs/bidders/relaido.md
@@ -3,6 +3,7 @@ layout: bidder
 title: Relaido
 description: Prebid Relaido Bidder Adapter
 biddercode: relaido
+userIds: imuid
 pbjs: true
 media_types: banner, video
 ---
diff --git a/dev-docs/bidders/revcontent.md b/dev-docs/bidders/revcontent.md
index 81a4e331ea..3ba3d9869d 100644
--- a/dev-docs/bidders/revcontent.md
+++ b/dev-docs/bidders/revcontent.md
@@ -10,7 +10,6 @@ usp_supported: false
 pbjs: true
 pbs: true
 gvl_id: 203
-pbjs_version_notes: not in 5.x
 ---
 
 ### Note
diff --git a/dev-docs/bidders/richaudience.md b/dev-docs/bidders/richaudience.md
index 727a910907..9a75adbc75 100644
--- a/dev-docs/bidders/richaudience.md
+++ b/dev-docs/bidders/richaudience.md
@@ -6,8 +6,11 @@ biddercode: richaudience
 userIds: criteo, id5Id, identityLink, liveIntentId, pubCommonId, unifiedId
 media_types: banner, video
 gdpr_supported: true
-pbjs: true
 gvl_id: 108
+safeframes_ok: false
+prebid_member: true
+pbjs: true
+pbs: true
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/rise.md b/dev-docs/bidders/rise.md
index 42c67e4c5a..01585fbb75 100644
--- a/dev-docs/bidders/rise.md
+++ b/dev-docs/bidders/rise.md
@@ -1,14 +1,17 @@
 ---
 layout: bidder
 title: Rise
-description: Prebid  Bidder Adaptor
+description: Prebid Bidder Adaptor
 pbjs: true
 biddercode: rise
-media_types: no-display, video
+media_types: video
 schain_supported: true
 gdpr_supported: true
 usp_supported: true
-pbjs_version_notes: not in 5.x
+floors_supported: true
+userIds: all
+fpd_supported: true
+gvl_id: 1043
 ---
 
 ### Note
@@ -24,7 +27,7 @@ The Rise adapter requires setup and approval. Please reach out to prebid-rise-en
 | ---- | ----- | ---- | ----------- | -------
 | `org` | required | String |  Rise publisher Id provided by your Rise representative  | "56f91cd4d3e3660002000033"
 | `floorPrice` | optional | Number |  Minimum price in USD. <br/><br/> **WARNING:**<br/> Misuse of this parameter can impact revenue | 2.00
-| `ifa` | optional | String |  The ID for advertisers (also referred to as "IDFA")  | "XXX-XXX"
+| `placementId` | optional | String |  A unique placement identifier  | "12345678"
 | `testMode` | optional | Boolean |  This activates the test mode  | false
 
 ## Example
@@ -44,7 +47,7 @@ var adUnits = [
           params: {
             org: '56f91cd4d3e3660002000033', // Required
             floorPrice: 5.00, // Optional
-            ifa: 'XXX-XXX', // Optional
+            placementId: '12345678', // Optional
             testMode: false // Optional
           }
         }]
@@ -55,15 +58,5 @@ var adUnits = [
 ### Configuration
 Rise recommends setting UserSync by iframe for monetization.
 
-For Prebid.js v1.15.0 and later:
-
-pbjs.setConfig({
-  userSync: {
-    filterSettings: {
-      iframe: {
-        bidders: '*',      // '*' represents all bidders
-        filter: 'include'
-      }
-    }
-  }
-});
+### Versions
+Prebid versions 5.0-5.3 are not supported
diff --git a/dev-docs/bidders/roundel.md b/dev-docs/bidders/roundel.md
index 61fa4d03b5..fed8e9a1f5 100644
--- a/dev-docs/bidders/roundel.md
+++ b/dev-docs/bidders/roundel.md
@@ -22,4 +22,4 @@ Roundel is an aliased bidder for Index Exchange and must be configured alongside
 
 ## Bid Params
 Bidder params for roundel follow the same structure as the Index Exchange bidder. Please reference configuration examples [here](/dev-docs/bidders/ix).
- 
\ No newline at end of file
+ 
diff --git a/dev-docs/bidders/converge_digital.md b/dev-docs/bidders/rtbanalytica.md
similarity index 60%
rename from dev-docs/bidders/converge_digital.md
rename to dev-docs/bidders/rtbanalytica.md
index fa17272a25..3718ed244b 100644
--- a/dev-docs/bidders/converge_digital.md
+++ b/dev-docs/bidders/rtbanalytica.md
@@ -1,28 +1,27 @@
 ---
 layout: bidder
-title: Converge-Digital
-description: Converge-Digital Bidder Adaptor
+title: RtbAnalytica
+description: RtbAnalytica Bidder Adaptor
 pbjs: true
 pbs: true
-biddercode: converge_digital
+biddercode: rtbanalytica
 aliasCode : adkernel
 media_types: banner, native, video
 gdpr_supported: true
 usp_supported: true
 coppa_supported: true
 pbs_app_supported: true
-gvl_id: 248
 schain_supported: true
 ---
 
 ### Note:
 
-The Converge-Digital Bidding adapter requires setup and approval before implementation. Please reach out to <info@converge-digital.com> for more details.
+The RtbAnalytica bidding adapter requires setup and approval before implementation. Please reach out to <vivek@rtbanalytica.com> for more details.
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
 | Name     | Scope    | Description           | Example                   | Type     |
 |----------|----------|-----------------------|---------------------------|----------|
-| `host`   | required | ConvergeDigital RTB host | `'cpm.convergeselect.net'` | `string` |
+| `host`   | required | RtbAnalytica RTB host | `'cpm.rtbanalytica.com'` | `string` |
 | `zoneId` | required | Zone Id           | `30164`                 | `integer` |
diff --git a/dev-docs/bidders/rtbsape.md b/dev-docs/bidders/rtbsape.md
index 5a2966a6d1..de4dcbe73a 100644
--- a/dev-docs/bidders/rtbsape.md
+++ b/dev-docs/bidders/rtbsape.md
@@ -5,7 +5,6 @@ description: Prebid RtbSape Bidder Adaptor
 pbjs: true
 biddercode: rtbsape
 media_types: banner, video
-pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/rubicon.md b/dev-docs/bidders/rubicon.md
index 706627241f..aa23cbfb44 100644
--- a/dev-docs/bidders/rubicon.md
+++ b/dev-docs/bidders/rubicon.md
@@ -7,15 +7,16 @@ gdpr_supported: true
 usp_supported: true
 coppa_supported: true
 schain_supported: true
-getFloor: true
+floors_supported: true
 media_types: video
 userIds: all
 prebid_member: true
 safeframes_ok: true
-bidder_supports_deals: true
+deals_supported: true
 pbjs: true
 pbs: true
 pbs_app_supported: true
+fpd_supported: true
 gvl_id: 52
 ---
 
@@ -128,6 +129,7 @@ The following video parameters are supported here so publishers may fully declar
 | mimes | required | List of content MIME types supported by the player (see openRTB v2.5 for options) | ["video/mp4"]| array<string>|
 | protocols | required | Supported video bid response protocol values <br />1: VAST 1.0 <br />2: VAST 2.0 <br />3: VAST 3.0 <br />4: VAST 1.0 Wrapper <br />5: VAST 2.0 Wrapper <br />6: VAST 3.0 Wrapper <br />7: VAST 4.0 <br />8: VAST 4.0 Wrapper | [2,3,5,6] | array<integers>|
 | api | required | Supported API framework values: <br />1: VPAID 1.0 <br />2: VPAID 2.0 <br />3: MRAID-1 <br />4: ORMMA <br />5: MRAID-2 | [2] |  array<integers> |
+| linearity | required | OpenRTB2 linearity. 1: linear (in-stream ad), 2: non-linear (overlay ad) | 1 | integer |
 | maxduration | recommended | Maximum video ad duration in seconds. | 30 | integer |
 | minduration | recommended | Minimum video ad duration in seconds | 6 | integer |
 | playbackmethod | recommended | Playback methods that may be in use. Only one method is typically used in practice. (see openRTB v2.5 section 5.10 for options)| [2]| array<integers> |
diff --git a/dev-docs/bidders/sa_lunamedia.md b/dev-docs/bidders/sa_lunamedia.md
new file mode 100644
index 0000000000..82c699af92
--- /dev/null
+++ b/dev-docs/bidders/sa_lunamedia.md
@@ -0,0 +1,22 @@
+---
+layout: bidder
+title: SA Lunamedia
+description: SA Lunamedia Bidder Adapter
+biddercode: sa_lunamedia
+usp_supported: true
+schain_supported: true
+media_types: banner, video, native
+gdpr_supported: true
+pbjs: false
+pbs: true
+pbs_app_supported: true
+gvl_id: 998
+pbjs_version_notes: not in 5.x
+---
+
+### Prebid Server Bid Params
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                              | Example    | Type      |
+|----------------|----------|----------------------------------------------------------|------------|-----------|
+| `key` | required | Placement integration key | `'1234'`        | `string` |
+| `type` | optional | Supported values are `publisher` and `network`.  | `'publisher'`        | `string` |
diff --git a/dev-docs/bidders/seedingAlliance.md b/dev-docs/bidders/seedingAlliance.md
index bba20fe71b..0683e3a3d8 100644
--- a/dev-docs/bidders/seedingAlliance.md
+++ b/dev-docs/bidders/seedingAlliance.md
@@ -6,7 +6,6 @@ pbjs: true
 biddercode: seedingAlliance
 media_types: native
 gdpr_supported: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid params
diff --git a/dev-docs/bidders/selectmediavideo.md b/dev-docs/bidders/selectmediavideo.md
index 5018b660b5..b83990023e 100644
--- a/dev-docs/bidders/selectmediavideo.md
+++ b/dev-docs/bidders/selectmediavideo.md
@@ -1,17 +1,19 @@
 ---
 layout: bidder
 title: SelectMedia Video
-description: SelectMedia Video Bidder Adapter
+description: Prebid SelectMedia Video Bidder Adapter
 pbjs: true
 biddercode: selectmediavideo
 aliasCode: aniview
-media_types: video
+media_types: banner, video
 gdpr_supported: true
 usp_supported: true
+schain_supported: true
+safeframes_ok: true
 ---
 
 ### Note:
-For more information about [SelectMedia](http://www.selectmedia.asia/).
+For more information about [SelectMedia](https://www.selectmedia.asia/), please contact info@selectmedia.asia.
 
 ### Bid Params
 
diff --git a/dev-docs/bidders/sharethrough.md b/dev-docs/bidders/sharethrough.md
index f3f12448a7..9054f5e354 100644
--- a/dev-docs/bidders/sharethrough.md
+++ b/dev-docs/bidders/sharethrough.md
@@ -9,6 +9,7 @@ media_types: native
 schain_supported: true
 userIds: pubCommonId, unifiedId, identityLink, id5Id, sharedId, liveIntentId
 usp_supported: true
+fpd_supported: true
 pbjs: true
 pbs: true
 ---
diff --git a/dev-docs/bidders/slimcut.md b/dev-docs/bidders/slimcut.md
index c308a7322a..598794aeac 100644
--- a/dev-docs/bidders/slimcut.md
+++ b/dev-docs/bidders/slimcut.md
@@ -1,12 +1,11 @@
 ---
 layout: bidder
 title: Slimcut
-description: SlimCut Bidder Adaptor
+description: SlimCut Bidder Adapter
 pbjs: true
 biddercode: slimcut
 media_types: video, banner
 gdpr_supported: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Overview
diff --git a/dev-docs/bidders/smaato.md b/dev-docs/bidders/smaato.md
index 9db736519e..e8eab58473 100644
--- a/dev-docs/bidders/smaato.md
+++ b/dev-docs/bidders/smaato.md
@@ -4,26 +4,41 @@ title: Smaato
 description: Prebid Smaato Bidder Adaptor
 biddercode: smaato
 gdpr_supported: true
+gvl_id: 82
 usp_supported: true
 coppa_supported: true
 media_types: banner, video
-userIds: criteo, pubCommonId, unifiedId
+userId: criteo, pubCommonId, unifiedId
 pbjs: true
 pbs: true
 pbs_app_supported: true
 prebid_member: true
+floors_supported: true
+fpd_supported: true
 ---
 
 ### Table of Contents
 
+- [Registration](#smaato-registration)
+- [Note](#smaato-note)
 - [Bid Params](#smaato-bid-params)
 - [App Object](#smaato-app-object)
+- [Example Ad Units](#smaato-example-ad-units)
 - [First Party Data](#smaato-first-party)
+- [Test Parameters](#smaato-test-parameters)
+
+<a name="smaato-registration" />
 
 ### Registration
 
 The Smaato adapter requires setup and approval from the Smaato team, even for existing Smaato publishers. Please reach out to your account team or prebid@smaato.com for more information.
 
+<a name="smaato-note" />
+
+### Note
+
+The Smaato adapter will convert bidfloors to 'USD' currency as needed.
+
 <a name="smaato-bid-params" />
 
 ### Bid Params
@@ -32,7 +47,8 @@ The Smaato adapter requires setup and approval from the Smaato team, even for ex
 | Name       | Scope    | Description          | Example    | Type     |
 |------------|----------|----------------------|------------|----------|
 | `publisherId` | required | Your Smaato publisher id  | `'1100012345'` | `string` |
-| `adspaceId` | required | Your Smaato adspace id | `'11002234'`   | `string` |
+| `adspaceId` | required | Your Smaato adspace id. Required for non adpod requests | `'11002234'`   | `string` |
+| `adbreakId` | required | Your Smaato adbreak id. Required for adpod (long-form video) requests | `'41002234'`   | `string` |
 | `app` | optional | Object containing mobile app parameters.  See the [App Object](#smaato-app-object) for details.| `app : { ifa: '56700000-9cf0-22bd-b23e-46b96e40003a'}` | `object` |
 
 <a name="smaato-app-object" />
@@ -47,12 +63,15 @@ Smaato supports using prebid within a mobile app's webview.
 | `ifa`             | String that contains the advertising identifier of the user (e.g. idfa or aaid).                                                | `'56700000-9cf0-22bd-b23e-46b96e40003a'`                                 | `string`         |
 | `geo`             | Object that contains the latitude (`lat`) and longitude (`lon`) of the user.                                                    | `{ lat: 33.3, lon: -88.8 }`                                              | `object`         |
 
+<a name="smaato-example-ad-units" />
 
-### Example Banner Ad Unit
+### Example Ad Units
+
+#### Example Banner Ad Unit
 
 ```javascript
 var adUnit = {
-    "code": "header-bid-tag-1",
+    "code": "banner unit",
     "mediaTypes": {
         "banner": {
             "sizes": [320, 50]
@@ -68,7 +87,7 @@ var adUnit = {
 }
 ```
 
-### Example Video Ad Unit
+#### Example Video Ad Unit
 
 ```javascript
 var adUnit = {
@@ -98,6 +117,37 @@ var adUnit = {
     }]
 };
 ```
+#### Example AdPod (long-form) Video Ad Unit
+
+```javascript
+var adUnit = {
+    "code": "adpod unit",
+    "mediaTypes": {
+        "video": {
+            "context": "adpod",
+            "playerSize": [640, 480],
+            "adPodDurationSec": 300,
+            "durationRangeSec": [15, 30],
+            "requireExactDuration": false,
+            "mimes": ["video/mp4"],
+            "startdelay": 0,
+            "linearity": 1,
+            "protocols": [7],
+            "skip": 1,
+            "skipmin": 5,
+            "api": [7],
+        }
+    },
+    "bids": [{
+        "bidder": "smaato",
+        "params": {
+            "publisherId": "1100042525",
+            "adbreakId": "400000000"
+        }
+    }]
+};
+```
+
 <a name="smaato-first-party" />
 
 ### First Party Data
@@ -115,9 +165,12 @@ pbjs.setConfig({
             gender: "M",
             yob: 1984
         }
+    }
 });
 ```
 
+<a name="smaato-test-parameters" />
+
 ### Test Parameters
 
 Following example includes sample `imp` object with publisherId and adSlot which can be used to test Smaato Adapter
diff --git a/dev-docs/bidders/smartadserver.md b/dev-docs/bidders/smartadserver.md
index 0c5d7a3b13..12db35618c 100644
--- a/dev-docs/bidders/smartadserver.md
+++ b/dev-docs/bidders/smartadserver.md
@@ -10,6 +10,7 @@ usp_supported: true
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
 pbjs: true
 pbs: true
+floors_supported: true
 ---
 
 ### Registration
diff --git a/dev-docs/bidders/smarthub.md b/dev-docs/bidders/smarthub.md
new file mode 100644
index 0000000000..9bee0fd5ce
--- /dev/null
+++ b/dev-docs/bidders/smarthub.md
@@ -0,0 +1,22 @@
+---
+layout: bidder
+title: SmartHub
+description: SmartHub Bidder Adapter
+biddercode: smarthub
+usp_supported: true
+schain_supported: true
+media_types: banner, video, native
+gdpr_supported: true
+pbjs: false
+pbs: true
+pbs_app_supported: true
+---
+
+### Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name          | Scope    | Description         | Example                              | Type     |
+|---------------|----------|---------------------|--------------------------------------|----------|
+| `partnerName` | required | Unique partner name | `'partnertest'`                      | `string` |
+| `seat`        | required | Seat value          | `'9Q20EdGxzgWdfPYShScl'`             | `string` |
+| `token`       | required | Token               | `'eKmw6alpP3zWQhRCe3flOpz0wpuwRFjW'` | `string` |
diff --git a/dev-docs/bidders/smartico.md b/dev-docs/bidders/smartico.md
index 937f5ecc08..f05859f3b3 100644
--- a/dev-docs/bidders/smartico.md
+++ b/dev-docs/bidders/smartico.md
@@ -5,7 +5,6 @@ description: Prebid Smartico Bidder Adaptor
 pbjs: true
 biddercode: smartico
 media_types: banner
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/smartrtb.md b/dev-docs/bidders/smartrtb.md
index df674f69d8..f81e8172ad 100644
--- a/dev-docs/bidders/smartrtb.md
+++ b/dev-docs/bidders/smartrtb.md
@@ -9,6 +9,7 @@ userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrable
 pbjs: true
 pbs: true
 pbs_app_supported: true
+pbjs_version_notes: not in 5.x
 ---
 
 ### Registration
diff --git a/dev-docs/bidders/smartx.md b/dev-docs/bidders/smartx.md
index afb5d1dbf5..ecfbcf42be 100644
--- a/dev-docs/bidders/smartx.md
+++ b/dev-docs/bidders/smartx.md
@@ -11,6 +11,7 @@ schain_supported: false
 usp_supported: true
 safeframes_ok: false
 pbjs: true
+pbjs_version_notes: avoid 4.31-4.39
 ---
 
 ### Registration
@@ -27,7 +28,6 @@ Please reach out to your smartclip business contact for any questions and assist
 | `bidfloor`           | required | Value of Bidfloor.                                                                                      | `0.3`                   | `float`     |
 | `bidfloorcur`        | required | Used Currency. (e.g. EUR, USD etc.)                                                                     | `'EUR'`                 | `string`    |
 | `context`            | optional | Token that describes which context to play: 'instream' or 'outstream'                                   | `'outstream'`           | `string`    |
-| `outstream_function` | optional | Custom function to be used as a renderer.                                                               | `function(bid){console.log(bid);}` | `function` |
 | `outstream_options`  | required | Object to set options on the smartx renderer. (Only required when setting mediaType.video.context = 'outstream') | `{}`           | `object`    |
 | `secure`             | optional | Boolean identifying whether the requests should be https or not (used to override the protocol if the page isn't secure). | `true`| `boolean`   |
 | `mimes`              | optional | List of MIME types to allow in ad.                                                                      | `['application/javascript', 'video/mp4', 'video/webm']` | `array` |
@@ -47,6 +47,6 @@ Please reach out to your smartclip business contact for any questions and assist
 | `maxAdWidth`    | optional | Maximum size of the player.                                                                  | `900`            | `integer`   |
 | `title`         | optional | Makes a defined advertising text appear in the below right corner. `[remainingTime]` can be used to display the remaining time of the advertisement. | `'Advertisement [remainingTime]s'` | `string`    |
 | `skipOffset`    | optional | Define whenever the advertisement can be skipped. 0 = never                                  | `0`              | `integer`   |
-| `startOpen`     | optional | Define whether the player should be initialized open or open when it is within view.         | `false`          | `bool`      |
-| `endingScreen`  | optional | Define whether the player should stay open after advertising or not.                         | `true`           | `bool`      |
+| `startOpen`     | optional | Define whether the player should be initialized open or open when it is within view.         | `'false'`        | `string`    |
+| `endingScreen`  | optional | Define whether the player should stay open after advertising or not.                         | `'true'`         | `string`    |
 | `desiredBitrate`| optional | Define the desired bitrate of the mediafile.                                                 | `800`            | `integer`   |
diff --git a/dev-docs/bidders/smartyads.md b/dev-docs/bidders/smartyads.md
index 3b0738bee3..671cf75ef0 100644
--- a/dev-docs/bidders/smartyads.md
+++ b/dev-docs/bidders/smartyads.md
@@ -9,7 +9,7 @@ coppa_supported: true
 schain_supported: true
 media_types: banner, video, native
 safeframes_ok: true
-bidder_supports_deals: true
+deals_supported: true
 pbjs: true
 pbs: true
 ---
diff --git a/dev-docs/bidders/sonobi.md b/dev-docs/bidders/sonobi.md
index a484ffb450..73d3b538ff 100644
--- a/dev-docs/bidders/sonobi.md
+++ b/dev-docs/bidders/sonobi.md
@@ -12,6 +12,7 @@ usp_supported: true
 coppa_supported: true
 schain_supported: true
 pbs_app_supported: true
+fpd_supported: true
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/sortable.md b/dev-docs/bidders/sortable.md
index 8a6487498e..2ac98e8707 100644
--- a/dev-docs/bidders/sortable.md
+++ b/dev-docs/bidders/sortable.md
@@ -10,7 +10,8 @@ usp_supported: true
 schain_supported: true
 prebid_member: true
 gvl_id: 145
-pbjs_version_notes: not in 5.x
+floors_supported: true
+userIds: all
 ---
 
 **Table of Contents**
diff --git a/dev-docs/bidders/sovrn.md b/dev-docs/bidders/sovrn.md
index 3905d8c32e..98c383cbeb 100644
--- a/dev-docs/bidders/sovrn.md
+++ b/dev-docs/bidders/sovrn.md
@@ -11,7 +11,8 @@ userIds: all
 prebid_member: true
 schain_supported: true
 gvl_id: 13
-getFloor: true
+floors_supported: true
+fpd_supported: true
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/spotx.md b/dev-docs/bidders/spotx.md
index 9a63dfb00d..db387ff88f 100644
--- a/dev-docs/bidders/spotx.md
+++ b/dev-docs/bidders/spotx.md
@@ -12,6 +12,7 @@ usp_supported: true
 safeframes_ok: false
 pbjs: true
 gvl_id: 165
+floors_supported: true
 pbjs_version_notes: avoid 4.31-4.35
 ---
 
@@ -32,7 +33,7 @@ Publishers using SpotX that haven't yet updated their ad server line items and t
 | `secure`             | optional | Boolean identifying whether the requests should be https or not (used to override the protocol if the page isn't secure).                                      | `true`                                                                                                                                                                                               | `boolean`   |
 | `mimes`              | optional | List of MIME types to allow in ad.                                                                                                                             | `['application/javascript', 'video/mp4', 'video/webm']`                                                                                                                                               | `array`     |
 | `ad_volume`          | optional | Value between 0 and 1 to denote the volume the ad should start at                                                                                             |    `0.7`                                                                                                                                                                                                  | `float`     |
-| `price_floor`        | optional | Set the current channel price floor in real time.                                                                                                             | `10`                                                                                                                                                                                                   | `integer`   |
+| `price_floor`        | optional | Set the current channel price floor in real time.                                                                                                             | `10`                                                                                                                                                                                                   | `float`   |
 | `hide_skin`          | optional | Set to true to hide the SpotX skin                                                                                                                            |                                                                                                                                                                                                      | `boolean`   |
 | `custom`             | optional | An object containing key-value pairs for reporting. See SpotX documentation [here](https://developer.spotxchange.com/content/local/docs/sdkDocs/DirectSdk/dsdk-custom-configs.md#custom-key-value-pair-reporting) |                                                                                                                                                                                                      | `object`    |
 | `min_duration`       | optional | Minimum video ad duration in seconds                                                                                                                            |                                                                                                                                                                                                      | `integer`   |
diff --git a/dev-docs/bidders/sspBC.md b/dev-docs/bidders/sspBC.md
index 41a319747a..18889255a4 100644
--- a/dev-docs/bidders/sspBC.md
+++ b/dev-docs/bidders/sspBC.md
@@ -4,9 +4,10 @@ title: sspBC
 description: Prebid sspBC Bidder Adaptor
 pbjs: true
 biddercode: sspBC
-media_types: banner
-getFloor: true
+media_types: banner, video, native
+floors_supported: true
 gdpr_supported: true
+fpd_supported: true
 gvl_id: 676
 ---
 
@@ -21,4 +22,4 @@ gvl_id: 676
 | `publisherId` | optional | publisher id               | `'728'`                     | `string`  |
 | `domain`      | optional | site domain                | `'somesite.com'`            | `string`  |
 | `page`        | optional | page url                   | `'somesite.com/index.html'` | `string`  |
-| `tmax`        | optional | tmax for server connection | `400`                       | `integer` |
\ No newline at end of file
+| `tmax`        | optional | tmax for server connection | `400`                       | `integer` |
diff --git a/dev-docs/bidders/streamkey.md b/dev-docs/bidders/streamkey.md
new file mode 100644
index 0000000000..9cd2cffbc5
--- /dev/null
+++ b/dev-docs/bidders/streamkey.md
@@ -0,0 +1,58 @@
+---
+layout: bidder
+title: Streamkey
+description: Prebid Streamkey.tv Bidder Adapter
+pbjs: true
+pbs: true
+biddercode: streamkey
+aliasCode: adtelligent
+media_types: video
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name  | Scope    | Description                     | Example  | Type      |
+|-------|----------|---------------------------------|----------|-----------|
+| `aid` | required | The traffic source ID | `232131` | `integer` |
+
+
+### Test Parameters
+```
+    var adUnits = [
+
+      // Video instream adUnit
+      {
+        code: 'div-test-div',
+        sizes: [[640, 480]],
+        mediaTypes: {
+          video: {
+            context: 'instream'
+          }
+        },
+        bids: [{
+          bidder: 'streamkey',
+          params: {
+            aid: 331133
+          }
+        }]
+      },
+
+      // Video outstream adUnit
+      {
+        code: 'outstream-test-div',
+        sizes: [[640, 480]],
+        mediaTypes: {
+          video: {
+            context: 'outstream'
+          }
+        },
+        bids: [{
+          bidder: 'streamkey',
+          params: {
+            aid: 331133
+          }
+        }]
+      },
+    ];
+```
diff --git a/dev-docs/bidders/stroeerCore.md b/dev-docs/bidders/stroeerCore.md
index 9c0bae38c6..307ccd4b25 100644
--- a/dev-docs/bidders/stroeerCore.md
+++ b/dev-docs/bidders/stroeerCore.md
@@ -13,7 +13,7 @@ prebid_member: false
 pbjs: true
 pbs: false
 gvl_id: 136
-bidder_supports_deals: true
+deals_supported: true
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/talkads.md b/dev-docs/bidders/talkads.md
new file mode 100644
index 0000000000..8a8dfe4419
--- /dev/null
+++ b/dev-docs/bidders/talkads.md
@@ -0,0 +1,74 @@
+---
+layout: bidder
+title: Talkads
+description: Talkads Prebid Bidder Adapter
+biddercode: talkads
+gdpr_supported: true
+gvl_id: 
+usp_supported: false
+coppa_supported: false
+media_types: banner, native
+safeframes_ok: false
+pbjs: true
+pbs: false
+prebid_member: false
+pbjs_version_notes: v4.35 and later
+---
+
+### Registration
+
+The Talkads Adapter requires setup before beginning. Please contact us at www.natexo.com and register to the publisher side.
+
+### Configuration
+
+#### Prebid.js
+
+The TalkAds adapter does not work without setting the correct tag ID and bidder URL.
+These parameters are totally specific to each Publisher, you will receive them when contacting us.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name         | Scope    | Description                                                    | Example                                                 | Type           |
+|--------------|----------|----------------------------------------------------------------|---------------------------------------------------------|----------------|
+| `tag_id`     | required | The publisher tag id given by the Natexo team                  | `99`                                                    | `number`       |
+| `bidder_url` | required | The publisher bidder url given by the Natexo team              | `'https://test.natexo-programmatic.com/tad/tag/prebid'` | `string`       |
+
+#### Native example
+
+```
+var adUnits = [
+    code: '/19968336/prebid_native_example_1',
+    mediaTypes: {
+        native: {
+        }
+    },
+    bids: [{
+        bidder: 'talkads',
+        params: {
+            tag_id: 0,
+            bidder_url: 'https://d.natexo-programmatic.com/tad/tag/testbid',
+        },
+    }]
+];
+```
+
+#### Banner example
+```
+var adUnits = [
+    code: '/19968336/prebid_display_example_1',
+    mediaTypes: {
+      banner: {
+        sizes: [[300, 250]]
+      } 
+    },
+    bids: [{
+        bidder: 'talkads',
+        params: {
+            tag_id: 0,
+            bidder_url: 'https://d.natexo-programmatic.com/tad/tag/testbid',
+        },
+    }]
+];
+```
diff --git a/dev-docs/bidders/tappx.md b/dev-docs/bidders/tappx.md
index 256d676a88..46673da937 100644
--- a/dev-docs/bidders/tappx.md
+++ b/dev-docs/bidders/tappx.md
@@ -1,6 +1,6 @@
 ---
 layout: bidder
-title: :tappx
+title: tappx
 pbs: true
 pbjs: true
 media_types: banner, video
@@ -18,8 +18,6 @@ userIds: all
 
 Please contact tappx@tappx.com to get set up.
 
-**Note:** The Tappx prebid bidder only supports in app traffic at the moment
-
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
@@ -29,6 +27,9 @@ Please contact tappx@tappx.com to get set up.
 | tappxkey | required | An ID which identifies the adunit | 'key1' | string |
 | endpoint | required | Endpoint provided to publisher | 'endpoint1' | string |
 | bidfloor | optional | Minimum bid for this impression expressed in CPM (USD) | 1.2 | number |
+| mktag | optional | An ID which identifies a group of adunits | 'key1' | string |
+| bcid | optional | Block list of CID | ["1234"] | array of strings |
+| bcrid | optional | Block list of CRID | ["1234"] | array of strings |
 
 ### Test Parameters
 
diff --git a/dev-docs/bidders/targetvideo.md b/dev-docs/bidders/targetvideo.md
new file mode 100644
index 0000000000..945d941235
--- /dev/null
+++ b/dev-docs/bidders/targetvideo.md
@@ -0,0 +1,46 @@
+---
+layout: bidder
+title: TargetVideo
+description: Prebid TargetVideo Bidder Adaptor
+biddercode: targetVideo
+media_types: video
+gdpr_supported: true
+prebid_member: true
+userIds: criteo, unifiedId, netId, identityLink, flocId, uid2
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+floors_supported: true
+pbjs: true
+pbs: true
+gvl_id: 32
+---
+
+### Table of Contents
+
+- [Bid Params](#targetvideo-bid-params)
+- [Video Object](#targetvideo-video-object)
+
+<a name="targetvideo-bid-params" />
+
+#### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name                | Scope    | Description                                                                                                                                                                   | Example                                               | Type             |
+|---------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|------------------|
+| `placementId`       | required | The placement ID from TargetVideo.  You may identify a placement using the `invCode` and `member` instead of a placement ID. The `placementID` parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. Legacy code can retain the `string` value. **Prebid Server requires an integer value.**                                                    | `234234`                                            | `integer`         |
+
+<a name="targetvideo-video-object" />
+
+#### Video Object
+
+{: .table .table-bordered .table-striped }
+| Name              | Description                                                                                                                                                                                                                                  | Type             |
+|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|
+| `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` |
+| `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` |
+|`context` | A string that indicates the type of video ad requested.  Allowed values: `"pre_roll"`; `"mid_roll"`; `"post_roll"`; `"outstream"`. | `string` |
+| `skippable` | Boolean which, if `true`, means the user can click a button to skip the video ad.  Defaults to `false`. | `boolean` |
+|`skipoffset`| Integer that defines the number of seconds until an ad can be skipped.  Assumes `skippable` setting was set to `true`. | `integer` |
+| `playback_method` | A string that sets the playback method supported by the publisher.  Allowed values: `"auto_play_sound_on"`; `"auto_play_sound_off"`; `"click_to_play"`; `"mouse_over"`; `"auto_play_sound_unknown"`. | `string` |
+| `frameworks` | Array of integers listing API frameworks supported by the publisher.  Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; MRAID 2.0: `4`; ORMMA: `5`; OMID 1.0 `6`. | `Array<integer>` |
diff --git a/dev-docs/bidders/teads.md b/dev-docs/bidders/teads.md
index 4ca58d6654..905567f301 100644
--- a/dev-docs/bidders/teads.md
+++ b/dev-docs/bidders/teads.md
@@ -7,9 +7,10 @@ biddercode: teads
 gdpr_supported: true
 usp_supported: true
 schain_supported: true
+userIds: flocId, uid2Id
 media_types: banner, video
 gvl_id: 132
-bidder_supports_deals: true
+deals_supported: true
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/triplelift.md b/dev-docs/bidders/triplelift.md
index 9406329245..24f4b522f3 100644
--- a/dev-docs/bidders/triplelift.md
+++ b/dev-docs/bidders/triplelift.md
@@ -7,18 +7,24 @@ gdpr_supported: true
 usp_supported: true
 coppa_supported: true
 schain_supported: true
-getFloor: true
+floors_supported: true
 media_types: banner, video
 userIds: criteo, identityLink, unifiedId, pubCommonId
 prebid_member: true
 safeframes_ok: true
-bidder_supports_deals: true
+deals_supported: true
 pbjs: true
 pbs: true
 pbs_app_supported: true
+fpd_supported: true
 gvl_id: 28
 ---
 
+{% capture version2 %}
+The Triplelift Prebid Server bidding adapter and user sync endpoint require setup before beginning. Please contact us at prebid@triplelift.com.
+{% endcapture %}
+{% include alerts/alert_important.html content=version2 %}
+
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/triplelift_native.md b/dev-docs/bidders/triplelift_native.md
index 09829e00cf..8a8c2e00af 100644
--- a/dev-docs/bidders/triplelift_native.md
+++ b/dev-docs/bidders/triplelift_native.md
@@ -8,12 +8,12 @@ tcf2_supported: true
 usp_supported: true
 coppa_supported: true
 schain_supported: true
-getFloor: true
+floors_supported: true
 media_types: banner, video, native
 userIds: criteo, identityLink, unifiedId
 prebid_member: true
 safeframes_ok: true
-bidder_supports_deals: true
+deals_supported: true
 pbjs: true
 pbs: true
 pbs_app_supported: true
diff --git a/dev-docs/bidders/trustx.md b/dev-docs/bidders/trustx.md
index 7f530c9f1a..d0d938c60d 100644
--- a/dev-docs/bidders/trustx.md
+++ b/dev-docs/bidders/trustx.md
@@ -8,6 +8,7 @@ biddercode: trustx
 media_types: banner, video
 gdpr_supported: true
 usp_supported: true
+fpd_supported: true
 ---
 
 
diff --git a/dev-docs/bidders/turktelekom.md b/dev-docs/bidders/turktelekom.md
index a6b2395bca..d845c7e845 100644
--- a/dev-docs/bidders/turktelekom.md
+++ b/dev-docs/bidders/turktelekom.md
@@ -1,19 +1,29 @@
 ---
 layout: bidder
 title: Türk Telekom
-description: Prebid Türk Telekom Bidder Adaptor
+description: Türk Telekom Bidder Adaptor
 pbjs: true
+pbs: true
 biddercode: turktelekom
-media_types: banner, video
+aliasCode : adkernel
+media_types: banner, native, video
 gdpr_supported: true
-pbjs_version_notes: not in 5.x
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: true
+schain_supported: true
+pbjs_version_notes: v5.18+
+safeframes_ok: true
 ---
 
+### Note:
+
+The Türk Telekom bidding adapter requires setup and approval before implementation. Please reach out to <ad-ops@turktelekom.com.tr> for more details.
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name        | Scope    | Description                                                                                                                                                                                                                     | Example   | Type      |
-|-------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|-----------|
-| `uid`       | required | Represents the Türk Telekom bidder system Ad Slot ID associated with the respective div id from the site page.                                                                                                                  | `42`      | `integer` |
-| `priceType` | optional | Can take the values `gross` or `net`, default value is `net`. Net represents the header bid price with the Türk Telekom header bidder margin already extracted. Gross price does contain the Türk Telekom bidder margin within. | `'gross'` | `string`  |
+| Name     | Scope    | Description           | Example                   | Type     |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host`   | required | RTB host | `'cpm.programattik.com'` | `string` |
+| `zoneId` | required | Zone Id           | 30164                 | `integer` |
diff --git a/dev-docs/bidders/ucfunnel.md b/dev-docs/bidders/ucfunnel.md
index 5d102e23c1..a825957ad8 100644
--- a/dev-docs/bidders/ucfunnel.md
+++ b/dev-docs/bidders/ucfunnel.md
@@ -15,7 +15,9 @@ gvl_id: 607
 pbs_app_supported: true
 ---
 
-### Bid params
+### Prebid JS
+
+#### Bid params
 
 {: .table .table-bordered .table-striped }
 | Name   | Scope    | Description                                     | Example | Type     |
@@ -46,3 +48,16 @@ Sizes set in the `adUnit` object will also apply to the ucfunnel bid requests.
   - [Banner Ads](https://cdn.aralego.net/ucfad/test/ucfunnel/compliance/pbjs_banner.html)
   - [Instream Video Ads](https://cdn.aralego.net/ucfad/test/ucfunnel/compliance/pbjs_video.html)
   - [Native Ads](https://cdn.aralego.net/ucfad/test/ucfunnel/compliance/pbjs_native.html)
+
+
+### Prebid server
+
+#### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name   | Scope    | Description                                     | Example | Type     |
+|--------|----------|-------------------------------------------------|---------|----------|
+| `adunitid` | required | ID for ad unit |         | `string` |
+| `partnerid` | required | ID for partner |         | `string` |
+
+```
diff --git a/dev-docs/bidders/undertone.md b/dev-docs/bidders/undertone.md
index 94d743d670..3c079518d2 100644
--- a/dev-docs/bidders/undertone.md
+++ b/dev-docs/bidders/undertone.md
@@ -6,6 +6,7 @@ biddercode: undertone
 media_types: display, video
 gdpr_supported: true
 usp_supported: true
+schain_supported: true
 userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
 pbjs: true
 ---
diff --git a/dev-docs/bidders/unibots.md b/dev-docs/bidders/unibots.md
new file mode 100644
index 0000000000..d8b859e629
--- /dev/null
+++ b/dev-docs/bidders/unibots.md
@@ -0,0 +1,27 @@
+---
+layout: bidder
+title: Unibots
+description: Unibots Bidder Adaptor
+pbjs: true
+pbs: true
+biddercode: unibots
+aliasCode : adkernel
+media_types: banner, native, video
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+pbs_app_supported: true
+schain_supported: true
+---
+
+### Note:
+
+The Unibots bidding adapter requires setup and approval before implementation. Please reach out to <saurabh@unibots.in> for more details.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name     | Scope    | Description           | Example                   | Type     |
+|----------|----------|-----------------------|---------------------------|----------|
+| `host`   | required | RTB host | `'cpm.unibots.in'` | `string` |
+| `zoneId` | required | Zone Id           | 30164                 | `integer` |
diff --git a/dev-docs/bidders/unicorn.md b/dev-docs/bidders/unicorn.md
index 7b2e69f7d0..21a645f404 100644
--- a/dev-docs/bidders/unicorn.md
+++ b/dev-docs/bidders/unicorn.md
@@ -7,7 +7,6 @@ pbs: true
 pbs_app_supported: true
 media_types: banner
 biddercode: unicorn
-pbjs_version_notes: not in 5.x
 ---
 
 ### bid params
@@ -17,7 +16,6 @@ pbjs_version_notes: not in 5.x
 |---------------|----------|-------------------------------------------|------------|-----------|
 | `placementId` | optional | Your placement ID | `'rectangle-ad-1'` | `string`  |
 | `accountId` | required | Account ID for charge request (provided by UNICORN) | `12345`    | `integer` |
-| `bidfloorCpm` | optional for Prebid.js | Floor CPM (JPY); defaults to 0.  | `0.2`    | `float` |
 | `publisherId` | optional | Account specific publisher id. | `67890` | `integer` |
 | `mediaId` | required for Prebid Server, optional for Prebid.js | Publisher specific media id. | `'example'` | `string` |
 | `bcat` | optional for Prebid.js  | Blocked IAB categories | `['IAB-1', 'IAB-2']` | `[string]` |
diff --git a/dev-docs/bidders/unruly.md b/dev-docs/bidders/unruly.md
index 539093e5b1..89bdd181cd 100644
--- a/dev-docs/bidders/unruly.md
+++ b/dev-docs/bidders/unruly.md
@@ -3,17 +3,26 @@ layout: bidder
 title: Unruly
 description: Prebid Unruly Bidder Adaptor
 biddercode: unruly
-media_types: native, video
 gdpr_supported: true
+usp_supported: true
+coppa_supported: false
+schain_supported: true
+floors_supported: true
+media_types: banner, video
+userIds: all
+prebid_member: false
+safeframes_ok: check with bidder
+deals_supported: check with bidder
 pbjs: true
 pbs: true
-gvl_id: 162
+pbs_app_supported: true
+gvl_id: 36
 ---
 
 ### Bid Params
 
 {: .table .table-bordered .table-striped }
-| Name            | Scope    | Description                                                                                 | Example                                  | Type      |
-|-----------------|----------|---------------------------------------------------------------------------------------------|------------------------------------------|-----------|
-| `siteId`        | required | The site ID from Unruly. This will be provided to you by your Unruly account manager        | `123456`                                 | `integer` |
-| `targetingUUID` | required | The targeting UUID from Unruly. This will be provided to you by your Unruly account manager | `'766220b5-3d02-46c5-aa8b-2bc60c6f7418'` | `string`  |
+| Name               | Scope          | Description                                                                                                                  | Example                                          | Type      |
+|--------------------|----------------|------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|-----------|
+| `siteId`           | required       | The site ID from Unruly. This will be provided to you by your Unruly account manager.                                        | `123456`                                         | `integer` |
+| `featureOverrides` | optional       | This param is a generic object for configuring Unruly outstream demand. To run UNmissable, set ‘canRunUnmissable’ to true.   | `"featureOverrides": {"canRunUnmissable": true}` | `object`  |
diff --git a/dev-docs/bidders/valueimpression.md b/dev-docs/bidders/valueimpression.md
index 75e9352402..38b86c78ca 100644
--- a/dev-docs/bidders/valueimpression.md
+++ b/dev-docs/bidders/valueimpression.md
@@ -10,9 +10,9 @@ gdpr_supported: true
 schain_supported: true
 usp_supported: true
 userIds: all
-getFloor: true
+floors_supported: true
 pbs: true
 ---
 
 # Description
-Valueimpression is an aliased bidder of Apacdex bid adapter. Please refer to [Apacdex documentation](https://docs.prebid.org/dev-docs/bidders/apacdex) for bid parameters and implementation guide.
\ No newline at end of file
+Valueimpression is an aliased bidder of Apacdex bid adapter. Please refer to [Apacdex documentation](https://docs.prebid.org/dev-docs/bidders/apacdex) for bid parameters and implementation guide.
diff --git a/dev-docs/bidders/vdoai.md b/dev-docs/bidders/vdoai.md
index 287daccbc4..1ff9f59566 100644
--- a/dev-docs/bidders/vdoai.md
+++ b/dev-docs/bidders/vdoai.md
@@ -5,7 +5,6 @@ description: Prebid vdo.ai Bidder Adaptor
 pbjs: true
 biddercode: vdoai
 media_types: banner, video
-pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/ventes.md b/dev-docs/bidders/ventes.md
new file mode 100644
index 0000000000..1d08678854
--- /dev/null
+++ b/dev-docs/bidders/ventes.md
@@ -0,0 +1,71 @@
+---
+layout: bidder
+title: ventes
+description: Prebid ventes Bidder Adapter
+pbjs: true
+biddercode: ventes
+gdpr_supported: false
+usp_supported: false
+media_types: banner
+coppa_supported: false
+schain_supported: false
+dchain_supported: false
+prebid_member: false
+---
+
+### BidParams
+{: .table .table-bordered .table-striped }
+| Name            | Scope    | Description                                		 | Example                      		| Type          |
+|-----------------|----------|-----------------------------------------------------------|----------------------------------------------|---------------|
+| `placementId`   | required | Placement ID from Ventes Avenues 			 | `'VA-062-0013-0183'` 			| `string`	|
+| `publisherId`   | required | Publisher ID from Ventes Avenues 			 | `'VA-062'` 					| `string`	|
+| `user`          | optional | Object that specifies information about an external user. | `user: { age: 25, gender: 0, dnt: true}` 	| `object`	|
+| `app`           | optional | Object containing mobile app parameters.  		 | `app : { id: 'app-id'}`			| `object`	|
+
+#### User Object
+
+{: .table .table-bordered .table-striped }
+| Name              | Description 										| Example		| Type             	|
+|-------------------|-------------------------------------------------------------------------------------------|-----------------------|-----------------------|
+| `age`             | The age of the user.									| `35`			| `integer`		|
+| `externalUid`     | Specifies a string that corresponds to an external user ID for this user. 		| `'1234567890abcdefg'`	| `string` 		|
+| `segments`        | Specifies the segments to which the user belongs.						| `[1, 2]` 		| `Array<integer>`	|
+| `gender`          | Specifies the gender of the user.  Allowed values: Unknown: `0`; Male: `1`; Female: `2`	| `1` 			| `integer`		|
+| `dnt`             | Do not track flag.  Indicates if tracking cookies should be disabled for this auction	| `true`  	 	| `boolean`		|
+| `language`        | Two-letter ANSI code for this user's language.						| `EN`			| `string`		|
+
+
+### Ad Unit Setup for Banner
+```javascript
+var adUnits = [
+{
+  code: 'test-hb-ad-11111-1',
+  mediaTypes: {
+    banner: {  
+      sizes: [
+          [300, 250]
+      ]
+    }   
+  }, 
+  bids: [{
+    bidder: 'ventes',
+    params: {
+        placementId: 'VA-062-0013-0183',
+        publisherId: '555555',
+        IABCategories: "['IAB1', 'IAB5']",
+        device:{
+          ip: '123.145.167.189',
+          ifa:"AEBE52E7-03EE-455A-B3C4-E57283966239",
+        },
+        app: {
+          id: "aaaaaa",
+          name: "Weather",
+          bundle: 'com.example',
+          storeurl: 'https://play.google.com/store/apps/details?id=com.example&hl=en',
+          domain: 'exaple.com',
+        } 
+    }
+  }]
+ }
+]
+```
diff --git a/dev-docs/bidders/vidazoo.md b/dev-docs/bidders/vidazoo.md
index c1540f6432..5baf2a5a15 100644
--- a/dev-docs/bidders/vidazoo.md
+++ b/dev-docs/bidders/vidazoo.md
@@ -7,7 +7,6 @@ userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrable
 gdpr_supported: true
 usp_supported: true
 pbjs: true
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/vidcrunch.md b/dev-docs/bidders/vidcrunch.md
new file mode 100644
index 0000000000..41a592a164
--- /dev/null
+++ b/dev-docs/bidders/vidcrunch.md
@@ -0,0 +1,45 @@
+---
+layout: bidder
+title: VidCrunch
+description: Prebid VidCrunch Bidder Adapter
+pbjs: true
+biddercode: vidcrunch
+aliasCode: aniview
+media_types: banner, video
+gdpr_supported: true
+usp_supported: true
+schain_supported: true
+safeframes_ok: true
+---
+
+### Note:
+For more information about [VidCrunch](https://vidcrunch.com/), please contact info@vidcrunch.com.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name             | Scope    | Description      | Example                      | Type     |
+|------------------|----------|------------------|------------------------------|----------|
+| `AV_PUBLISHERID` | required | Publisher/Netid  | `'55b88d4a181f465b3e8b4567'` | `string` |
+| `AV_CHANNELID`   | required | Channel id       | `'5a5f17a728a06102d14c2718'` | `string` |
+
+### Test Parameters
+```
+videoAdUnit = [
+{
+  code: 'video1',
+  mediaTypes: {
+    video: {
+      playerSize: [[640, 480]],
+      context: 'outstream'
+    },
+  },
+  bids: [{
+    bidder: 'vidcrunch',
+    params: {
+      AV_PUBLISHERID: '55b78633181f4603178b4568',
+      AV_CHANNELID: '5d19dfca4b6236688c0a2fc4'
+    }
+  }]
+}];
+```
diff --git a/dev-docs/bidders/videobyte.md b/dev-docs/bidders/videobyte.md
index 6a9b7e4359..bb954c5324 100644
--- a/dev-docs/bidders/videobyte.md
+++ b/dev-docs/bidders/videobyte.md
@@ -8,7 +8,6 @@ media_types: video
 gdpr_supported: true
 usp_supported: true
 schain_supported: true
-
 ---
 
 ### Note:
@@ -21,3 +20,5 @@ VideoByte adapter only supports video ads.
 | Name    | Scope    | Description  | Example  | Type     |
 |---------|----------|--------------|----------|----------|
 | `pubId` | required | Publisher ID | `'vb12345'` | `string` |
+| `placementId` | optional | Placement ID | `'1234567'` | `string` |
+| `nid` | optional | Network ID | `'1234'` | `string` |
diff --git a/dev-docs/bidders/videoreach.md b/dev-docs/bidders/videoreach.md
index 621a5c9b08..a38870bea6 100644
--- a/dev-docs/bidders/videoreach.md
+++ b/dev-docs/bidders/videoreach.md
@@ -6,7 +6,6 @@ pbjs: true
 biddercode: videoreach
 media_types: banner, video
 gdpr_supported: true
-pbjs_version_notes: not in 5.x
 ---
 
 
diff --git a/dev-docs/bidders/vidoomy.md b/dev-docs/bidders/vidoomy.md
new file mode 100644
index 0000000000..5757ad9b74
--- /dev/null
+++ b/dev-docs/bidders/vidoomy.md
@@ -0,0 +1,23 @@
+---
+layout: bidder
+title: Vidoomy
+description: Prebid Vidoomy Bidder Adaptor
+pbjs: true
+biddercode: vidoomy
+media_types: banner, video
+gdpr_supported: true
+gvl_id: 380
+usp_supported: true
+coppa_supported: true
+---
+
+### Note:
+[Vidoomy](https://vidoomy.com/), for more info please contact support@vidoomy.com
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name             | Scope    | Description      | Example                      | Type     |
+|------------------|----------|------------------|------------------------------|----------|
+| `id` | required | id  | `123123` | `string` |
+| `pid`   | required | pid | `'123123'` | `string` |
diff --git a/dev-docs/bidders/viewdeos.md b/dev-docs/bidders/viewdeos.md
new file mode 100644
index 0000000000..aacb4a2a6d
--- /dev/null
+++ b/dev-docs/bidders/viewdeos.md
@@ -0,0 +1,39 @@
+---
+layout: bidder
+title: Viewdeos Server
+description: Prebid Server ViewDeos Adapter
+pbjs: false
+pbs: true
+biddercode: viewdeos
+media_types: banner,video
+gdpr_supported: true
+gvl_id: 924
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name  | Scope    | Description                     | Example  | Type      |
+|-------|----------|---------------------------------|----------|-----------|
+| `aid` | required | The source ID from member zone | `350975` | `integer` |
+
+### Test Parameters
+```
+    var adUnits = [
+      // Banner adUnit
+      {
+        code: 'div-test-div',
+        mediaTypes: {
+          banner: {
+            sizes:[[300, 250]]
+          }
+        },
+        bids: [{
+          bidder: 'viewdeos',
+          params: {
+            aid: 672854
+          }
+        }]
+      }
+    ];
+```
diff --git a/dev-docs/bidders/viewdeosDX.md b/dev-docs/bidders/viewdeosDX.md
index 6aab7f7107..3c8ee83b72 100644
--- a/dev-docs/bidders/viewdeosDX.md
+++ b/dev-docs/bidders/viewdeosDX.md
@@ -1,15 +1,17 @@
 ---
 layout: bidder
-title: Viewdeos
-description: Prebid ViewDeos Bidder Adaptor
+title: ViewdeosDX Client
+description: Prebid.js ViewDeos Bidder Adapter
 pbjs: true
-pbs: true
+pbs: false
 biddercode: viewdeosDX
 media_types: banner,video
 gdpr_supported: true
 gvl_id: 924
 ---
 
+Note that for Prebid Server, use "viewdeos" bidder code.
+
 ### Bid params
 
 {: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/visx.md b/dev-docs/bidders/visx.md
index 9fdb7cb190..f39b0db05d 100644
--- a/dev-docs/bidders/visx.md
+++ b/dev-docs/bidders/visx.md
@@ -9,7 +9,7 @@ gvl_id: 154
 schain_supported: true
 userIds: id5Id, unifiedId
 media_types: banner, video
-bidder_supports_deals: true
+deals_supported: true
 pbjs: true
 pbs: true
 ---
diff --git a/dev-docs/bidders/vlyby.md b/dev-docs/bidders/vlyby.md
new file mode 100644
index 0000000000..bf0d5184a7
--- /dev/null
+++ b/dev-docs/bidders/vlyby.md
@@ -0,0 +1,24 @@
+---
+layout: bidder
+title: VLYBY
+description: Prebid VLYBY Bidder Adapter
+biddercode: vlyby
+media_types: banner, video
+schain_supported: false
+prebid_member: false
+pbjs: true
+---
+
+### Note:
+
+The VLYBY Header Bidder Adapter needs a Contract with VLYBY Digital GmbH, Munich. Please contact prebid@vlyby.com for additional information.
+
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                                                           | Example                                     | Type     |
+|----------------|----------|---------------------------------------------------------------------------------------|---------------------------------------------|----------|
+| `publisherId`| required | VLYBY PublisherId                                                                 | `'12345'`                                   | `string` |
+| `placement`   | optional | Placement Id                                                                    | `'12345'`                                   | `string` |
diff --git a/dev-docs/bidders/vrtcal.md b/dev-docs/bidders/vrtcal.md
index c2b59324d0..cdb1948a8e 100644
--- a/dev-docs/bidders/vrtcal.md
+++ b/dev-docs/bidders/vrtcal.md
@@ -4,11 +4,10 @@ title: VRTCAL Markets, Inc.
 description: VRTCAL Markets, Inc. Bid Adapter
 pbjs: true
 pbs: true
-media_ytpes: banner
+media_types: banner, video
 gdpr_supported: false
 biddercode: vrtcal
 gvl_id: 706
-pbjs_version_notes: not in 5.x
 ---
 
 ### Bid Params
diff --git a/dev-docs/bidders/weborama.md b/dev-docs/bidders/weborama.md
deleted file mode 100644
index 0fa88f3951..0000000000
--- a/dev-docs/bidders/weborama.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-layout: bidder
-title: Weborama
-description: Prebid Weborama Bidder Adaptor
-pbjs: true
-biddercode: weborama
----
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name           | Scope      | Description                                                    | Example            |
-| :-----------   | :--------- | :------------                                                  | :----------------- |
-| `placementId` | required   | Placement Id will be generated on Weborama Platform. | 0                        |
-| `traffic`      | optional   | Type traffic                                             | 'banner'                 |
diff --git a/dev-docs/bidders/winr.md b/dev-docs/bidders/winr.md
index ba15ca619d..38a0bc7a59 100644
--- a/dev-docs/bidders/winr.md
+++ b/dev-docs/bidders/winr.md
@@ -9,9 +9,10 @@ userIds: criteo, unifiedId, netId, identityLink, flocId, uid2
 schain_supported: true
 coppa_supported: true
 usp_supported: true
-getFloor: true
+floors_supported: true
 pbjs: true
 safeframes_ok: false
+fpd_supported: true
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/wipes.md b/dev-docs/bidders/wipes.md
index 999f0fe4e5..25e1ed80cc 100644
--- a/dev-docs/bidders/wipes.md
+++ b/dev-docs/bidders/wipes.md
@@ -5,7 +5,6 @@ description: Prebid WIPES Bidder Adaptor
 pbjs: true
 biddercode: wipes
 media_types: video
-pbjs_version_notes: not in 5.x
 ---
 
 ### Note:
diff --git a/dev-docs/bidders/yahoossp.md b/dev-docs/bidders/yahoossp.md
new file mode 100644
index 0000000000..c97532794d
--- /dev/null
+++ b/dev-docs/bidders/yahoossp.md
@@ -0,0 +1,51 @@
+---
+layout: bidder
+title: Yahoo SSP
+description: Yahoo SSP Bid Adapter
+pbs: true
+pbjs: true
+media_types: banner, video
+biddercode: yahoossp
+prebid_member: true
+gdpr_supported: true
+usp_supported: true
+schain_supported: true
+coppa_supported: true
+gvl_id: 25
+userIds: All
+---
+
+### Important Notice (JS vs PBS)
+There are differences between our Prebid.js & Prebid-Server Yahoo SSP adapters. The Prebid-server adapter currently does not support Video inventory or integration via the `pubId` method.
+
+
+### Prebid.js Bid Params
+The 'yahoossp' bid adapter supports 2 integration types:
+1. **dcn & pos** (Site/App & Position explicit targeting) - For legacy "aol", "oneMobile" adapter partners/publishers.
+2. **pubId** (Publisher ID) - For New partners/publishers joining Yahoo SSP and legacy "oneVideo" partners/publishers migrating to the Yahoo SSP.
+
+
+### Prebid-Server Bid Params
+The 'yahoossp' bid adapter supports 2 integration types:
+* **dcn & pos** (Site/App & Position explicit targeting) - For legacy "aol", "oneMobile" adapter partners/publishers.
+
+
+#### DCN & POS Integration Parameters (JS & PBS)
+For legacy "aol", "oneMobile" adapter partners/publishers.
+
+{: .table .table-bordered .table-striped }
+| Name       | Scope    | Description            | Example | Type     |
+|------------|----------|------------------------|---------|----------|
+| dcn | Required | Site ID provided by Yahoo SSP | 'site1' | string |
+| pos | Required | Placement ID provided by Yahoo SSP | 'placement1' | string |
+
+#### PubId Integration Parameters (JS Only)
+For New partners/publishers joining Yahoo SSP
+floors_supported: true and legacy "oneVideo" partners/publishers migrating to the Yahoo SSP.
+
+{: .table .table-bordered .table-striped }
+| Name       | Scope    | Description            | Example | Type     |
+|------------|----------|------------------------|---------|----------|
+| pubId | Required | Your Publisher External ID provided by Yahoo SSP | 'DemoPublisher' | string |
+| siteId | Optional | Ability to target a specific Site using an External ID provided by Yahoo SSP | '1234567' | string |
+| placementId | Optional | Ability to target a specific Placement using an External ID provided by Yahoo SSP | 'header' | string |
diff --git a/dev-docs/bidders/yieldlab.md b/dev-docs/bidders/yieldlab.md
index 20c19e400a..ce32e314d7 100644
--- a/dev-docs/bidders/yieldlab.md
+++ b/dev-docs/bidders/yieldlab.md
@@ -24,4 +24,29 @@ pbs: true
 | `adSize`       | optional | Override the default prebid size                                                      | `'970x250'`                                 | `string` |
 | `targeting`    | optional | Key-Value Targeting                                                                   | `{ 'key1': 'value1', 'key2': 'value2' }`    | `object` |
 | `extId`        | optional | External Id                                                                           | `'abc'`                                     | `string` |
+| `iabContent`   | optional | Object of content information, see [IAB Content Object](#iab_content) for details. It will override the content object passed in [First Party Data](https://docs.prebid.org/features/firstPartyData.html)    | `{ 'id': 'foo', 'title': 'bar' }`           | `object` |
 | `customParams` | optional | Custom parameters to append to the query string of the bidding endpoint.              | `{ 'param': 'value1', 'param2': 'value2' }` | `object` |
+
+<a name="iab_content" />
+
+#### IAB Content Object
+
+Yieldlab supports passing the IAB content object in correspond to the OpenRTB Specifications.
+The following attributes are supported, and all of them are optional.
+
+{: .table .table-bordered .table-striped }
+| Name           | Scope    | Description                                                                                   | Example                                     | Type             |
+|----------------|----------|-----------------------------------------------------------------------------------------------|---------------------------------------------|------------------|
+| `id`           | optional | Id uniquely identifying the content                                                           | `'12345'`                                   | `string`         |
+| `episode`      | optional | Episode number                                                                                | `'42'`                                      | `string`         |
+| `title`        | optional | Content title                                                                                 | `'some title'`                              | `string`         |
+| `series`       | optional | Content series                                                                                | `'some series'`                             | `string`         |
+| `season`       | optional | Content season                                                                                | `'s1'`                                      | `string`         |
+| `artist`       | optional | Artist credited with the content                                                              | `'John Doe'`                                | `string`         |
+| `genre`        | optional | Genre that best describes the content                                                         | `'some genre'`                              | `string`         |
+| `isrc`         | optional | International Standard Recording Code conforming to ISO3901                                   | `'CC-XXX-YY-NNNNN'`                         | `string`         |
+| `url`          | optional | URL of the content, for buy-side contextualization or review                                  | `'https://yieldlab.com'`                    | `string`         |
+| `cat`          | optional | Array of IAB content categories that describe the content producer                            | `['IAB1-1', 'IAB1-2']`                      | `Array<string>`  |
+| `context`      | optional | Type of content - 1: video, 2: game, 3: music, 4: application, 5: text, 6: other, 7: unknown  | `'7'`                                       | `string`         |
+| `keywords`     | optional | Array of keywords describing the content                                                      | `['k1', 'k2', 'k3']`                        | `Array<string>`  |
+| `live`         | optional | 0 = not live, 1 = content is live                                                             | `'0'`                                       | `string`         |
diff --git a/dev-docs/bidders/yieldmo.md b/dev-docs/bidders/yieldmo.md
index 18a5a691bb..9ec5b17793 100644
--- a/dev-docs/bidders/yieldmo.md
+++ b/dev-docs/bidders/yieldmo.md
@@ -4,17 +4,18 @@ title: Yieldmo
 description: Prebid Yieldmo Bidder Adaptor
 biddercode: yieldmo
 media_types: banner, video
-userIds: pubCommonId, unifiedId, criteo
+userIds: pubCommonId, unifiedId, criteo, sharedId
 gdpr_supported: true
 usp_supported: true
 schain_supported: true
 prebid_member: true
+fpd_supported: true
 pbjs: true
 pbs: true
 ---
 
 # Registration
-## In order to use Yieldmo adapter please reach out to your Yieldmo account's person or support@yieldmo.com for more information.
+### Note: In order to use Yieldmo adapter please reach out to your Yieldmo account's person or support@yieldmo.com for more information.
 <br/>
 ### Bid Params
 
@@ -52,7 +53,6 @@ In addition, Yieldmo adapter relies on parameters specified in the `mediaTypes.v
 |-------------------|----------|--------------------------------------------------------|-----------------|------------------|
 | `playerSize`      | required | Width and height of the player                         | `[640, 480]`    | `Array<integer>` |
 | `context`         | required | `instream` or `outstream ` are only supported                           | `instream`      | `string`         |
-
 ### Example of in-stream Video Ad-unit
 ```javascript
 var videoAdUnits = [{
@@ -77,7 +77,7 @@ var videoAdUnits = [{
   bids: [{
     bidder: 'yieldmo',
     params: {
-      placementId: '1524592390382976659' // required
+      placementId: '1524592390382976659',// required,
     }
   }]
 }];
@@ -88,23 +88,23 @@ var videoAdUnit = [{
   code: 'div-video-ad-1234567890',
   mediaTypes: {
       video: {
-          playerSize: [640, 480],   // required
+          playerSize: [640, 480],        // required
           context: 'outstream',
-          mimes: ['video/mp4'],      // required, array of strings
-          placement: 3,                      // required, integer ( 3,4,5 )
-          maxduration: 30,                   // required, integer
-          protocols: [2, 3],                 // required, array of integers
-          api: [2, 3],                       // required, array of integers
-          playbackmethod: [1,2]              // required, array of integers
+          mimes: ['video/mp4'],          // required, array of strings
+          placement: 3,                  // required, integer ( 3,4,5 )
+          maxduration: 30,               // required, integer
+          protocols: [2, 3],             // required, array of integers
+          api: [2, 3],                   // required, array of integers
+          playbackmethod: [1,2]          // required, array of integers
       }
   },
   bids: [{
     bidder: 'yieldmo',
     params: {
-      placementId: '1524592390382976659'  // required
+      placementId: '1524592390382976659',  // required
     }
   }]
 }];
 ```
 
-> Prebid out-stream demo - https://prebid-outstream-qa.yieldmo.com/prebid-outstream.html
+> [Prebid out-stream demo](https://prebid-outstream-qa.yieldmo.com/prebid-outstream.html)
diff --git a/dev-docs/bidders/yieldone.md b/dev-docs/bidders/yieldone.md
index 43991a3439..4bbde1c7a6 100644
--- a/dev-docs/bidders/yieldone.md
+++ b/dev-docs/bidders/yieldone.md
@@ -5,6 +5,7 @@ description: Prebid YIELDONE Bidder Adaptor
 pbjs: true
 pbs: true
 biddercode: yieldone
+userIds: identityLink
 media_types: banner, video
 ---
 
diff --git a/dev-docs/bidders/zeta_global.md b/dev-docs/bidders/zeta_global.md
index 1167b31a9c..08a51def28 100644
--- a/dev-docs/bidders/zeta_global.md
+++ b/dev-docs/bidders/zeta_global.md
@@ -4,7 +4,7 @@ title: Zeta Global
 description: Zeta Global Prebid Bidder Adapter
 pbjs: true
 biddercode: zeta_global
-bidder_supports_deals: false
+deals_supported: false
 media_types: banner
 gdpr_supported: true
 tcf2_supported: true
diff --git a/dev-docs/bidders/zeta_global_ssp.md b/dev-docs/bidders/zeta_global_ssp.md
index 74c092c0fb..1a375294cc 100644
--- a/dev-docs/bidders/zeta_global_ssp.md
+++ b/dev-docs/bidders/zeta_global_ssp.md
@@ -4,13 +4,14 @@ title: Zeta Global Ssp
 description: Zeta Global Ssp Prebid Bidder Adapter
 pbjs: true
 biddercode: zeta_global_ssp
-bidder_supports_deals: false
+deals_supported: false
 media_types: banner
 gdpr_supported: true
 usp_supported: true
 coppa_supported: true
 userIds: all
 prebid_member: true
+fpd_supported: true
 gvl_id: 833
 ---
 
diff --git a/dev-docs/common-issues.md b/dev-docs/common-issues.md
index 66eb3693ab..ac9cd05993 100644
--- a/dev-docs/common-issues.md
+++ b/dev-docs/common-issues.md
@@ -38,6 +38,6 @@ Check the bid prices. If they are low and are getting reduced to $0 due to price
 {:toc}
 
 + [Prebid.js FAQ](/dev-docs/faq.html)
-+ [Prebid Tips for Troubleshooting]({{site.github.url}}/dev-docs/troubleshooting-tips.html)
++ [Prebid Tips for Troubleshooting](/troubleshooting/troubleshooting-guide.html)
 
 
diff --git a/dev-docs/examples/meta-bid-filtering.md b/dev-docs/examples/meta-bid-filtering.md
new file mode 100644
index 0000000000..6fe914df06
--- /dev/null
+++ b/dev-docs/examples/meta-bid-filtering.md
@@ -0,0 +1,15 @@
+---
+layout: example
+title: Meta Bid Filtering
+left_nav_override: Examples
+description: Bid filtering on meta object example
+sidebarType: 1
+
+about:
+- Bidders can supply metadata about the bid such as advertiser domain. See the "meta" fields in the <a href="/dev-docs/bidder-adaptor.html#interpreting-the-response">bid response</a> for the full list.
+- This is an example that filters bid responses based on the metadata object.
+
+jsfiddle_link: jsfiddle.net/Prebid_Examples/0s4eug1d/18/embedded/html,result
+
+code_height: 2300
+---
diff --git a/dev-docs/faq.md b/dev-docs/faq.md
index 6fb525a246..805f7a1256 100644
--- a/dev-docs/faq.md
+++ b/dev-docs/faq.md
@@ -160,8 +160,21 @@ It's technically possible, but we don't recommend doing this:
 
 If all this wasn't enough to warn you away from trying, it should work if you name the PBJS global differently for each instance (https://github.com/prebid/Prebid.js/blob/master/package.json#L20)
 
+## Can I filter bid responses that don't meet my criteria?
+
+Yes. Many bidders provide metadata about the bid that can be used in troubleshooting
+and filtering. See the [list of bid response metadata](/dev-docs/bidder-adaptor.html#interpreting-the-response) and the [filtering example](/dev-docs/examples/meta-bid-filtering.html).
+
+## Does Prebid.js resolve the AUCTION_PRICE macro?
+
+Yes, but in a way that could cause discrepancies in reporting. It's recommended
+that [bid adapters resolve OpenRTB macros](/dev-docs/bidder-adaptor.html#resolve-openrtb-macros-in-the-creatives) themselves before giving them to Prebid.js.
+
+For historic reasons, Prebid will resolve the AUCTION_PRICE macro, but it will be after currency conversion and any bid adjustments.
+This differs from how OpenRTB defines this value as being the clearing price in the bid currency. Header Bidding is a first-price auction, the best candidate for “clearing price” is the original bid itself.
+
 ## Related Reading
 
-+ [Prebid.js Dev Tips]({{site.baseurl}}/dev-docs/troubleshooting-tips.html)
-+ [Prebid.js Common Issues]({{site.baseurl}}/dev-docs/common-issues.html)
++ [Prebid.js Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html)
++ [Prebid.js Common Issues](/dev-docs/common-issues.html)
 + [Prebid.js issues tagged 'question'](https://github.com/prebid/Prebid.js/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20)
diff --git a/dev-docs/modules/adpod.md b/dev-docs/modules/adpod.md
index 519b1a1a87..0519cd9db6 100644
--- a/dev-docs/modules/adpod.md
+++ b/dev-docs/modules/adpod.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Adpod
-description: Adds functions to validate, cache, and modify long-form video bids.
+description: Enables developers to add support for a new adserver that handles ad pod (long-form) videos.
 module_code : adpod
 display_name : Adpod
 enable_download : true
diff --git a/dev-docs/modules/airgridRtdProvider.md b/dev-docs/modules/airgridRtdProvider.md
new file mode 100644
index 0000000000..71153537ca
--- /dev/null
+++ b/dev-docs/modules/airgridRtdProvider.md
@@ -0,0 +1,102 @@
+---
+layout: page_v2
+title: AirGrid RTD Provider
+display_name: AirGrid RTD Provider
+description: Client-side, cookieless and privacy-first audiences.
+page_type: module
+module_type: rtd
+module_code : airgridRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# AirGrid RTD Provider
+
+AirGrid is a privacy-first, cookie-less audience platform. Designed to help publishers increase inventory yield,
+whilst providing audience signal to buyers in the bid request, without exposing raw user level data to any party.
+
+This real-time data module provides quality first-party data, contextual data, site-level data and more that is 
+injected into bid request objects destined for different bidders in order to optimize targeting.
+
+{:.no_toc}
+* TOC
+{:toc}
+
+## Usage
+
+Compile the Halo RTD module into your Prebid build:
+
+`gulp build --modules=rtdModule,airgridRtdProvider,appnexusBidAdapter`
+
+Add the AirGrid RTD provider to your Prebid config. In this example we will configure publisher 1234 to retrieve segments from Audigent. See the "Parameter Descriptions" below for more detailed information of the configuration parameters. 
+
+```js
+pbjs.setConfig(
+    ...
+    realTimeData: {
+        auctionDelay: 1000,
+        dataProviders: [
+            {
+                name: 'airgrid',
+                waitForIt: true,
+                params: {
+                    // These are unique values for each account.
+                    apiKey: 'apiKey',
+                    accountId: 'accountId',
+                    publisherId: 'publisherId',
+                    bidders: ['appnexus', 'pubmatic']
+                }
+            }
+        ]
+    }
+    ...
+}
+```
+
+### Parameter Descriptions
+
+{: .table .table-bordered .table-striped }
+| Name  |Type | Description   | Notes  |
+| :------------ | :------------ | :------------ |:------------ |
+| name | `String` | RTD sub module name | Always 'airgrid' |
+| waitForIt | `Boolean` | Wether to delay auction for module response | Optional. Defaults to false |
+| params.apiKey | `Boolean` | Publisher partner specific API key | Required |
+| params.accountId | `String` | Publisher partner specific account ID | Required |
+| params.publisherId | `String` | Publisher partner specific publisher ID | Required |
+| params.bidders | `Array` | Bidders with which to share segment information | Optional |
+
+_Note: Although the module supports passing segment data to any bidder using the ORTB2 spec, there is no way for this to be currently monetised. Please reach out to support, to discuss using bidders other than Xandr/AppNexus._
+
+If you do not have your own `apiKey`, `accountId` & `publisherId` please reach out to [support@airgrid.io](mailto:support@airgrid.io)
+
+## Testing
+
+To view an example of the on page setup required:
+
+```bash
+gulp serve-fast --modules=rtdModule,airgridRtdProvider,appnexusBidAdapter
+```
+
+Then in your browser access:
+
+```
+http://localhost:9999/integrationExamples/gpt/airgridRtdProvider_example.html
+```
+
+Run the unit tests, just on the AirGrid RTD module test file:
+
+```bash
+gulp test --file "test/spec/modules/airgridRtdProvider_spec.js" 
+```
+
+## Support
+
+If you require further assistance or are interested in discussing the module functionality please reach out to:
+- [hello@airgrid.io](mailto:hello@airgrid.io) for general questions.
+- [support@airgrid.io](mailto:support@airgrid.io) for technical questions.
+
+You are also able to find more examples and other integration routes on the [AirGrid docs site](docs.airgrid.io).
+
+Happy Coding! 😊
+The AirGrid Team.
\ No newline at end of file
diff --git a/dev-docs/modules/akamaiDapRtdProvider.md b/dev-docs/modules/akamaiDapRtdProvider.md
new file mode 100644
index 0000000000..879393a86a
--- /dev/null
+++ b/dev-docs/modules/akamaiDapRtdProvider.md
@@ -0,0 +1,79 @@
+---
+layout: page_v2
+title: Akamai DAP Real Time Data Provider Module
+display_name: Akamai DAP Real Time Data Provider Module
+description: Akamai DAP Real Time Data Provider Module
+page_type: module
+module_type: rtd
+module_code : akamaiDapRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# Akamai DAP Real Time Data Provider Module
+{:.no_toc}
+
+* TOC
+{:toc}
+
+The Akamai Data Activation Platform (DAP) is a privacy-first system that protects end-user privacy by only allowing them to be targeted as part of a larger cohort. Akamai DAP Real time data Provider automatically invokes the DAP APIs and submit audience segments and the Secure Ad ID(SAID) to the bid-stream.  SAID is a JWT/JWE which carries with it the cohorts and only a side-car or trusted server in the demand-side platform is allowed to see its contents.
+
+
+## Publisher Usage
+
+1) Build the akamaiDapRTD module into the Prebid.js package with:
+
+```
+gulp build --modules=akamaiDapRtdProvider,...
+```
+
+2) Use `setConfig` to instruct Prebid.js to initilaize the akamaiDapRtdProvider module, as specified below.
+
+### Configuration
+
+```
+pbjs.setConfig({
+  realTimeData: {
+    dataProviders: [
+      {
+        name: "dap",
+        waitForIt: true,
+        params: {
+          apiHostname: '<see your Akamai account rep>',
+          apiVersion: "x1",
+          domain: 'your-domain.com',
+          identityType: 'email' | 'mobile' | ... | 'dap-signature:1.0.0',
+          segtax: <Akamai_taxonomy_name>,
+          tokenTtl: 5,
+        }
+      }
+    ]
+  }
+});
+```
+
+Please reach out to your Akamai account representative(Prebid@akamai.com) to get provisioned on the DAP platform.
+
+
+**Config Syntax details:**
+
+{: .table .table-bordered .table-striped }
+| Name  |Type | Description   | Notes  |
+| :------------ | :------------ | :------------ |:------------ |
+| name | String | Akamai Dap Rtd module name | 'dap' always|
+| waitForIt | Boolean | Required to ensure that the auction is delayed until prefetch is complete | Optional. Defaults to false |
+| apiHostname | String | host name | Please reach out to your Akamai account representative(Prebid@akamai.com) for this value|
+| apiVersion | String | this holds the API version| It will be "x1" always |
+| domain | String | the domain name | |
+| identityType | String | Something like this email' | 'mobile' | ... | 'dap-signature:1.0.0' | |
+| segtax | Integer | the taxonomy for Akamai | Getting this value is in progress, once done this will become optional |
+| tokenTtl | Integer | time to live | |
+
+### Testing
+To view an example of available segments returned by dap:
+```
+‘gulp serve --modules=rtdModule,akamaiDapRtdProvider,appnexusBidAdapter,sovrnBidAdapter’
+```
+and then point your browser at:
+"http://localhost:9999/integrationExamples/gpt/akamaidap_segments_example.html"
diff --git a/dev-docs/modules/bidViewable.md b/dev-docs/modules/bidViewable.md
index b76fb8bf98..a9da963a12 100644
--- a/dev-docs/modules/bidViewable.md
+++ b/dev-docs/modules/bidViewable.md
@@ -1,15 +1,16 @@
 ---
 layout: page_v2
 page_type: module
-title: Module - Bid Viewable Event
-description: Triggers BID_VIEWABLE event when a rendered PBJS-Bid is viewable according to [Active View criteria](https://support.google.com/admanager/answer/4524488)
+title: Module - Bid Viewability - GAM
+description: Triggers a BID_VIEWABLE event when a rendered bid is viewable according to Active View criteria
 module_code : bidViewability
-display_name : Bid Viewable Event
+display_name : Bid Viewability - GAM
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
-# Bid Viewable Event
+# Bid Viewability - GAM
 {:.no_toc}
 
 * TOC
@@ -19,33 +20,37 @@ sidebarType : 1
 
 This optional module will trigger a BID_VIEWABLE event which can be consumed by Analytics adapters. In addition, the winning bidder can implement an `onBidViewable` method to capture this event.
 
-
 Notes:
-- The module does not work with adservers other than GAM and only with GPT integration.
-- The GPT API is used to find when a bid is viewable, See https://developers.google.com/publisher-tag/reference#googletag.events.impressionviewableevent .
+- The module does not work with adservers other than GAM and only with GPT integration. See the [other Bid Viewable Event](/dev-docs/modules/bidViewableIO.html) module for an ad server independent version.
+- The GPT API is used to find when a bid is viewable. See [GPT documentation](https://developers.google.com/publisher-tag/reference#googletag.events.impressionviewableevent) for more details.
 - This event is fired when an impression becomes viewable, according to [Active View criteria](https://support.google.com/admanager/answer/4524488).
-- Logic used to find a matching Prebid.js bid for a GPT slot is ` (slot.getAdUnitPath() === bid.adUnitCode || slot.getSlotElementId() === bid.adUnitCode) ` this logic can be changed by using param ` customMatchFunction `
 - When a rendered PBJS bid is viewable the module will trigger BID_VIEWABLE event, which can be consumed by the winning bidder and analytics adapters
 - The module works with Banner, Outsteam and Native creatives
 
-Instead of listening for events, bidders may supply a ` bid.vurls ` array and this module may fire those pixels when the viewability signal is received. Publishers can control this with module config ` firePixels: true `. Please note that GDPR and USP related parameters will be added to the given URLs.
+Instead of listening for events, bidders may supply a `bid.vurls` array and this module may fire those pixels when the viewability signal is received. Publishers can control this with module config ` firePixels: true `. Please note that GDPR and USP related parameters will be added to the given URLs.
 
 {: .alert.alert-warning :}
-This feature doesn't seem to work with [Instream Video](/dev-docs/examples/instream-banner-mix.html), as GPT's impressionViewable event is not triggered for instream-video-creative
+This feature doesn't work with [Instream Video](/dev-docs/examples/instream-banner-mix.html), as GPT's impressionViewable event is not triggered for instream-video-creative
+
+The default logic used to find a matching Prebid.js bid for a GPT slot is
+```
+(bid, slot) => (slot.getAdUnitPath() === bid.adUnitCode ||
+		slot.getSlotElementId() === bid.adUnitCode)
+```
 
 ## Configuration
 
 {: .table .table-bordered .table-striped }
-| Field    | Scope   | Type   | Description                                                                           |
-|----------+---------+--------+---------------------------------------------------------------------------------------|
-| `bidViewability` | Required | Object | Configuration object for instream tracking |
+| Field    | Scope   | Type   | Description                            |
+|----------+---------+--------+-----------------------------------------|
+| `bidViewability` | Required | Object | Configuration object |
 | `bidViewability.enabled` | Required | Boolean | when set to true, the module will emit BID_VIEWABLE when applicable. Default: `false` |
 | `bidViewability.firePixels` | Optional | Boolean | when set to true, will fire the urls mentioned in `bid.vurls` which should be array of URLs. Default: `false` |
-| `bidViewability.customMatchFunction` | Optional | function(bid, slot) | when passed this function will be used to `find` the matching winning bid for the GPT slot. Default value is ` (bid, slot) => (slot.getAdUnitPath() === bid.adUnitCode || slot.getSlotElementId() === bid.adUnitCode) ` |
+| `bidViewability.customMatchFunction` | Optional | function(bid, slot) | this function will be used to find the matching winning bid for the GPT slot. See above for the default. |
 
 ## Example of setting module config
 {% highlight js %}
-	pbjs.setConfig({
+    pbjs.setConfig({
         bidViewability: {
             enabled: true,
             firePixels: true,
diff --git a/dev-docs/modules/bidViewableIO.md b/dev-docs/modules/bidViewableIO.md
new file mode 100644
index 0000000000..b483bc5b80
--- /dev/null
+++ b/dev-docs/modules/bidViewableIO.md
@@ -0,0 +1,66 @@
+---
+layout: page_v2
+page_type: module
+title: Module - Bid Viewability - Ad Server Independent
+description: Triggers a BID_VIEWABLE event when a rendered bid is viewable according to an approximation of IAB viewability criteria
+module_code : bidViewabilityIO
+display_name : Bid Viewability - Ad Server Independent
+enable_download : true
+sidebarType : 1
+---
+
+# Bid Viewability - Ad Server Independent
+{:.no_toc}
+
+* TOC
+{:toc}
+
+## Overview
+
+This optional module will trigger a BID_VIEWABLE event which can be consumed by Analytics adapters. In addition, the winning bidder can implement an `onBidViewable` method to capture this event.
+
+Notes:
+- The module works with any adserver, or with no ad server at all.
+- Publishers using GAM/GPT might consider using the [Bid Viewable Event - GAM](/dev-docs/modules/bidViewable.html) module
+- Requires the site to polyfill the [IntersectionObserver API](https://github.com/w3c/IntersectionObserver/tree/main/polyfill) (v1) to find when a bid is viewable. This implementation assumes that the publisher and the bidder are acting in good faith, and does not attempt to detect any bad behavior from either party. We assume that the ad is rendered into the element it has been told to render into, and is not hidden or obfuscated at any time.
+- This event is fired when an impression becomes viewable, according to IAB's viewability guidelines
+- When a rendered PBJS bid is determined to be viewable this module will trigger a BID_VIEWABLE event, which can be consumed by the winning bidder and analytics adapters
+- The module works with Banner creatives, with additional support to come.
+
+## Known Issues
+
+{: .alert.alert-warning :}
+This feature is not intended to be a perfect measure of viewability. It is however intended to be a reasonable approximation of a bids viewability for creative types that are supported.
+
+1. Only supports Banner creatives
+2. Only works on browsers that support or on sites that have [polyfilled the IntersectionObserver API](https://github.com/w3c/IntersectionObserver/tree/main/polyfill)
+3. Results can only be trusted if both the publisher and winning bidder are assumed to be acting in good faith.
+
+## Configuration
+
+{: .table .table-bordered .table-striped }
+| Field    | Scope   | Type   | Description                                                                           |
+|----------+---------+--------+---------------------------------------------------------------------------------------|
+| `bidViewabilityIO` | Required | Object | Configuration object for viewability tracking for supported media types (IO stands for IntersectionObserver) |
+| `bidViewabilityIO.enabled` | Required | Boolean | when set to true, the module will emit BID_VIEWABLE when applicable. Default: `false` |
+
+## Example of setting module config
+{% highlight js %}
+	pbjs.setConfig({
+        bidViewabilityIO: {
+            enabled: true,
+        }
+    });
+{% endhighlight %}
+
+## Example of consuming BID_VIEWABLE event
+{% highlight js %}
+	pbjs.onEvent('bidViewable', function(bid){
+		console.log('got bid details in bidViewable event', bid);
+	});
+{% endhighlight %}
+
+## Related Reading
+
+- [Building a PBJS analytics adapter](/dev-docs/integrate-with-the-prebid-analytics-api.html)
+- [Building a PBJS bidder adapter](/dev-docs/bidder-adaptor.html)
diff --git a/dev-docs/modules/browsiRtdProvider.md b/dev-docs/modules/browsiRtdProvider.md
index 6d269adf3a..062f47f45f 100644
--- a/dev-docs/modules/browsiRtdProvider.md
+++ b/dev-docs/modules/browsiRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : browsiRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/categoryTranslation.md b/dev-docs/modules/categoryTranslation.md
index 4102eb82c6..cb1bd0f987 100644
--- a/dev-docs/modules/categoryTranslation.md
+++ b/dev-docs/modules/categoryTranslation.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Category Translation
-description: Converts IAB sub category to ad server group.
+description: Converts IAB category to ad server category for long-form videos.
 module_code : categoryTranslation
 display_name : CategoryTranslation
 enable_download : true
diff --git a/dev-docs/modules/cleanioRtdProvider.md b/dev-docs/modules/cleanioRtdProvider.md
new file mode 100644
index 0000000000..5f7cf7923b
--- /dev/null
+++ b/dev-docs/modules/cleanioRtdProvider.md
@@ -0,0 +1,67 @@
+---
+layout: page_v2
+title: clean.io Real Time Data Provider
+display_name: clean.io Real-time Anti-Malvertising Module
+description: clean.io Real-time Anti-Malvertising Module
+page_type: module
+module_type: rtd
+module_code : cleanioRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# clean.io Real-time Anti-Malvertising Module
+
+## Overview
+
+The clean.io Realtime module provides effective anti-malvertising solution for publishers, including, but not limited to,
+blocking unwanted 0- and 1-click redirects, deceptive ads or those with malicious landing pages, and various types of affiliate fraud.
+
+Using this module requires prior agreement with [clean.io](https://clean.io) to obtain the necessary distribution key.
+
+## Integration
+
+clean.io Realtime module can be built just like any other prebid module:
+
+```
+gulp build --modules=cleanioRtdProvider,...
+```
+
+
+## Configuration
+
+When built into prebid.js, this module can be configured through the following `pbjs.setConfig` call:
+
+```javascript
+pbjs.setConfig({
+    realTimeData: {
+        dataProviders: [{
+            name: 'clean.io',
+            params: {
+                cdnUrl: 'https://abc1234567890.cloudfront.net/script.js', ///< Contact clean.io to get your own CDN URL
+                protectionMode: 'full', ///< Supported modes are 'full', 'bids' and 'bids-nowait', see below.
+            }
+        }]
+    }
+});
+```
+
+
+### Configuration parameters
+
+{: .table .table-bordered .table-striped }
+| Name | Type  | Scope | Description |
+| :------------ | :------------ | :------------ |:------------ |
+| ``cdnUrl`` | ``string`` | Required | CDN URL of the script, which is to be used for protection. |
+| ``protectionMode`` | ``'full' or 'bids' or 'bids-nowait'`` | Required | Integration mode. Please refer to the "Integration modes" section for details. |
+
+
+## Integration modes
+
+{: .table .table-bordered .table-striped }
+| Integration Mode | Parameter Value | Description |
+| :------------ | :------------ | :------------ |
+| Full page protection | ``'full'`` | Preferred mode. The module will add the protector agent script directly to the page, and it will protect all placements. This mode will make the most out of various behavioral detection mechanisms, and will also prevent typical malicious behaviors. Please note that in this mode, depending on Prebid library naming, Chrome may mistakenly tag non-ad-related content as ads: https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/ad_tagging.md. |
+| Bids-only protection | ``'bids'`` | The module will protect specific bid responses, more specifically, the HTML representing ad payload, by wrapping it into the agent script. Please note that in this mode, ads delivered directly, outside of Prebid integration, will not be protected, since the module can only access the ads coming through Prebid. |
+| Bids-only protection with no delay on bid rendering | ``'bids-nowait'`` | Same as above, but in this mode, the script will also *not* wrap those bid responses, which arrived prior to successful preloading of agent script. |
diff --git a/dev-docs/modules/consentManagement.md b/dev-docs/modules/consentManagement.md
index a1dc9b9794..f3ea32002f 100644
--- a/dev-docs/modules/consentManagement.md
+++ b/dev-docs/modules/consentManagement.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Consent Management - GDPR
-description: Module to consume and distribute GDPR consent information to bidder adapters
+description: If you have users in Europe, this module works with your Consent Management Platform to pass consent info to bidders and help align with EU regulations. See also the GDPR Enforcement module.
 module_code : consentManagement
 display_name : Consent Management - GDPR
 enable_download : true
+recommended: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/consentManagementUsp.md b/dev-docs/modules/consentManagementUsp.md
index c365dd0ce5..ddfa9be3fc 100644
--- a/dev-docs/modules/consentManagementUsp.md
+++ b/dev-docs/modules/consentManagementUsp.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Consent Management - US Privacy
-description: Module to consume and distribute US Privacy information to bidder adapters
+description: If you have users in California, this module works with your Consent Management Platform to pass CCPA/US-Privacy data to bidders.
 module_code : consentManagementUsp
 display_name : Consent Management - US Privacy
 enable_download : true
+recommended: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/currency.md b/dev-docs/modules/currency.md
index 5f51829cf8..bc8dd3562d 100644
--- a/dev-docs/modules/currency.md
+++ b/dev-docs/modules/currency.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Currency
-description: Converts bids to the ad server currency
+description: Converts bid currency into ad server currency based on data in a supplied exchange rate file.
 module_code : currency
 display_name : Currency
 enable_download : true
diff --git a/dev-docs/modules/dfp_express.md b/dev-docs/modules/dfp_express.md
index 598fb1c126..fef264c9db 100644
--- a/dev-docs/modules/dfp_express.md
+++ b/dev-docs/modules/dfp_express.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Module - Google Ad Manager Express
-description: Simplified installation mechanism for publishers that have Google Ad Manager in their pages
+description: A simplified installation mechanism for publishers that have Google Publisher Tag (GPT) ad calls in their pages.
 module_code : express
 display_name : Google Ad Manager Express
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/dfp_video.md b/dev-docs/modules/dfp_video.md
index 57a3ff9bc2..e9219ac3b6 100644
--- a/dev-docs/modules/dfp_video.md
+++ b/dev-docs/modules/dfp_video.md
@@ -2,26 +2,27 @@
 layout: page_v2
 page_type: module
 title: Module - Google Ad Manager Video
-description: Addition of DFP Video to the Prebid package
+description: Required for serving instream video through Google Ad Manager.
 module_code : dfpAdServerVideo
-display_name : DFP Video
+display_name : Google Ad Manager Video Support
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
 
 
-# DFP Video
+# Google Ad Manager Video
 {:.no_toc}
 
-This module is required to use the Prebid Instream video examples with DFP Adserver. For instructions showing how to add this module to Prebid.js, see below.
+This module is required to use the Prebid Instream video examples with Google Ad Manager. For instructions showing how to add this module to Prebid.js, see below.
 
 ### Step 1:  Prepare the base Prebid file as usual
 
 The standard options:
 
 - Build from a locally-cloned git repo
-- Receive the email package from the Prebid [Download]({{site.baseurl}}/download.html) page
+- Receive the email package from the Prebid [Download](/download.html) page
 
 ### Step 2: Integrate into your prebid.js configuration
 
@@ -29,4 +30,4 @@ The method exposes the [`pbjs.adServers.dfp.buildVideoUrl`]({{site.baseurl}}/dev
 
 ## Further Reading
 
-+ [Show Video Ads with DFP]({{site.baseurl}}/dev-docs/show-video-with-a-dfp-video-tag.html)
++ [Show Video Ads with GAM](/dev-docs/show-video-with-a-dfp-video-tag.html)
diff --git a/dev-docs/modules/dgkeywordRtdProvider.md b/dev-docs/modules/dgkeywordRtdProvider.md
index 2153cddc64..217971cc31 100644
--- a/dev-docs/modules/dgkeywordRtdProvider.md
+++ b/dev-docs/modules/dgkeywordRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : dgkeywordRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/enrichmentFpdModule.md b/dev-docs/modules/enrichmentFpdModule.md
index 833b8c88e7..857c4f2129 100644
--- a/dev-docs/modules/enrichmentFpdModule.md
+++ b/dev-docs/modules/enrichmentFpdModule.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Module - First Party Data Enrichment
-description: Enriches First Party Data
+description: Injects additional data into the auction stream, including&#58; domain, keywords, and page url.
 module_code : enrichmentFpdModule
 display_name : First Party Data Enrichment
 enable_download : true
+recommended: true
 sidebarType : 1
 ---
 
@@ -46,7 +47,8 @@ pbjs.refreshFpd();
 |---+---+---|
 | page URL | site.page | Uses pbjs getRefererInfo().canonicalUrl |
 | referer URL | site.ref | Uses pbjs getRefererInfo().referer |
-| domain | site.domain | Pulled from the getRefererInfo().canonicalUrl, the host domain is used, with www dropped. |
+| host domain | site.domain | Pulled from the getRefererInfo().canonicalUrl the host domain is used with the www component dropped. |
+| aggregated domain | site.publisher.domain | The highest level domain in which cookies can be set. |
 | viewport width | device.w | Hunts for window.innerWidth, window.document.documentElement.clientWidth, window.document.body.clientWidth |
 | viewport height | device.w | Hunts for window.innerHeight, window.document.documentElement.clientHeight, window.document.body.clientHeight |
 | meta keywords | site.keywords | Looks for a meta tag. e.g. <meta name="keywords" content="cars, boats"> |
diff --git a/dev-docs/modules/floors.md b/dev-docs/modules/floors.md
index 054907fa5f..e5d652df1d 100644
--- a/dev-docs/modules/floors.md
+++ b/dev-docs/modules/floors.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Price Floors
-description: Determine and enforce auction price floors
+description: Configure and enforce minimum bids.
 module_code : priceFloors
 display_name : Price Floors
 enable_download : true
@@ -17,11 +17,11 @@ sidebarType : 1
 
 ## Overview
 
-The Floors module provides an open source framework in Prebid for Publishers to configure Prebid price floors on their own or to work with a vendor who can provide floors.
+The Price Floors Module provides an open source framework in Prebid for Publishers to configure Prebid price floors on their own or to work with a vendor who can provide floors.
 
 A ‘floor’ is defined as the lowest CPM price a bid will need to meet for each Prebid auction. It’s a way for publishers to signal to bidders the price to beat, thereby protecting the value of their inventory.
 
-The module provides several ways for Prebid floors to be defined, that are used by bidder adapters to read floors and enforced on bid responses in any supported currency. The floors utilized by the Prebid.js floors module are defined by one or more set of rules containing any or all of the following dimensions:
+The module provides several ways for Prebid floors to be defined, that are used by bidder adapters to read floors and enforced on bid responses in any supported currency. The floors utilized by the Price Floors Module are defined by one or more set of rules containing any or all of the following dimensions:
 
 
 - AdUnit
@@ -32,31 +32,31 @@ The module provides several ways for Prebid floors to be defined, that are used
 - "custom dimensions"
 
 {: .alert.alert-warning :}
-When using GPT Slot name, the gpt library is required to load first. Failing to do so may yield unexpected results and could impact revenue performance.
+When using GPT Slot name, the GPT library is required to load first. Failing to do so may yield unexpected results and could impact revenue performance.
 
-The entire set of Prebid floors selected by the Floors Module for a given auction is called a “Rule Location”. A Rule Location can be any one of:
+The entire set of floors selected by the Price Floors Module for a given auction is called a "Rule Location". A Rule Location can be any one of:
 1. Within the AdUnit (AdUnit)
 2. Within setConfig  (Package)
 3. Retrieved from a real-time data service (Dynamic)
 
 
 {: .alert.alert-info :}
-Even though floors are defined with five pre-configured dimensions, it’s possible to extend the list of dimensions to attributes of the page, user, auction or other data by supplying a dimension matching function. For example, a publisher can provide a matching function that returns the device type to allow the price floor module to use device type as an attribute within a prebid floor rules file.
+Even though floors are defined with five pre-configured dimensions, it’s possible to extend the list of dimensions to attributes of the page, user, auction or other data by supplying a dimension matching function. For example, a publisher can provide a matching function that returns the device type to allow the Floor module to use device type as an attribute within a prebid floor rules file.
 
 
 ## How it Works
-There are several places where the Floor module changes the behavior of the Prebid.js auction process. Below is a diagram describing the general flow of the Floors Module:
+There are several places where the Floor module changes the behavior of the Prebid.js auction process. Below is a diagram describing the general flow of the Price Floors Module:
 
 ![Floors Module Flow](/assets/images/floors/floors_flow.png)
 
-1. When building the Prebid.js package, the Floors module (and any analytics adapters) needs to be included with 'gulp build --modules=priceFloors,...'
-2. As soon as the setConfig({floors}) call is initiated, the Floors Module will build an internal hash table for each auction derived from a Rule Location (one of Dynamic, setConfig or adUnit)
-  - a. If an endpoint URL (a Dynamic Floor) is defined, the Floors Module will attempt to fetch floor data from the Floor Provider's endpoint. When requestBids is called, the Floors Module will delay the auction up to the supplied amount of time in floors.auctionDelay or as soon as the dynamic endpoint returns data, whichever is first.
-3. Bid Adapters are responsible for utilizing the getFloors() from the bidRequest object for each ad slot media type, size combination. The Floors Module will perform currency conversion if the bid adapter requests floors in a different currency from the defined floor data currency.
+1. When building the Prebid.js package, the Price Floors Module (and any analytics adapters) needs to be included with 'gulp build --modules=priceFloors,...'
+2. As soon as the setConfig({floors}) call is initiated, the Price Floors Module will build an internal hash table for each auction derived from a Rule Location (one of Dynamic, setConfig or adUnit)
+  - a. If an endpoint URL (a Dynamic Floor) is defined, the Price Floors Module will attempt to fetch floor data from the Floor Provider's endpoint. When requestBids is called, the Price Floors Module will delay the auction up to the supplied amount of time in floors.auctionDelay or as soon as the dynamic endpoint returns data, whichever is first.
+3. Bid Adapters are responsible for utilizing the getFloor() from the bidRequest object for each ad slot media type, size combination. The Price Floors Module will perform currency conversion if the bid adapter requests floors in a different currency from the defined floor data currency.
 4. Bid Adapters will pass the floor values to their bidding endpoints, to request bids, responding with any bids that meet or exceed the provided floor
-5. Bid adapters will submit bids to back to Prebid core, where the Floors Module will perform enforcement on each bid
-6. The Floors Module will mark all bids below the floor as bids rejected. Prebid core will submit all eligible bids to the publisher ad server
-    - a. The Floors module emits floor event / bid data to Analytics adapters to allow Floor Providers a feedback loop on floor performance for model training
+5. Bid adapters will submit bids to back to Prebid core, where the Price Floors Module will perform enforcement on each bid
+6. The Price Floors Module will mark all bids below the floor as bids rejected. Prebid core will submit all eligible bids to the publisher ad server
+    - a. The Price Floors Module emits floor event / bid data to Analytics adapters to allow Floor Providers a feedback loop on floor performance for model training
 
 
 ## Defining Floors
@@ -107,7 +107,7 @@ Below are some basic principles of ad unit floor definitions:
 {% endhighlight %}
 
 {: .alert.alert-info :}
-When defining floors at the adUnit level, the Floors Module requires the floors object to be defined in setConfig, even if the definition is an empty object as shown below: {% highlight js %}pbjs.setConfig({ floors: {} });{% endhighlight %}
+When defining floors at the adUnit level, the Price Floors Module requires the floors object to be defined in setConfig, even if the definition is an empty object as shown below: {% highlight js %}pbjs.setConfig({ floors: {} });{% endhighlight %}
 
 Floor definitions are set in the “values” object containing one or more rules, where the rule is the criteria that needs to be met for that given ad unit, with an associated CPM floor. In the above example, the floors are enforced when the bid from a bidder matches the “mediaType” and “size” combination. Since many bid adapters are not able to ingest floors per size, a simpler setup can be:
 
@@ -126,7 +126,7 @@ floors: {
        }
 {% endhighlight %}
 
-For more advanced publisher setups, values can accept a “\*” to denote a catch all when a bid comes back that the floors module does not have an exact match and for bid adapters who are not able to use a floor per size, the bid adapter will automatically receive the “\*” rule’s floor if available. Example setup can be:
+For more advanced publisher setups, values can accept a “\*” to denote a catch-all when a bid comes back that the Price Floors Module does not have an exact match and for bid adapters who are not able to use a floor per size, the bid adapter will automatically receive the “\*” rule’s floor if available. Example setup can be:
 
 {% highlight js %}
 floors: {
@@ -191,7 +191,7 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
-By defining floor data with setConfig, the Floors module will map GPT ad slots to AdUnits as needed. It does this in the same way as the setTargetingForGPTAsync() function – first looking for an AdUnit.code that matches the slot name, then looking for an AdUnit.code that matches the div id of the named GPT slot.
+By defining floor data with setConfig, the Price Floors Module will map GPT ad slots to AdUnits as needed. It does this in the same way as the setTargetingForGPTAsync() function – first looking for an AdUnit.code that matches the slot name, then looking for an AdUnit.code that matches the div id of the named GPT slot.
 
 Here’s another example that includes more fields:
 
@@ -206,10 +206,10 @@ pbjs.setConfig({
                 fields: [ 'domain', 'gptSlot', 'mediaType', 'size']
             },
             values: {
-                'www.plublisher.com|/1111/homepage/top-rect|banner|300x250': 0.80,
-                'www.publisher.com|/1111/homepage/top-rect|video|300x250': 2.20,
-                'www.plublisher.com|/1111/homepage/left-nav|banner|300x250': 1.77,
-                'www.publisher.com|/1111/homepage/left-nav|video|300x250': 2.88
+                'www.examplepub.com|/1111/homepage/top-rect|banner|300x250': 0.80,
+                'www.examplepub.com|/1111/homepage/top-rect|video|300x250': 2.20,
+                'www.examplepub.com|/1111/homepage/left-nav|banner|300x250': 1.77,
+                'www.examplepub.com|/1111/homepage/left-nav|video|300x250': 2.88
                 ...
             }
         }
@@ -240,7 +240,7 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
-The floors module is flexible to handle floors set in multiple locations. Like in the below example a publisher can configure Dynamic floors in addition to Package floors (in setConfig). While the floors module is only able to use one set of rules (either Package, adUnit or Dynamic) defined as a Floor Location, setting floors in the Package will be utilized when the Dynamic floors fail to return data or another error condition occurs with the Dynamic fetch.
+The Price Floors Module is flexible to handle floors set in multiple locations. Like in the below example a publisher can configure Dynamic floors in addition to Package floors (in setConfig). While the Price Floors Module is only able to use one set of rules (either Package, adUnit or Dynamic) defined as a Floor Location, setting floors in the Package will be utilized when the Dynamic floors fail to return data or another error condition occurs with the Dynamic fetch.
 
 {% highlight js %}
 pbjs.setConfig({
@@ -272,7 +272,7 @@ pbjs.setConfig({
 
 ## Floors Syntax
 
-The examples above covered several different scenarios where floors can be applied. Below we will cover the syntax and definition of the floors data schema. As of Prebid.js version 3.24, the Floors module supports a second data schema with the ability to add new schemas to future-proof the needs of additional design changes while keeping backwards compatibility.
+The examples above covered several different scenarios where floors can be applied. Below we will cover the syntax and definition of the floors data schema. As of Prebid.js version 3.24, the Price Floors Module supports a second data schema with the ability to add new schemas to future-proof the needs of additional design changes while keeping backwards compatibility.
 
 
 ### Schema 1
@@ -282,23 +282,23 @@ Schema 1 restricts floors providers or publishers to applying only one data grou
 {: .table .table-bordered .table-striped }
 | Param | Type | Description | Default |
 |---+---+---+---+---|
-| floorMin | float | The mimimum CPM floor used by the Floors Module (as of 4.13). The Floors Module will take the greater of floorMin and the matched rule CPM when evaluating getFloor() and enforcing floors. | - |
+| floorMin | float | The mimimum CPM floor used by the Price Floors Module (as of 4.13). The Price Floors Module will take the greater of floorMin and the matched rule CPM when evaluating getFloor() and enforcing floors. | - |
 | floorProvider | string | Optional atribute (as of prebid version 4.1) used to signal to the Floor Provider's Analytics adapter their floors are being applied. They can opt to log only floors that are applied when they are the provider. If floorProvider is supplied in both the top level of the floors object and within the data object, the data object's configuration shall prevail.| - |
-| enforcement | object | Controls the enforcement behavior within the Floors Module.| - |
-| skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will  have access to model version (if defined) when skipped is true to signal the Floors Module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail. | 0 |
-| enforcement.enforceJS | boolean | If set to true, the floors module will provide floors to bid adapters for bid request matched rules and suppress any bids not exceeding a matching floor. If set to false, the prebid floors module will still provide floors for bid adapters, there will be no floor enforcement.| true |
-| enforcement.enforcePBS | boolean | If set to true, the Prebid.js floors module will signal to Prebid Server to pass floors to it’s bid adapters and enforce floors. If set to false, the pbjs should still pass matched bid request floor data to PBS, however no enforcement will take place. | false |
+| enforcement | object | Controls the enforcement behavior within the Price Floors Module.| - |
+| skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will  have access to model version (if defined) when skipped is true to signal the Price Floors Module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail. | 0 |
+| enforcement.enforceJS | boolean | If set to true, the Price Floors Module will provide floors to bid adapters for bid request matched rules and suppress any bids not exceeding a matching floor. If set to false, the Price Floors Module will still provide floors for bid adapters, there will be no floor enforcement.| true |
+| enforcement.enforcePBS | boolean | If set to true, the Price Floors Module will signal to Prebid Server to pass floors to it’s bid adapters and enforce floors. If set to false, the pbjs should still pass matched bid request floor data to PBS, however no enforcement will take place. | false |
 | enforcement.floorDeals | boolean | Enforce floors for deal bid requests. | false |
-| enforcement.bidAdjustment | boolean | If true, the Floors Module will use the bidAdjustment function to adjust the floor per bidder. If false (or no bidAdjustment function is provided), floors will not be adjusted. Note: Setting this parameter to false may have unexpected results, such as signaling a gross floor when expecting net or vice versa. | true |
+| enforcement.bidAdjustment | boolean | If true, the Price Floors Module will use the bidAdjustment function to adjust the floor per bidder. If false (or no bidAdjustment function is provided), floors will not be adjusted. Note: Setting this parameter to false may have unexpected results, such as signaling a gross floor when expecting net or vice versa. | true |
 | endpoint | object | Controls behavior for dynamically retrieving floors.  | - |
 | endpoint.url | string | URL of endpoint to retrieve dynamic floor data.  | - |
-| data | object (required) | Floor data used by the Floors Module to pass floor data to bidders and floor enforcement. | - |
+| data | object (required) | Floor data used by the Price Floors Module to pass floor data to bidders and floor enforcement. | - |
 | data.floorProvider | string | Optional atribute (as of prebid version 4.2) used to signal to the Floor Provider's Analytics adapter their floors are being applied. They can opt to log only floors that are applied when they are the provider. If floorProvider is supplied in both the top level of the floors object and within the data object, the data object's configuration shall prevail.| - |
 | data.currency | string | Currency of floor data. Floor Module will convert currency where necessary. See Currency section for more details. | 'USD' |
-| data.skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will  have access to model version (if defined) when skipped is true to signal the Floors Module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail. | 0 |
-| data.floorsSchemaVersion | string | The Floors Module supports two versions of the data schema. Version 1 allows for only one model to be applied in a given data set, whereas Version 2 allows you to sample multiple models selected by supplied weights. If no schema version is provided, the Floors Module will assume version 1 for the sake of backwards compatiblity. For schema version 2 see the next section. | 1 |
+| data.skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will  have access to model version (if defined) when skipped is true to signal the Price Floors Module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail. | 0 |
+| data.floorsSchemaVersion | integer | The module supports two versions of the data schema. Version 1 allows for only one model to be applied in a given data set, whereas Version 2 allows you to sample multiple models selected by supplied weights. If no schema version is provided, the module will assume version 1 for the sake of backwards compatiblity. For schema version 2 see the next section. | 1 |
 | data.modelVersion | string | Used by floor providers to train on model version performance. The expectation is a floor provider’s analytics adapter will pass the model verson back for algorithm training. | - |
-| data.modelTimestamp | int | Epoch timestamp associated with modelVersion. Can be used to track model creation of floor file for post auction analysis.| - |
+| data.modelTimestamp | integer | Epoch timestamp associated with modelVersion. Can be used to track model creation of floor file for post auction analysis.| - |
 | data.schema | object |allows for flexible definition of how floor data is formatted. | - |
 | data.schema.delimiter | string | Character separating the floor keys. | '\|' |
 | data.schema.fields | array of strings | Supported values are: gptSlot, adUnitCode, mediaType, size | - |
@@ -314,14 +314,14 @@ Schema 1 restricts floors providers or publishers to applying only one data grou
 
 ### Schema 2
 
-Schema 2 allows floors providers to A / B one or more floor groups, determined at auction time.
+Schema 2 allows floors providers to A/B-test one or more floor groups, determined at auction time.
 
 The following principles apply to schema 2:
 - The below attributes are required:
     - data.floorsSchemaVersion to be set to 2
     - A valid modelGroups object must be set
     - The field modelGroups.modelWeight is required for each model group
-        - If one of the model weights is missing, no schema 2 floor will be set and the Floors Module will look in other locations for floor definitions
+        - If one of the model weights is missing, no schema 2 floor will be set and the Price Floors Module will look in other locations for floor definitions
 - If common attributes are set in both the modelGroups and root level of the data object, modelGroups attributes prevail
 - The Schema 2 data model can only be applied in Package level (i.e. directly in setConfig) or Dynamic level
 - Sampling weights are applied at the auction level. Each new auction the dice will be rolled
@@ -333,27 +333,27 @@ While some attributes are common in both schema versions, for completeness, all
 {: .table .table-bordered .table-striped }
 | Param | Type | Description | Default |
 |---+---+---+---+---|
-| floorMin | float | The mimimum CPM floor used by the Floors Module (as of 4.13). The Floors Module will take the greater of floorMin and the matched rule CPM when evaluating getFloor() and enforcing floors. | - |
+| floorMin | float | The mimimum CPM floor used by the module (as of 4.13). The module will take the greater of floorMin and the matched rule CPM when evaluating getFloor() and enforcing floors. | - |
 | floorProvider | string | Optional atribute (as of prebid version 4.1) used to signal to the Floor Provider's Analytics adapter their floors are being applied. They can opt to log only floors that are applied when they are the provider. If floorProvider is supplied in both the top level of the floors object and within the data object, the data object's configuration shall prevail.| - |
-| enforcement | object | Controls the enforcement behavior within the Floors Module.| - |
-| skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will  have access to model version (if defined) when skipped is true to signal the Floors Module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail. | 0 |
-| enforcement.enforceJS | boolean | If set to true, the floors module will provide floors to bid adapters for bid request matched rules and suppress any bids not exceeding a matching floor. If set to false, the prebid floors module will still provide floors for bid adapters, but there will be no floor enforcement.| true |
-| enforcement.enforcePBS | boolean | If set to true, the Prebid.js floors module will signal to Prebid Server to pass floors to it’s bid adapters and enforce floors. If set to false, Prebid.js should still pass matched bid request floor data to Prebid Server, however no enforcement will take place. | false |
+| enforcement | object | Controls the enforcement behavior within the module.| - |
+| skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will  have access to model version (if defined) when skipped is true to signal the module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail. | 0 |
+| enforcement.enforceJS | boolean | If set to true, the module will provide floors to bid adapters for bid request matched rules and suppress any bids not exceeding a matching floor. If set to false, the module will still provide floors for bid adapters, but there will be no floor enforcement.| true |
+| enforcement.enforcePBS | boolean | If set to true, the module will signal to Prebid Server to pass floors to it’s bid adapters and enforce floors. If set to false, Prebid.js should still pass matched bid request floor data to Prebid Server, however no enforcement will take place. | false |
 | enforcement.floorDeals | boolean | Enforce floors for deal bid requests. | false |
-| enforcement.bidAdjustment | boolean | If true, the Floors Module will use the bidAdjustment function to adjust the floor per bidder. If false (or no bidAdjustment function is provided), floors will not be adjusted. Note: Setting this parameter to false may have unexpected results, such as signaling a gross floor when expecting net or vice versa. | true |
+| enforcement.bidAdjustment | boolean | If true, the module will use the bidAdjustment function to adjust the floor per bidder. If false (or no bidAdjustment function is provided), floors will not be adjusted. Note: Setting this parameter to false may have unexpected results, such as signaling a gross floor when expecting net or vice versa. | true |
 | endpoint | object | Controls behavior for dynamically retrieving floors.  | - |
 | endpoint.url | string | URL of endpoint to retrieve dynamic floor data.  | - |
-| data | object (required) | Floor data used by the Floors Module to pass floor data to bidders and floor enforcement. | - |
+| data | object (required) | Floor data used by the module to pass floor data to bidders and floor enforcement. | - |
 | data.floorProvider | string | Optional atribute (as of prebid version 4.2) used to signal to the Floor Provider's Analytics adapter their floors are being applied. They can opt to log only floors that are applied when they are the provider. If floorProvider is supplied in both the top level of the floors object and within the data object, the data object's configuration shall prevail.| - |
-| data.currency | string | Currency of floor data. Floors Module will convert currency where necessary. See Currency section for more details. | 'USD' |
-| data.skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will  have access to model version (if defined) when skipped is true to signal the Floors Module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail.| 0 |
-| data.floorsSchemaVersion | string | The Floors Module supports two version of the data schema. Version 1 allows for only one model to be applied in a given data set, whereas Version 2 allows you to sample multiple models selected by supplied weights. If no schema version is provided, the Floors Module will assume version 1 for the sake of backwards compatiblity.| 1 |
+| data.currency | string | Currency of floor data. The module will convert currency where necessary. See Currency section for more details. | 'USD' |
+| data.skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will  have access to model version (if defined) when skipped is true to signal the module is in floors mode. If skipRate is supplied in both the root level of the floors object and within the data object, the skipRate configuration within the data object shall prevail.| 0 |
+| data.floorsSchemaVersion | string | The module supports two version of the data schema. Version 1 allows for only one model to be applied in a given data set, whereas Version 2 allows you to sample multiple models selected by supplied weights. If no schema version is provided, the module will assume version 1 for the sake of backwards compatiblity.| 1 |
 | data.modelTimestamp | int | Epoch timestamp associated with modelVersion. Can be used to track model creation of floor file for post auction analysis.| - |
 | data.modelGroups | array of objects | Array of model objects to be used for A/B sampling multiple models. This field is only used when data.floorsSchemaVersion = 2 | - |
 | data.modelGroups[].currency | string | Currency of floor data. Floor Module will convert currency where necessary. See Currency section for more details. | 'USD' |
-| data.modelGroups[].skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will have access to model version (if defined) when skipped is true to signal the Floors Module is in floors mode. | 0 |
+| data.modelGroups[].skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will have access to model version (if defined) when skipped is true to signal the module is in floors mode. | 0 |
 | data.modelGroups[].modelVersion | string | Used by floor providers to train on model version performance. The expectation is a floor provider’s analytics adapter will pass the model verson back for algorithm training. | - |
-| data.modelGroups[].modelWeight | integer | Used by the Floors Module to determine when to apply the specific model. All weights will be normalized and appllied at runtime. Futher clarification will be provided in examples below. | - |
+| data.modelGroups[].modelWeight | integer | Used by the module to determine when to apply the specific model. All weights will be normalized and applied at runtime. Futher clarification will be provided in examples below. | - |
 | data.schema | object | Allows for flexible definition of how floor data is formatted. | - |
 | data.modelGroups[].schema.delimiter | string | Character separating the floor keys. | '\|' |
 | data.modelGroups[].schema.fields | array of strings | Supported pre-defined values are: gptSlot, adUnitCode, mediaType, size | - |
@@ -370,65 +370,70 @@ While some attributes are common in both schema versions, for completeness, all
 Model weights add up to 100 and are sampled at a 25%, 25%, 50% distribution. Additionally, each model group has diffirent schema fields:
 
 {% highlight js %}
-{
-    "currency": "EU",
-    "skipRate": 20,
-    "floorsSchemaVersion":2,
-    "modelGroups": [
-        {
-            "modelWeight":25,
-            "modelVersion": "Model1",
-            "schema": {
-                "fields": [ "domain", "gptSlot", "mediaType", "size" ]
-            },
-            "values": {
-                "www.publisher.com|/1111/homepage/top-banner|banner|728x90": 1.00,
-                "www.publisher.com|/1111/homepage/top-rect|banner|300x250": 1.20,
-                "www.publisher.com|/1111/homepage/top-rect|banner|300x600": 1.80,
-                ...
-                "www.domain.com|/1111/homepage/top-banner|banner|728x90": 2.11
-                ...
-                "www.publisher.com|*|*|*": 0.80,
-            },
-            "default": 0.75
-        },
-        {
-            "modelWeight": 25,
-            "modelVersion": "Model2",
-            "schema": {
-                "fields": [ "domain", "mediaType", "size" ]
-            },
-            "values": {
-                "www.publisher.com|banner|728x90": 1.00,
-                "www.publisher.com|banner|300x250": 1.20,
-                "www.publisher.com|banner|300x600": 1.80,
-                ...
-                "www.domain.com|banner|728x90": 2.11
-                ...
-                "www.publisher.com|*|*|*": 0.80,
-            },
-            "default": 0.75
-        },
-        {
-            "modelWeight": 50,
-            "modelVersion": "Model3",
-            "schema": {
-                "fields": [ "gptSlot", "mediaType", "size" ]
-            },
-            "values": {
-                "/1111/homepage/top-banner|banner|728x90": 1.00,
-                "/1111/homepage/top-rect|banner|300x250": 1.20,
-                "/1111/homepage/top-rect|banner|300x600": 1.80,
-                ...
-                "/1111/homepage/top-banner|banner|728x90": 2.11
-                ...
-                "*|banner|*": 0.80,
-            },
-            "default": 0.75
-        }
-    ]
-
-}
+pbjs.setConfig({
+    floors: {
+        enforcement: { ... },
+        ...
+        data: {
+	    "currency": "EU",
+	    "skipRate": 20,
+	    "floorsSchemaVersion":2,
+	    "modelGroups": [
+		{
+		    "modelWeight":25,
+		    "modelVersion": "Model1",
+		    "schema": {
+			"fields": [ "domain", "gptSlot", "mediaType", "size" ]
+		    },
+		    "values": {
+			"www.publisher.com|/1111/homepage/top-banner|banner|728x90": 1.00,
+			"www.publisher.com|/1111/homepage/top-rect|banner|300x250": 1.20,
+			"www.publisher.com|/1111/homepage/top-rect|banner|300x600": 1.80,
+			...
+			"www.domain.com|/1111/homepage/top-banner|banner|728x90": 2.11
+			...
+			"www.publisher.com|*|*|*": 0.80,
+		    },
+		    "default": 0.75
+		},
+		{
+		    "modelWeight": 25,
+		    "modelVersion": "Model2",
+		    "schema": {
+			"fields": [ "domain", "mediaType", "size" ]
+		    },
+		    "values": {
+			"www.publisher.com|banner|728x90": 1.00,
+			"www.publisher.com|banner|300x250": 1.20,
+			"www.publisher.com|banner|300x600": 1.80,
+			...
+			"www.domain.com|banner|728x90": 2.11
+			...
+			"www.publisher.com|*|*|*": 0.80,
+		    },
+		    "default": 0.75
+		},
+		{
+		    "modelWeight": 50,
+		    "modelVersion": "Model3",
+		    "schema": {
+			"fields": [ "gptSlot", "mediaType", "size" ]
+		    },
+		    "values": {
+			"/1111/homepage/top-banner|banner|728x90": 1.00,
+			"/1111/homepage/top-rect|banner|300x250": 1.20,
+			"/1111/homepage/top-rect|banner|300x600": 1.80,
+			...
+			"/1111/homepage/top-banner|banner|728x90": 2.11
+			...
+			"*|banner|*": 0.80,
+		    },
+		    "default": 0.75
+		}
+	    ]
+	}
+    }
+});
 {% endhighlight %}
 
 *Example 2*
@@ -439,66 +444,69 @@ model2 = 50  -> 50 / (20 + 50) = 71% of auctions model 2 will be applied
 Additionally skipRate is supplied at model group level where model1 will skip floors 20% of times when model1 is selected, whereas model2 will skip 50% of auctions when model2 is selected.
 
 {% highlight js %}
-{
-    "currency": "EU",
-    "floorsSchemaVersion":2,
-    "modelGroups": [
-        {
-            "modelWeight":25,
-            "skipRate": 20,
-            "modelVersion": "Model1",
-            "schema": {
-                "fields": [ "domain", "gptSlot", "mediaType", "size" ]
-            },
-            "values": {
-                "www.publisher.com|/1111/homepage/top-banner|banner|728x90": 1.00,
-                "www.publisher.com|/1111/homepage/top-rect|banner|300x250": 1.20,
-                "www.publisher.com|/1111/homepage/top-rect|banner|300x600": 1.80,
-                ...
-                "www.domain.com|/1111/homepage/top-banner|banner|728x90": 2.11
-                ...
-                "www.publisher.com|*|*|*": 0.80,
-            },
-            "default": 0.75
-        },
-        {
-            "modelWeight": 50,
-            "skipRate": 50,
-            "modelVersion": "Model2",
-            "schema": {
-                "fields": [ "gptSlot", "mediaType", "size" ]
-            },
-            "values": {
-                "/1111/homepage/top-banner|banner|728x90": 1.00,
-                "/1111/homepage/top-rect|banner|300x250": 1.20,
-                "/1111/homepage/top-rect|banner|300x600": 1.80,
-                ...
-                "/1111/homepage/top-banner|banner|728x90": 2.11
-                ...
-                "*|banner|*": 0.80,
-            },
-            "default": 0.75
-        }
-    ]
-
-}
+pbjs.setConfig({
+    floors: {
+        enforcement: { ... },
+        ...
+        data: {
+	    "currency": "EU",
+	    "floorsSchemaVersion":2,
+	    "modelGroups": [
+		{
+		    "modelWeight":25,
+		    "skipRate": 20,
+		    "modelVersion": "Model1",
+		    "schema": {
+			"fields": [ "domain", "gptSlot", "mediaType", "size" ]
+		    },
+		    "values": {
+			"www.publisher.com|/1111/homepage/top-banner|banner|728x90": 1.00,
+			"www.publisher.com|/1111/homepage/top-rect|banner|300x250": 1.20,
+			"www.publisher.com|/1111/homepage/top-rect|banner|300x600": 1.80,
+			...
+			"www.domain.com|/1111/homepage/top-banner|banner|728x90": 2.11
+			...
+			"www.publisher.com|*|*|*": 0.80,
+		    },
+		    "default": 0.75
+		},
+		{
+		    "modelWeight": 50,
+		    "skipRate": 50,
+		    "modelVersion": "Model2",
+		    "schema": {
+			"fields": [ "gptSlot", "mediaType", "size" ]
+		    },
+		    "values": {
+			"/1111/homepage/top-banner|banner|728x90": 1.00,
+			"/1111/homepage/top-rect|banner|300x250": 1.20,
+			"/1111/homepage/top-rect|banner|300x600": 1.80,
+			...
+			"/1111/homepage/top-banner|banner|728x90": 2.11
+			...
+			"*|banner|*": 0.80,
+		    },
+		    "default": 0.75
+		}
+	    ]
+	}
+    }
+});
 {% endhighlight %}
 
 ## Custom Schema Fields
 
-Custom schema fields are fields the Floors Module does not support out of the box. To use a custom schema field, one needs to perform twp steps:
+Out of the box, the Price Floors Module only supports looking up floors by AdUnit, GPT Slot, MediaType, ad size, and domain. Custom schema fields can be added to support other lookup dimensions. Here are the steps:
 
-1. Create lookup function to give the Floors Module context of the value of custom fields for that given auction
+1. Create a lookup function to give context of the value of custom fields for that given auction
 1. Define, Set and Map Custom Schema Attributes
 
 ### Create Lookup Function
 
-Create a function to allow the Floors Module to understand context of a given auction. In the below example, we must create a lookup function to give the Floors Module what deviceType this auction is. 
-
-Here is an example lookup function:
+Create a function to allow the module to understand context of a given auction. In the below example, a lookup function provides details about what deviceType this auction is for. 
 
+e.g.
 {% highlight js %}
-
   function deviceTypes (bidRequest, bidResponse) {
       //while bidRequest and bidResponse are not required for this function, they are available for custom attribute mapping
       
@@ -517,9 +525,9 @@ Here is an example lookup function:
 
 ### Define, Set and Map Custom Schema Attributes
 
-After defining a lookup function for the given context of the auction, the custom schema field(s) need to be defined in the `floors.schema.fields` array. Once your custom field is defined you can assign rule values in `floors.data.values` derived from said field(s). The last step would be to supply the lookup function(s) that map from each custom field to a value of the context wthin that auction by using the `floors.additionalSchemaFields` attribute as seen below.
+After defining a lookup function for the given context of the auction, the custom schema field(s) need to be defined in the `floors.schema.fields` array. Once your custom field is defined you can assign rule values in `floors.data.values` derived from these field(s). The last step would be to supply the lookup function(s) that map from each custom field to a value of the context wthin that auction by using the `floors.additionalSchemaFields` attribute as seen below.
 
-In the below example, `deviceType` is a custom field not currently supported by default in the Floors Module whose values are one of "mobile", "desktop" or "tablet".
+In the below example, `deviceType` is a custom field not currently supported by default in the Price Floors Module whose values are one of "mobile", "desktop" or "tablet".
 
 {% highlight js %}
 
@@ -554,28 +562,26 @@ In the below example, `deviceType` is a custom field not currently supported by
 {% endhighlight %}
 
 
-
-
 ## Rule Handling
 
 ### Rule Location Priority
 
-As defined in the overview, a Rule Location is where a particular rule is located, either defined in the Ad Unit, within setConfig or via a fetch from the browser (named Dynamic) for fresh rules. It may be possible (rather more than likely) that floor rules can be set in one or more locations for a given Prebid auction (i.e. on requestBids). At auction, the Floors Module will only ever use rules from one Rule Location, decided at run-time. Each auction will be assigned an immutable set of rules from one Rule Location, even if the rules change prior to auction complete.
+As defined in the overview, a Rule Location is where a particular rule is located, either defined in (1) the Ad Unit, (2) within setConfig or (3) via a fetch from the browser. It's likely that floor rules are set in one or more location for a given Prebid auction. During an auction, the Price Floors Module will only ever use rules from one Rule Location, decided at run-time. Each auction will be assigned an immutable set of rules from one Rule Location, even if the rules change prior to auction complete.
 
-The Floors Module will use the below prioritization scheme on determining which Rule Location is selected at run-time:
+The module uses the below prioritization scheme on determining which Rule Location is selected at run-time:
 
-- Dynamic
+- dynamic
 - setConfig
 - adUnit
 
 
 ### Rule Selection Process
 
-The job of the Prebid floors module is to select a matching Prebid floor rule for enforcement \(when a bid adapter bids in the auction\) given the context of each Ad Unit. With the usage of “\*” values in rules definitions \(where “\*” applies when no specific value matches\) multiple Prebid floor rules can match for a given ad unit auction.
+The job of the Price Floors Module is to select a matching floor rule for enforcement given the context of each Ad Unit. With the usage of “\*” values in rules definitions multiple floor rules can match for a given ad unit auction.
 
-The Prebid Floors module algorithm will produce a list of every possible permutation for each ad unit auction based on the defined schema types. The best matching rule for each enforced bid request and getFloor is based on specificity of values \(meaning match an exact value\) weighted from left to right, where the specificity of a value in the left most column would match over a rule with it’s “\*” equivalent if “\*” is supplied.
+The module algorithm will produce a list of every possible permutation for each ad unit auction based on the defined schema types. The best matching rule for each enforced bid request and call to `getFloor()` is based on specificity of values \(meaning match an exact value\) weighted from left to right, where the specificity of a value in the left most column would match over a rule with its “\*” equivalent if “\*” is supplied.
 
-Priority order behavior where “\_” is a specific value, and the “\*” is a catch all
+Priority order behavior where “\_” is a specific value, and the “\*” is a catch-all
 
 Priority order for one column rule sets:  
 
@@ -646,7 +652,7 @@ mediaType = banner
 Size = 300x600  
 Domain context = www.website.com  
 
-The Price Floor Module produces an internal hash table of all possible permutations of “banner”, “300x600”, “www.website.com” and “\*” with the most specific hash values up top, weighting rules priority from left column specific values to right. Each left value will weigh more than the subsequent column’s specific values. The Floors Module attempt to find the matching rule by cycling through each below possible rule (from top to bottom) against the above rule provider data set.
+The Floor module produces an internal hash table of all possible permutations of “banner”, “300x600”, “www.website.com” and “\*” with the most specific hash values up top, weighting rules priority from left column specific values to right. Each left value will weigh more than the subsequent column’s specific values. The module attempts to find the matching rule by cycling through each below possible rule (from top to bottom) against the above rule provider data set.
 
 {% highlight js %}
 {
@@ -845,14 +851,14 @@ As a floor provider, your goal is to provide effective floors, with minimal page
 - Work with publishers on setting appropriate auction delays to retrieve dynamic data  
 - Implement client-side caching (such as max-age headers) whenever possible  
 - Evaluate data freshness vs frequency of new fetches to the CDN to reduce unnecessary calls  
-- Be aware of file sizes returned to the browser, implementing trimmiming algorithms for extremely large data sets  
+- Be aware of file sizes returned to the browser, implementing trimming algorithms for extremely large data sets  
 {% endcapture %}
 {% include /alerts/alert_important.html content=warning_note %}
 
-For Dynamic fetches, the floors module will perform a GET request to the supplied endpoint, that must return valid JSON, formatted like the data object in the “setConfig” Package configuration.
+For Dynamic fetches, the Price Floors Module will perform a GET request to the supplied endpoint, that must return valid JSON, formatted like the data object in the “setConfig” Package configuration.
 
 
-On rule creation, we recommend supplying various rules with catch all \(“\*”\) values with associated floors. This is to accommodate bid adapters who cannot retrieving floors on a per size basis, as well as using various permutations of rules with “\*” values to match auctions that do not have an exact match on a specific rule. Please refer to the Rule Selection Process when determining floors as attribute order and number of “\*”s may have an impact on which rule is selected.
+On rule creation, we recommend supplying various rules with catch-all \(“\*”\) values with associated floors. This is to accommodate bid adapters who cannot retrieve floors on a per size basis, as well as using various permutations of rules with “\*” values to match auctions that do not have an exact match on a specific rule. Please refer to the Rule Selection Process when determining floors as attribute order and number of “\*”s may have an impact on which rule is selected.
 
 #### Example Dynamic fetch
 
@@ -980,31 +986,29 @@ Floors Schema version 2
 
 ### Bid Adapter Interface
 
-The Prebid Floors Module is capable of handling an arbitrarily large set of floor rules of any combination of supported dimensions. To reduce the need for each bid adapter to process each and every rule in the selected rule data set, an encapsulated function (getFloor) was created to allow bid adapters to query the Floors Module for a floor for each mediaType, size and currency the bid adapter needs.
-
-If the price floors module is enabled for a given auction, the Floors Module will add to the bidRequest object the getFloor function. All bid adapters are recommended to call getFloor to retrieve a desired floor. The job of the getFloor function will be to return the floor CPM of a matched rule based on the rule selection process (written out above), using the getFloor inputs.
+The Prebid Floors Module is capable of handling an arbitrarily large set of floor rules of any combination of supported dimensions. To reduce the need for each bid adapter to process each and every rule in the selected rule data set, an encapsulated function (getFloor) was created to allow bid adapters to query the module for a floor for each mediaType, size and currency the bid adapter needs.
 
-Intended changes for bid adapters:
+If the Price Floors Module is enabled for a given auction, it will add the getFloor() function to the bidRequest object. All bid adapters are recommended to call the getFloor() to retrieve a desired floor. The job of this function is to return the floor CPM of a matched rule based on the rule selection process (written out above), using the getFloor() inputs.
 
+Changes for bid adapters:
 
-1. Check for presence of getFloor within the bidRequest obect
-1. If getFloors exists, call getFloor with desired parameters
+1. Check for presence of getFloor() within the bidRequest obect
+1. If getFloor() exists, call it with desired parameters
 1. Parse floor and currency response
 1. Pass floor and / or currency to bid adapter endpoint
 
-getFloor takes in a single object with the following params:
+getFloor() takes in a single object with the following params:
 
 {% highlight js %}
-
-  getFloor({
+ if (typeof bidRequest.getFloor === 'function') {
+   floorInfo = bidRequest.getFloor({
       currency: string,
-      mediaType: string  //Required
+      mediaType: string,
       size : [ w, h] OR "*"
   });
-
+}
 {% endhighlight %}
 
-
 {: .alert.alert-warning :}
 Consider how floors will behave in multi-currency scenarios. A common pitfall is requesting floors without specifying currency, or specifying the wrong currency back to the bid adapter's platform. This may lead to bidders requesting one currency and bidding in an alternate currency.
 
@@ -1012,12 +1016,11 @@ Consider how floors will behave in multi-currency scenarios. A common pitfall is
 {: .table .table-bordered .table-striped }
 | Param | Type | Description | Default |
 |---+---+---+---|
-| bidRequest | object | bidRequest object passed to buildRequests function | none |
-| mediaType | string | The media type within the current bidRequest context to receive a floor from the Floors Module. Floors Module will return best matching floor. Possible values are one of “banner”, “video”, “Native” or "\*" | "banner" |
-| size | Size array or ‘\*’ (required) | The size within the current bidRequest context to receive a floor from the Floors Module. Defaults to ‘\*’Array of size [w, h] for a specific size. If your bid adapter cannot handle size specific floors, use ‘\*’ to retrieve catch all size floor if defined by the publisher or floor provider | "\*" |
+| mediaType | string | The media type within the current bidRequest context to receive a floor from the module. It will return best matching floor. Possible values are one of “banner”, “video”, “Native” or "\*" | "banner" |
+| size | Size array or ‘\*’ (required) | The size within the current bidRequest context to receive a floor from the module. Defaults to ‘\*’Array of size [w, h] for a specific size. If your bid adapter cannot handle size specific floors, use ‘\*’ to retrieve catch-all size floor if defined by the publisher or floor provider | "\*" |
 | currency | String | The desired currency to return the floor in. Please refer to the currency section to understand how currency conversion is applied. If no currency is supplied, the floor module will assume USD. If the Floor Module cannot convert a floor to the supplied currency, bid adapters will be required to handle the supplied floor. | "USD" |
 
-#### getFloor Response
+#### getFloor() Response
 
 {% highlight js %}
 
@@ -1036,9 +1039,9 @@ Or empty object if a floor was not found for a given input
 
 {% endhighlight %}
 
-#### Example getFloor scenarios
+#### Example getFloor() scenarios
 
-Example rules file used for getFloor
+Example rules file used for getFloor()
 
 {% highlight js %}
 
@@ -1061,16 +1064,16 @@ Example rules file used for getFloor
 
 {% endhighlight %}
 
-**Example getFloor 1**
+**Example getFloor() 1**
 
-getFloor for media type Banner for a bid request in the context of the gpt slot “/1111/homepage/top-rect” where the bid adapter does not support floors per size.
+getFloor() for media type Banner for a bid request in GPT slot “/1111/homepage/top-rect” where the bid adapter does not support floors per size.
 
 {% highlight js %}
 
   getFloor({
       currency: 'USD',
       mediatype: ‘banner’,
-      Size: ‘*’
+      size: ‘*’
   });
 {% endhighlight %}
 
@@ -1083,7 +1086,7 @@ getFloor for media type Banner for a bid request in the context of the gpt slot
 }
 {% endhighlight %}
 
-To aid in the accuracy of floor selection when using size ”\*” in getFloor, the Floors Module has built-in smart rule selection when an ad unit in the internal bidRequest to the bid adapters interface has one ad unit type and one size. In the above example, if the ad unit within the bidRequest object has an ad unit type of “banner” with only one size, say “300x250”, the Floors Module will intelligently select the rule with "banner\|300x250" in it, as opposed to the "banner\|\*" rule producing the following response:
+To aid in the accuracy of floor selection when using size ”\*” in getFloor(), the Price Floors Module has built-in smart rule selection when an ad unit in the internal bidRequest to the bid adapters interface has one ad unit type and one size. In the above example, if the ad unit within the bidRequest object has an ad unit type of “banner” with only one size, say “300x250”, the module will intelligently select the rule with "banner\|300x250" in it, as opposed to the "banner\|\*" rule producing the following response:
 
 {% highlight js %}
 {
@@ -1093,9 +1096,9 @@ To aid in the accuracy of floor selection when using size ”\*” in getFloor,
 {% endhighlight %}
 
 
-**Example getFloor 2**
+**Example getFloor() 2**
 
-getFloor for media type Banner for a bid requests in the context of the gpt slot “/1111/homepage/top-rect” with size of 300x600 where bid adapter does support floors per size.
+getFloor() for media type Banner for a bid requests in GPT slot “/1111/homepage/top-rect” with size of 300x600 where bid adapter does support floors per size.
 
 {% highlight js %}
 getFloor({
@@ -1114,7 +1117,7 @@ getFloor({
 }
 {% endhighlight %}
 
-Here are some examples of how a bid adapter may wish to configure their adapter to handle getFloor function:
+Here are some examples of how a bid adapter may wish to configure their adapter to handle getFloor() function:
 
 For a bid adapter who does not wish to handle making a request for each size in a given bid request they can leverage the \* attribute which is meant to be a skewed average for a floor.
 
@@ -1131,23 +1134,23 @@ For a bid adapter who does not wish to handle making a request for each size in
 
 ### Analytics Adapter Interface
 
-Price Floors providers will most likely rely heavily on their associated (or their partner’s) prebid analytics adapter in order to make the most informed and optimal price floor rule sets. Because of this, the price floors module needs to relay important information about the flooring and decisions made in the lifecycle of an auction.
+Floor providers rely on an analytics adapter in order to make the most informed and optimal price floor rule sets. Because of this, the Price Floors Module needs to relay important information about the flooring and decisions made in the lifecycle of an auction.
 
-The price floors module will do this by leveraging the already existing implementation for prebid analytics adapters by exposing floorData information onto the bidRequest and bidResponse objects. Thus, when an analytics adapter hooks into these prebid events, it will be able to pick out the price floors data and pass it along to their servers.
+The module will do this by leveraging the already-existing implementation for analytics adapters by exposing floorData information onto the bidRequest and bidResponse objects. Thus, when an analytics adapter hooks into these objects, it will be able to pick out the price floors data and pass it along to their servers.
 
 **bidRequest**: Bid Requests objects are updated to contain some basic top level information which a floor provider may need:
 
 {: .table .table-bordered .table-striped }
 | bidRequest.floorData. | Type | Description | example |
 |---+---+---+---+---|
-| fetchStatus | String | Provides details on the status of a fetch for a JSON floors file when fetches are attempted. Valid values are: 'success' (when fetch returns an http 200 status), 'timeout' (when fetch results not returned before either auction delay or prebid timeout) or 'error' (any http status other than 200 or other error condition). To determine if fetch succeeds but returns invalid floors data, refer to the location field to infer invalid data if 'fetch' is not resultant value. | ‘success’ |
-| floorMin | float | The mimimum CPM floor used by the Floors Module (as of 4.13). The Floors Module will take the greater of floorMin and the matched rule CPM when evaluating getFloor() and enforcing floors. | 0.10 |
+| fetchStatus | String | Provides details on the status of a fetch for a JSON floors file when fetches are attempted. Valid values are: 'success' (when fetch returns an http 200 status), 'timeout' (when fetch results not returned before either auction delay or prebid timeout) or 'error' (any http status other than 200 or other error condition). Note: if data is received successfully, but isn't valid upon parsing, fetchStatus will be 'success', but the `location` field (below) will have a value other than 'fetch' because the system will fall back to another source. | ‘success’ |
+| floorMin | float | The mimimum CPM floor used by the module (as of 4.13). The module will take the greater of floorMin and the matched rule CPM when evaluating getFloor() and enforcing floors. Note that the currency of this floor is the same as bidResponse.floorData.floorCurrency. | 0.10 |
 | floorProvider | string | Optional atribute (as of prebid version 4.1) used to signal to the Floor Provider's Analytics adapter their floors are being applied. They can opt to log only floors that are applied when they are the provider. If floorProvider is supplied in both the top level of the floors object and within the data object, the data object's configuration shall prevail.| "rubicon" |
-| location | String | Where the Floors Module derived the rule set. Values are one of 'adUnit', 'setConfig', 'fetch' or 'noData'. If the Floors Module code is invoked and no floors object is able to be found (either by error or other condition) the floorsModule will set  location to 'noData'. When on data is found, it is up to the analtyics adapter to decide what to log. All available values will be provided in teh bidRequest object. | ‘fetch’ |
+| location | String | Where the module derived the rule set. Values are one of 'adUnit', 'setConfig', 'fetch' or 'noData'. If the module code is invoked and no floors object is able to be found (either by error or other condition) the floorsModule will set  location to 'noData'. When on data is found, it is up to the analtyics adapter to decide what to log. All available values will be provided in the bidRequest object. | ‘fetch’ |
 | modelVersion | String | The name of the model| ‘floor-model-4.3’ |
 | modelWeight | integer | The weight of the model selected (for schema 2 version only)| 50 |
 | modelTimestamp | integer | Epoch timestamp associated with the modelVersion to be used for post auction analysis.| 1607126814 |
-| skipRate | integer | skipRate will be populated when a skip rate is configured in the Prebid Floors Module, even if the skipRate is evaluated to false. Skip Rate is used to determine when to skip all floors logic.  | 15 |
+| skipRate | integer | skipRate will be populated when a skip rate is configured in the module, even if the skipRate is evaluated to false. Skip Rate is used to determine when to skip all floors logic.  | 15 |
 | skipped | Boolean | Whether the skipRate resolved to be true or false| true |
 
 **bidResponse**: When a bid response is being processed it is important for analytics adapters to know the decision which was made and the context of the rule selection. Here is the data which is attached to each bidResponse:
@@ -1165,28 +1168,29 @@ The price floors module will do this by leveraging the already existing implemen
 
 ### Prebid Server Interface
 
-Not supported in initial build. S2S config support will be coming in the subsequent release.
+The PrebidServerBidAdapter calls `getFloor()` like any other bid adapter
+and passes it to the server side as imp.bidfloor and imp.bidfloorcur.
 
 
 ## Currency
 
-The floors module will default the floor CPM currency  with any associated rule to USD if none is supplied in the data object of the floors configuration. For any non-USD currency support, a publisher is required to specify the desired currency. If you are working with a floor provider, please speak to them about supplying the desired currency for your integration.
+The Price Floors Module defaults the floor currency to USD if none is supplied in the data object of the floors configuration. For any non-USD currency support, a publisher is required to specify the desired currency. If you are working with a floor provider, please speak to them about supplying the desired currency for your integration.
 
 {% capture warning_note %}
-For publishers seeking to perform currency conversions within the floors module (for example if the floors data currency is not the same as a bid adapter’s supported currency), failure to include the currency module may result in unexpected behavior and / or may impact revenue performance.
+For publishers requiring currency conversions (for example if the floors data currency is not the same as a bid adapter’s supported currency), **failure to include the currency module may result in unexpected behavior** and / or may impact revenue performance.
 {% endcapture %}
 {% include /alerts/alert_warning.html content=warning_note %}
 
 Currency conversion can occur in two areas of the Floor Module code:
-- On the **getFloor** call when Bid Adapters request a floor
+- On the **getFloor()** call when Bid Adapters request a floor
 - On the **enforcement** side when each bidder submits a bidResponse
 
 
-**getFloor**
+**Currency and getFloor()**
 
-The job of the getFloor method is to retrieve an appropriate floor for the requesting Bid Adapter, for a given auction context. If a Bid Adapter performs a getFloor call with a currency different than the currency of the floor data, the Floors Module will attempt to perform a currency conversion, utilizing the convertCurrency function in the global Prebid object.
+The job of the getFloor() function is to retrieve an appropriate floor for the requesting Bid Adapter, for a given auction context. If a Bid Adapter performs a getFloor() call with a currency different than the currency of the floor data, the module will attempt to perform a currency conversion, utilizing the convertCurrency function in the global Prebid object.
 
-If a currency conversion is successful in getFloor, the resulting floor will be returned to the requesting Bid Adapter. If the conversion failed, the Floors Module will return the original floor currency defined within the selected rule location data set.
+If a currency conversion is successful in getFloor(), the resulting floor will be returned to the requesting Bid Adapter. If the conversion failed, the module will return the original floor currency defined within the selected rule location data set.
 
 Example Rule:
 currency = ‘USD’,
@@ -1209,7 +1213,7 @@ If successfully returned the requested currency:
 }
 {% endhighlight %}
 
-If unsuccessfully returned the requested currency:
+If currency conversion is unsuccessful:
 
 {% highlight js %}
 {
@@ -1228,9 +1232,9 @@ Currency conversion can fail for the following reasons:
 - Bidder passes in a currency code which does not have a conversion rate
 - Floors was set with a currency which does not have a conversion rate
 
-**Enforcement**
+**Currency and Floor Enforcement**
 
-Enforcement in the Floors module occurs when bidders respond (i.e. bid) with a bidResponse object into the Prebid auction. The Floors Module will read the bid submitted within each valid bidResponse and its associated currency, performing currency conversion where necessary.
+Enforcement in the Price Floors Module occurs when bidders respond with a bidResponse object into the Prebid auction. The module reads the bid submitted within each valid bidResponse and its associated currency, performing currency conversion where necessary.
 
 There exist three locations where currencies can differ within enforcement:
 
@@ -1238,14 +1242,14 @@ There exist three locations where currencies can differ within enforcement:
 - Price Floor Currency: Currency set in the price floors data object
 - bidResponse Currency: The currency the bidder returned with their bidResponse back to Prebid
 
-When a bid adapter submits a bid into the auction, the currency module will first determine if any conversion logic is necessary, afterwhich the bid is passed to the Floors Module. If currency conversion occurs at this stage, the bidResponse object will have the following attributes:
+When a bid adapter submits a bid into the auction, the currency module will first determine if any conversion logic is necessary, afterwhich the bid is passed to the module. If currency conversion occurs at this stage, the bidResponse object will have the following attributes:
 
 - Cpm: The adServerCurrency converted CPM currency
 - Currency: The currency the adServerCurrency was set in
 - originalCpm: The original CPM the bidder responded with
 - originalCurrency: The original currency the bidder responded with
 
-Below is a chart explaining the behavior of currency conversion, if necessary, within the Floors Module when comparing bid CPM to floor CPM for enforcement:
+Below is a chart explaining the behavior of currency conversion, if necessary, within the module when comparing bid CPM to floor CPM for enforcement:
 
 {: .table .table-bordered .table-striped }
 | bid.currency | bid.originalCurrency | floor.currency | result |
@@ -1265,6 +1269,7 @@ If the currency function is unable to derive the correct cpm in any of the scena
 
 {: .table  }
 | Partner | Contact | About |
-| <img src="/assets/images/partners/leader/Magnite_logo.png" style="height:50px;"> | Contact Magnite (Formerly Rubicon Project) support at [globalsupport@mangite.com](mailto:globalsupport@magnite.com) to use Magnite as a floor provider. | |
-| pubx.ai | Reach out to PubX at [hello@pubx.ai](mailto:hello@pubx.ai) to learn more about our AI-powered dynamic floor optimization. | |
-| Assertive Yield | [assertiveyield.com] | Holistic flooring covering Prebid, Amazon, GAM UPR, RTB and more |
+| <img src="/assets/images/partners/leader/Magnite_logo.png" style="height:50px;"> | [globalsupport@magnite.com](mailto:globalsupport@magnite.com) | Magnite data-science applied to dynamic floors 
+| pubx.ai | [hello@pubx.ai](mailto:hello@pubx.ai) | AI-powered dynamic floor optimization |
+| Assertive Yield | [assertiveyield.com](https://assertiveyield.com) | Holistic flooring covering Prebid, Amazon, GAM UPR, RTB and more |
+| OpenX | Reach out to OpenX at [apollo@openx.com] | Dynamic floor optimization and more |
diff --git a/dev-docs/modules/freewheel.md b/dev-docs/modules/freewheel.md
index 24cba9286f..2aa357c750 100644
--- a/dev-docs/modules/freewheel.md
+++ b/dev-docs/modules/freewheel.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Module - Freewheel
-description: Returns targeting key/value pairs for adpod mediaType adUnits.
+description: Passes key value targeting to Freewheel SDK for adpod mediaType adUnits.
 module_code : freeWheelAdserverVideo
-display_name : Freewheel
+display_name : Freewheel Video Support
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/gdprEnforcement.md b/dev-docs/modules/gdprEnforcement.md
index 03acfeb352..2afd260ac9 100644
--- a/dev-docs/modules/gdprEnforcement.md
+++ b/dev-docs/modules/gdprEnforcement.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: GDPR Enforcement Module
-description: Module to enforce GDPR consent
+description: If you have users in Europe, you'll want this module that enforces GDPR consent
 module_code : gdprEnforcement
 display_name : GDPR Enforcement
 enable_download : true
+recommended: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/geoedgeRtdProvider.md b/dev-docs/modules/geoedgeRtdProvider.md
index a9c4367cef..42113e0086 100644
--- a/dev-docs/modules/geoedgeRtdProvider.md
+++ b/dev-docs/modules/geoedgeRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : geoedgeRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/gpt-pre-auction.md b/dev-docs/modules/gpt-pre-auction.md
index a701cc8796..504b648e59 100644
--- a/dev-docs/modules/gpt-pre-auction.md
+++ b/dev-docs/modules/gpt-pre-auction.md
@@ -2,10 +2,12 @@
 layout: page_v2
 page_type: module
 title: Module - GPT Pre-Auction
-description: Adds PB Ad Slot and matching GAM ad unit name to each ad unit's first-party data before bid requests are sent to the adapters
+description: If you run GAM, this module generates the 'global placement id' that's becoming required for successful auctions.
 module_code : gptPreAuction
 display_name : GPT Pre-Auction
 enable_download : true
+recommended: true
+vendor_specific: true
 sidebarType : 1
 ---
 
@@ -22,9 +24,9 @@ This module enables targeting and tracking at the ad server adunit level.
 Enabled by default if compiled into your package, this module will add the [Prebid Ad Slot](/features/pbAdSlot.html) and matching GAM ad unit name to each ad unit's first-party data before bid requests are sent to the adapters.
 
 * **Prebid.js Adapters** - will be able to utilize these values as:
-    * AdUnit.ortb2imp.ext.data.adserver.name="gam"
-    * AdUnit.ortb2imp.ext.data.adserver.adslot="/1111/home"
-    * AdUnit.ortb2imp.ext.data.pbadslot="/1111/home-left"
+    * AdUnit.ortb2Imp.ext.data.adserver.name="gam"
+    * AdUnit.ortb2Imp.ext.data.adserver.adslot="/1111/home"
+    * AdUnit.ortb2Imp.ext.data.pbadslot="/1111/home-left"
 * **Prebid Server Adapters** - will see the OpenRTB as:
     * imp[].ext.data.adserver.name
     * imp[].ext.data.adserver.adslot
@@ -38,10 +40,14 @@ into the Prebid.js package.
 
 Optional initialization parameters:
 
-- enabled (on by default)
-- customGptSlotMatching function
-- customPbAdSlot function
+{: .table .table-bordered .table-striped }
+| Param | Required? | Type | Description | Example |
+| enabled | no | boolean | allows turning off of module. Default value is true | true |
+| customGptSlotMatching | no | function | GPT slot matching function should match the customSlotMatching function sent to [setTargetingForGptAsync](/dev-docs/publisher-api-reference/setTargetingForGPTAsync.html) | |
+| customPbAdSlot | no | function | Custom PB AdSlot function | |
+| mcmEnabled | no | boolean | Removes extra network IDs when Multiple Customer Management is active. Default is false. | true |
 
+For example:
 ```
 pbjs.setConfig({
     gptPreAuction: {
@@ -53,7 +59,8 @@ pbjs.setConfig({
 	customGptSlotMatching: function(gptSlotObj) {
 		...
 		return true; // or false
-	}
+	},
+	mcmEnabled: true
     }
 });
 ```
@@ -67,13 +74,13 @@ When this module is on, it uses the BEFORE_REQUEST_BIDS event to insert function
 
 If GPT slot matching succeeds:
 
-- it sets the Adunit ortb2imp.ext.data.adserver.name to 'gam'
-- it copies the resulting GPT slot name to ortb2imp.ext.data.adserver.adslot
+- it sets the Adunit ortb2Imp.ext.data.adserver.name to 'gam'
+- it copies the resulting GPT slot name to ortb2Imp.ext.data.adserver.adslot
 
-The customPbAdSlot function is called if it was specified, writing the results to ortb2imp.ext.data.pbadslot.
-If there's no customPbAdSlot, a default algorithm is used to determine ortb2imp.ext.data.pbadslot:
+The customPbAdSlot function is called if it was specified, writing the results to ortb2Imp.ext.data.pbadslot.
+If there's no customPbAdSlot, a default algorithm is used to determine ortb2Imp.ext.data.pbadslot:
 
-- first use the AdUnit's ortb2imp.ext.data.pbadslot if defined
+- first use the AdUnit's ortb2Imp.ext.data.pbadslot if defined
 - else, see if the AdUnit.code corresponds to a div and if so, try to retrieve a data element from the div called data-adslotid.
 - else if the GPT slot matching succeeded, use the GPT slot name
 - else, just use the AdUnit.code, assuming that that's the ad unit slot
diff --git a/dev-docs/modules/haloRtdProvider.md b/dev-docs/modules/haloRtdProvider.md
index 3f36b19946..6e9be1b0d5 100644
--- a/dev-docs/modules/haloRtdProvider.md
+++ b/dev-docs/modules/haloRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : haloRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
@@ -16,21 +17,24 @@ sidebarType : 1
 * TOC
 {:toc}
 
-Audigent is a next-generation data management platform and a first-of-a-kind
-"data agency" containing some of the most exclusive content-consuming audiences
-across desktop, mobile and social platforms.
-
-This real-time data module provides an integrated post-cookie Halo identity and
-real-time user segmentation solution that seamlessly integrates into your bid
-request cycle. Users are identified and bid request objects are augmented
-with first-party data derived segments prior to being sent to exchange/ssp
-services in order to optimize targeting and increase publisher revenue.
-
-Audigent maintains a large database of first-party Tradedesk Unified ID,
-Audigent Halo ID and other id provider mappings to various third-party segment
-types that are utilizable across different backends. With the Halo RTD module,
-these segments and other data can be retrieved and utilized by supporting
-exchange and SSP backends in real-time during your bid request cycle.
+Audigent is a next-generation, first-party data management platform and the
+world’s first "data agency", powering the programmatic landscape and DTC
+eCommerce with actionable first-party audience and contextual data from
+retailers, lifestyle publishers, content creators, athletes and artists.
+
+The Halo real-time data module in Prebid has been built so publishers
+can maximize the power of their first-party audiences and contextual data.
+This module provides both an integrated cookieless Halo identity, contextual 
+targeting and audience segmentation solution that seamlessly and easily
+integrates into your existing Prebid deployment.
+
+Users, devices, content, cohorts and other features are identified and utilized
+to augment every bid request with targeted, first-party data-derived segments
+before being submitted to supply-side platforms. Enriching the bid request with
+robust first-party audience and contextual data, Audigent's Halo RTD module
+helps optimize targeting and header-bidding performance.  For more information, 
+please visit https://audigent.com or contact our Prebid integration team at
+prebid@audigent.com.
 
 
 ## Publisher Usage
diff --git a/dev-docs/modules/iabCatagoryTranslation.md b/dev-docs/modules/iabCatagoryTranslation.md
deleted file mode 100644
index 7831fbd198..0000000000
--- a/dev-docs/modules/iabCatagoryTranslation.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-layout: page_v2
-page_type: module
-title: Module - IAB Category Translation
-description: Converts between ad agency brand categories and IAB brand categories.
-module_code : CategoryTranslation
-display_name : CategoryTranslation
-enable_download : true
-sidebarType : 1
----
-
-# IAB Category Translation
-
-{:.no_toc}
-
-This module converts the IAB sub category to FreeWheel industry group identifiers. The FreeWheel identifiers ensure competitve separation of industries and products. 
-
-Each bid request must return one [IAB subcategory](https://support.aerserv.com/hc/en-us/articles/207148516-List-of-IAB-Categories).
-
-The module provides the following: 
-
-- Converts IAB subcategories to a FreewWheel industry group identifier.
-
-## How to use the module:
-
-1. A Prebid.js package is built that contains this module and the [FreeWheel](/dev-docs/modules/freewheel.html) module.  
-2. The inclusion of this module causes Prebid to download a mapping file to local storage. The user also has the option to provide their own mapping file. 
-3. At runtime, brand category translation happens as needed. 
-
-
-## Using A Custom Map File
-The IAB Category Translation module uses a default mapping file to convert adserver categories to IAB sub categories. If a publisher prefers to use their own mapping file they will need to set the URL location of that file. They can do so by adding the following to their Prebid.js configuration: 
-
-```
-pbjs.setConfig({
-    "brandCategoryTranslation": {
-       "translationFile": "<url_to_file>"
-    }
-});
-```
-
-This file will be stored locally to expedite the conversion process. If a publisher opts to not provide a conversion mapping file Prebid will use its default conversion mapping file. 
-
-Publishers should ensure that the JSON returned from their custom file is valid for Prebid by adhering to the following structure: 
-
-```JSON
-{
-    “mapping”: {
-        “<your-iab-sub-category>“: {
-            “id”: “<industry/group/category id>“,
-            “name”: “<industry/group/category name>”
-        },
-   ....
-   }
-}
-```
-
-Refer to Prebid Github repository for a [custom file reference](https://github.com/prebid/category-mapping-file).
-
-
-## Further Reading
-
-[Prebid.js](/dev-docs/getting-started.html)   
-[Prebid Video](/prebid-video/video-overview.html)  
-[FreeWheel Module](/dev-docs/modules/freewheel.html)  
-[Adapter Integration](/dev-docs/bidder-adaptor.html)
-
-
-
-
-
-
-
diff --git a/dev-docs/modules/iasRtdProvider.md b/dev-docs/modules/iasRtdProvider.md
index b1585553a1..99dae5c16a 100644
--- a/dev-docs/modules/iasRtdProvider.md
+++ b/dev-docs/modules/iasRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : iasRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/idLibrary.md b/dev-docs/modules/idLibrary.md
index 306b877158..5874353f8e 100644
--- a/dev-docs/modules/idLibrary.md
+++ b/dev-docs/modules/idLibrary.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: ID Import Library
-description: ID Graphing Adapter
+description: Retrieve user ids deployed on your site, and return them to a configurable endpoint for ID Graphing.
 module_code : currency
 display_name : ID Import Library
 enable_download : true
diff --git a/dev-docs/modules/index.md b/dev-docs/modules/index.md
index 7721060433..4b62546f54 100644
--- a/dev-docs/modules/index.md
+++ b/dev-docs/modules/index.md
@@ -1,6 +1,6 @@
 ---
 layout: page_v2
-title: Prebid Modules
+title: Prebid.js Modules
 description: Module Documentation
 sidebarType: 1
 ---
@@ -8,94 +8,89 @@ sidebarType: 1
 # Prebid.js Module Overview
 {:.no_toc}
 
-The core of Prebid.js contains only the foundational code needed for header bidding. Any functionality that could be considered an add-on or that covers a special case is being moved out into modules.  Examples of this kind of code include:
+The core of Prebid.js contains only the foundational code needed for header bidding. Any functionality that could be considered an add-on is part of a module. These are the major categories:
 
-- Bidder adapters
-- Special auction logic
-- Ad server API integrations
-- Any other extensible functionality
-
-This section of the site contains user-submitted module documentation.  We're hoping that it will grow over time.
-
-To see all of the modules that are available, see the [`modules` folder in the repo](https://github.com/prebid/Prebid.js/tree/master/modules).
-
-If you are looking for bidder adapter parameters, see [Bidders' Params]({{site.baseurl}}/dev-docs/bidders.html).
+- [Bidder adapters](/dev-docs/bidders.html)
+- [Analytics adapters](/overview/analytics.html)
+- Any other extensible functionality - documented on this page
 
 * TOC
 {:toc}
 
-## General Modules
-
-{: .table .table-bordered .table-striped }
-| Module              | Description  |
-|---------------------+--------------|
-| [**Currency**](/dev-docs/modules/currency.html) | Converts bid currency into ad server currency based on data in a supplied exchange rate file. |
-| **ConsentManagement** | Collecting and passing consent information in support of privacy regulations:{::nomarkdown}<ul><li><a href="/dev-docs/modules/consentManagement.html">EU GDPR</a> with optional <a href="/dev-docs/modules/gdprEnforcement.html">GDPR Enforcement</a> module</li><li><a href="/dev-docs/modules/consentManagementUsp.html">US Privacy</a> (CCPA)</li></ul>{:/} See [CMP Best Practices.](/dev-docs/cmp-best-practices.html) |
-| [**Google Ad Manager Express**](/dev-docs/modules/dfp_express.html) | A simplified installation mechanism for publishers that have Google Publisher Tag (GPT) ad calls in their pages. |
-| [**Supply Chain Object**](/dev-docs/modules/schain.html) | Validates and makes the Supply Object available to bidders |
-| [**User ID**](/dev-docs/modules/userId.html) | Sub-modules are available to support a range of identification approaches. |
-| [**ID Import Library**](/dev-docs/modules/idLibrary.html) | Retrieve user ids deployed on your site, and return them to a configurable endpoint for ID Graphing |  
-| [**Advanced Size Mapping**](/dev-docs/modules/sizeMappingV2.html) | Display Responsive AdUnits in demanding page environments. |
-| [**Price Floors Module**](/dev-docs/modules/floors.html) | Configure and enforce minimum bids. |
-| [**GPT Pre-Auction Module**](/dev-docs/modules/gpt-pre-auction.html) | Adds a PB Ad Slot and matching GAM ad unit name to each ad unit's first-party data before bid requests are sent to the adapters. |
-| [**ID Import Library**](/dev-docs/modules/idLibrary.html) | Retrieve user ids deployed on your site, and return them to a configurable endpoint for ID Graphing |  
-| [**First Party Data Enrichment**](/dev-docs/modules/enrichmentFpdModule.html) | Pulls well-known FPD from the environment to form a base of data available to all adapters. |
-| [**MASS**](/dev-docs/modules/mass.html) | Enables the MASS protocol for Prebid and custom renderers by DealID |  
-| [**MultiBid Module**](/dev-docs/modules/multibid.html) | Allows bidders to send multiple bids to the ad server. |
-| [**Bid Viewability**](/dev-docs/modules/bidViewable.html) | Triggers an event which can be consumed by analytics and bid adapters. |
+{% assign module_pages = site.pages | where: "page_type", "module" %}
 
-## Real-Time Data Providers
+## Recommended Modules
 
-All of the modules that fall under the Real-Time Data (RTD) category conform to
-a consistent set of publisher controls. The pub can choose to run multiple
-RTD modules, define an overall amount of time they're willing to wait for
-results, and even flag some of the modules as being more "important"
-than others.
+Prebid.org highly recommends that publishers utilize the following modules:
+<br/>
+<table class="table table-bordered table-striped">
+  <thead>
+    <tr>
+      <th>Module</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+{% for page in module_pages %}{% if page.recommended == true %}
+    <tr>
+      <td><a href="{{page.url}}"><strong>{{page.display_name}}</strong></a></td>
+      <td>{{page.description}}</td>
+    </tr>
+{% endif %}{% endfor %}
+</tbody>
+</table>
 
-See [the realTimeData setConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-realTimeData) reference for more details.
+## General Modules
 
-{% assign module_pages = site.pages | where: "page_type", "module" | where: "module_type", "rtd" %}
+Modules in the Real-Time Data (RTD) category conform to
+a consistent set of publisher controls. The publisher can choose to run multiple
+RTD modules, define an overall amount of time they're willing to wait for
+results, and even flag some of the modules as being higher priority
+than others. See [the realTimeData setConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-realTimeData) reference for more details.
 
 <table class="table table-bordered table-striped">
   <thead>
     <tr>
       <th>Module</th>
       <th>Description</th>
+      <th>RTD?</th>
     </tr>
   </thead>
   <tbody>
-{% for page in module_pages %}
-  {% if page.enable_download == false %}{% continue %}{% endif %}
+{% for page in module_pages %}{% if page.recommended == true or page.vendor_specific == true %}{% continue %}{% endif %}
     <tr>
-      <td><a href="/dev-docs/modules/{{page.module_code}}.html"><strong>{{page.title}}</strong></a></td>
+      <td><a href="{{page.url}}"><strong>{{page.display_name}}</strong></a></td>
       <td>{{page.description}}</td>
+      {% if page.module_type == "rtd" %}<td>yes</td>{% else %}<td>no</td>{% endif %}
     </tr>
 {% endfor %}
 </tbody>
 </table>
 
-## Video Modules
-
-{: .table .table-bordered .table-striped }
-| Module              | Description  |
-|---------------------+--------------|
-| [**Ad Pod**](/dev-docs/modules/adpod.html) | Enables developers to add support for a new adserver that handles ad pod (long-form) videos |
-| [**Freewheel**](/dev-docs/modules/freewheel.html) | Passes key value targeting to Freewheel SDK |
-| [**Google Ad Manager Video**](/dev-docs/modules/dfp_video.html) | Required for serving instream video through Google Ad Manager. |
-| [**IAB Category Translation**](/dev-docs/modules/categoryTranslation.html) | Converts IAB sub category to Ad server category for long-form videos. |
-| [**Instream Video Ads Tracking**](/dev-docs/modules/instreamTracking.html) | Allow Analytics Adapters and Bid Adapters to track `BID_WON` events for Instream video bids. |
-| [**Konduit Accelerate**](/dev-docs/modules/konduit.html) | Provides Real Time Start Rate Performance per Bidder. |
-
-## Testing and Debug Modules
-
-{: .table .table-bordered .table-striped }
-| Module              | Description  |
-|---------------------+--------------|
-| [**Server-to-Server Testing**](/dev-docs/modules/s2sTesting.html) | Adds A/B test support to ease into server-side header bidding. |
-| [**First Party Data Validation**](/dev-docs/modules/validationFpdModule.html) | Verify First Party Data ortb2 fields and data types. |
+## Vendor-Specific Modules
+These modules may require accounts with a service provider.
+<table class="table table-bordered table-striped">
+  <thead>
+    <tr>
+      <th>Module</th>
+      <th>Description</th>
+      <th>RTD?</th>
+    </tr>
+  </thead>
+  <tbody>
+{% for page in module_pages %}{% if page.recommended == true %}{% continue %}{% endif %}{% if page.vendor_specific == true %}
+    <tr>
+      <td><a href="{{page.url}}"><strong>{{page.display_name}}</strong></a></td>
+      <td>{{page.description}}</td>
+      {% if page.module_type == "rtd" %}<td>yes</td>{% else %}<td>no</td>{% endif %}
+    </tr>
+{% endif %}{% endfor %}
+</tbody>
+</table>
 
 ## Further Reading
 
 + [Source code of all modules](https://github.com/prebid/Prebid.js/tree/master/modules)
-+ [Bidders' Params](/dev-docs/bidders.html)
++ [How to add a Bid Adapter](/dev-docs/bidder-adaptor.html)
++ [How to add an Analytics Adapter](/dev-docs/integrate-with-the-prebid-analytics-api.html)
 + [How to add a Real Time Data Submodule](/dev-docs/add-rtd-submodule.html)
diff --git a/dev-docs/modules/instreamTracking.md b/dev-docs/modules/instreamTracking.md
index 4e3d18255e..1e2c16f128 100644
--- a/dev-docs/modules/instreamTracking.md
+++ b/dev-docs/modules/instreamTracking.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Instream Video Ads Tracking
-description: Allows to track `BID WON` events for instream ad units
+description: Allow Analytics Adapters and Bid Adapters to track `BID_WON` events for instream video bids.
 module_code : instreamTracking
 display_name : Instream Tracking
 enable_download : true
diff --git a/dev-docs/modules/jwplayerRtdProvider.md b/dev-docs/modules/jwplayerRtdProvider.md
index 66b4fc3024..2950e4fceb 100644
--- a/dev-docs/modules/jwplayerRtdProvider.md
+++ b/dev-docs/modules/jwplayerRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : jwplayerRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/konduit.md b/dev-docs/modules/konduit.md
index 7623ae7aa2..f9bb831eea 100644
--- a/dev-docs/modules/konduit.md
+++ b/dev-docs/modules/konduit.md
@@ -2,10 +2,11 @@
 layout: page_v2
 page_type: module
 title: Module - Konduit Accelerate
-description: Applies Konduit video ad acceleration optimization to a provided bid.
+description: Applies Konduit video ad acceleration optimization to wining video bid.
 module_code : konduitWrapper
 display_name : Konduit Accelerate
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
diff --git a/dev-docs/modules/mass.md b/dev-docs/modules/mass.md
index d447773ca3..cdacac886a 100644
--- a/dev-docs/modules/mass.md
+++ b/dev-docs/modules/mass.md
@@ -2,9 +2,9 @@
 layout: page_v2
 page_type: module
 title: Module - MASS
-description: Enable MASS protocol for Prebid
+description: General deal rendering functionality.
 module_code : mass
-display_name : MASS
+display_name : Deal Rendering (aka MASS)
 enable_download : true
 sidebarType : 1
 ---
@@ -139,16 +139,46 @@ pbjs.que.push(function() {
 
 ## Integration Example
 
+There are two options to view the integration example:
+
+### Option 1 - Your own development environment
 To view the integration example:
  
-1) in your cli run:
+1) Build Prebid using the following required options
+
+```
+gulp build --modules=ixBidAdapter,mass
+```
+
+2) Use a http server with a valid hostname to access its content. It is not advised to run the bid simulation using localhost or 127.0.0.1
 
 ```
-gulp serve --modules=ixBidAdapter,mass
+http://hostname/integrationExamples/mass/index.html
 ```
 
-2) in your browser, navigate to:
+### Option 2 - Hosted online
+Mass Platform Limited hosts an official integration and demo page that can be accessed using the following link: https://demo.massplatform.net/ix/prebid/
+
+## Testing MASS
+Testing requires valid bids to be returned to Prebid. To assist with this process, we recommend you use the MASS Bid Simulation tool found at https://github.com/massplatform/bidsim. Your Exchange partner might be able to assist you with other specialist tools and browser plugins to achieve similar resuls.
 
+The instructions below assume that you have followed the installation instructions for the MASS Bidsim tool found at https://github.com/massplatform/bidsim/blob/master/README.md.
+
+### Testing using MASS compliant tags
+The bidsim tool ships with working DSP example tags that can be found under the bidsim/tags folder.
+
+A quick way to test the Integration test page in combination with the official bootloader is to use the following command:
+```
+node bidsim --inject --bid 2000 --width 300 --height 250 --dealid 'MASS' --tag "tags/inskin-housead-desktop.js" -o https://demo.massplatform.net/ix/prebid
 ```
-http://localhost:9999/integrationExamples/mass/index.html
+### For third-party technology companies
+Third-parties that wish to integrate with the official MASS bootloader can get started by running the following command:
 ```
+node bidsim --inject --bid 2000 --width 300 --height 250 --dealid 'MASS' --tag "tags/test.js" -o https://demo.massplatform.net/ix/prebid
+```
+
+Explanation: The tags/test.js tag calls a reference endpoint for developers that can be accessed here: https://demo.massplatform.net/reference/endpoint.js.
+When running the above command to invoke this reference endpoint, you will see all the params that MASS collected and passed onto your endpoint. This includes inputs, parsed inputs, tag parameters and MASS/Provider specific configurations.
+
+### Testing on live sites
+Any sites that have been MASS configured will work with the Bidsim tool. This is a convenient way to test whether your publisher ad server and slot is correctly configured.
diff --git a/dev-docs/modules/medianetRtdProvider.md b/dev-docs/modules/medianetRtdProvider.md
new file mode 100644
index 0000000000..fac7f1cf1c
--- /dev/null
+++ b/dev-docs/modules/medianetRtdProvider.md
@@ -0,0 +1,116 @@
+---
+layout: page_v2
+title: Media.net Realtime Module
+display_name: Media.net Realtime Module
+description: Delivers added functionality based on configurations, i.e. refresh, viewability, etc.
+page_type: module
+module_type: rtd
+module_code : medianetRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# Media.net Realtime Module
+{:.no_toc}
+
+* TOC 
+{:toc}
+
+## Overview
+
+The module currently provisions Media.net's Intelligent Refresh configured by the publisher.
+
+### Intelligent Refresh
+
+Intelligent Refresh (IR) module lets publisher refresh their ad inventory without affecting page experience of visitors through configured criteria. The module optionally provides tracking of refresh inventory and appropriate targeting in GAM. Publisher configured criteria is fetched via an external JS payload.
+
+{: .alert.alert-warning :}
+Disclosure: This module loads external code that is not open source and has not been reviewed by Prebid.org.
+
+## Configuration
+
+This module is configured as part of the `realTimeData.dataProviders` object.
+
+{: .table .table-bordered .table-striped }
+| Name       | Scope    | Description                            | Example       | Type     |
+|------------|----------|----------------------------------------|---------------|----------|
+| `name `     | required | Real time data module name | `'medianet'`   | `string` |
+| `params`      | required |  | | `Object` |
+| `params.cid`      | required | The customer id is provided by Media.net. | `'8CUX0H51C'` | `string` |
+
+#### Basic Example
+
+```javascript
+pbjs.setConfig({
+    realTimeData: {
+        dataProviders: [{
+            name: 'medianet',
+            params: {
+                cid: '8CUX0H51C'
+            }
+        }]
+    }
+});
+```
+
+## Prebid Adapters module usage
+
+Prebid bidder and analytics adapters can read `adunit.ortb2Imp.ext.refresh` to know the information passed by Intelligent Refresh Real Time Module. Example AdUnit:
+
+```javascript
+var adUnit = {
+  "code": "div-gpt-ad-1460505748561-1",
+  // ...
+  "ortb2Imp": {
+    "ext": {
+      "refresh": {   // added by Intelligent Refresh RTD
+        "mnrf": "1", // mnrf=1 means its a refresh impression
+        "mnrfc": 2   // mrfc=2 means its the 2nd refresh-ed impression
+      },
+      "data": { "pbadslot": "div-gpt-ad-1460505748561-1" },
+    }
+  }
+};
+```
+
+## Targeting sent to GAM
+
+For each prebid adUnit we pass following key values to GAM by default
+
+```javascript
+var targeting = {
+  "slotA":{
+      "mnadc": "slotA",   // used to map GPT slot => Prebid AdUnit
+      "mnrf": "1",        // Refresh Impression Flag
+      "mnrfc": 2          // Refreshed count per slot
+  }
+};
+```
+
+## Integration
+To install the module, follow these instructions:
+
+#### Step 1: Prepare the base Prebid file
+
+- Option 1: Use Prebid [Download](/download.html) page to build the prebid package. Ensure that you do check *Media.net Realtime Module* module
+
+- Option 2: From the command line, run `gulp build --modules=medianetRtdProvider,...`
+
+#### Step 2: Set configuration
+
+Enable Media.net Real Time Module using `pbjs.setConfig`
+
+```javascript
+pbjs.setConfig({
+    realTimeData: {
+        dataProviders: [{
+            name: 'medianet',
+            params: {
+                cid: '8CUX0H51C'
+            }
+        }]
+    }
+});
+```
+
diff --git a/dev-docs/modules/multibid.md b/dev-docs/modules/multibid.md
index 49f04d8786..e9ae46f0cc 100644
--- a/dev-docs/modules/multibid.md
+++ b/dev-docs/modules/multibid.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - MultiBid
-description: Allows bidders to return more than one bid response
+description: Allows bidders to send multiple bids to the ad server.
 module_code : multibid
 display_name : MultiBid
 enable_download : true
diff --git a/dev-docs/modules/optimeraRtdProvider.md b/dev-docs/modules/optimeraRtdProvider.md
index ef52f29cf9..351febd353 100644
--- a/dev-docs/modules/optimeraRtdProvider.md
+++ b/dev-docs/modules/optimeraRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : optimeraRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
@@ -21,9 +22,11 @@ Optimera Real Time Data Module. Provides targeting for ad requests from data col
 1) Compile the Optimera RTD Provider into your Prebid build:
 
 ```
-`gulp build --modules=optimeraRtdProvider`...
+`gulp build --modules=rtdModule,optimeraRtdProvider`...
 ```
 
+Note: You must include rtdModule in the build list.
+
 2) Use `setConfig` to instruct Prebid.js to initialize the optimera module, as specified below.
 
 ## Configuration
@@ -49,6 +52,12 @@ Configuration example for using RTD module with the `optimeraRTD` provider:
     }
 ``` 
 
+## Migration From the Optimera Bidder Adapter
+
+The Optimera Bidder Adapter is no longer active with Prebid 5.0. Therefore, the bidder settings used for the Optimera Bidder Adapter for < Prebid 5.0 can be removed and replaced with this new Optimera RTD module configuration.
+
+For the optimeraKeyName setting, the Optimera Bidder Adapter used 'hb_deal_optimera' as the key name, as this is the key that name used in GAM. There is no need to change this key name in GAM, as you can still use this key name with the Optimera RTD Module as indicated above.
+
 Parameters details:
 
 Contact Optimera to get assistance with the params.
diff --git a/dev-docs/modules/permutiveRtdProvider.md b/dev-docs/modules/permutiveRtdProvider.md
new file mode 100644
index 0000000000..0983fe4d8a
--- /dev/null
+++ b/dev-docs/modules/permutiveRtdProvider.md
@@ -0,0 +1,76 @@
+---
+layout: page_v2
+title: Permutive Real Time Data Provider
+display_name: Permutive Real Time Data Module
+description: Permutive Real Time Data Module
+page_type: module
+module_type: rtd
+module_code : permutiveRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# Permutive RTD Provider
+{:.no_toc}
+
+* TOC
+{:toc}
+
+## Overview
+This module reads cohorts from Permutive and attaches them as targeting keys to bid requests.
+
+## Usage
+Compile the Permutive RTD module into your Prebid build:
+```
+gulp build --modules=rtdModule,permutiveRtdProvider
+```
+
+> Note that the global RTD module, `rtdModule`, is a prerequisite of the Permutive RTD module.
+
+You then need to enable the Permutive RTD in your Prebid configuration, using the below format:
+
+```javascript
+pbjs.setConfig({
+  ...,
+  realTimeData: {
+    auctionDelay: 50, // optional auction delay
+    dataProviders: [{
+      name: 'permutive',
+      waitForIt: true, // should be true if there's an `auctionDelay`
+      params: {
+        acBidders: ['appnexus']
+      }
+    }]
+  },
+  ...
+})
+```
+
+## Supported Bidders
+The Permutive RTD module sets Audience Connector cohorts as bidder-specific `ortb2.user.data` first-party data, following the Prebid `ortb2` convention, for any bidder included in `acBidders`. The module also supports bidder-specific data locations per ad unit (custom parameters) for the below bidders:
+
+{: .table .table-bordered .table-striped }
+| Bidder      | ID         | Custom Cohorts       | Audience Connector |
+| ----------- | ---------- | -------------------- | ------------------ |
+| Xandr       | `appnexus` | Yes                  | Yes                |
+| Magnite     | `rubicon`  | Yes                  | No                 |
+| Ozone       | `ozone`    | No                   | Yes                |
+
+Key-values details for custom parameters:
+* **Custom Cohorts:** The module configuration will automatically reflect the SSP integrations (_Activations_) you have enabled in your Permutive dashboard. Any additional bidders you want to pass data to will need to be configured. Permutive cohorts will be sent in the permutive key-value.
+
+* **Audience Connector:** You'll need to define which bidders should receive Audience Connector cohorts. You need to include the `ID` of any bidder in the `acBidders` array. Audience Connector cohorts will be sent in the `p_standard` key-value.
+
+
+## Parameters
+
+{: .table .table-bordered .table-striped }
+| Name              | Type                 | Description        | Default        |
+| ----------------- | -------------------- | ------------------ | ------------------ |
+| name              | String               | This should always be `permutive` | - |
+| waitForIt         | Boolean              | Should be `true` if there's an `auctionDelay` defined (optional) | `false` |
+| params            | Object               |                 | - |
+| params.acBidders  | String[]             | An array of bidders which should receive Audience Connector cohorts. | `[]` |
+| params.maxSegs    | Integer              | Maximum number of cohorts to be included in either the `permutive` or `p_standard` key-value. | `500` |
+
diff --git a/dev-docs/modules/pubCommonId.md b/dev-docs/modules/pubCommonId.md
index 7e42c44ade..455e89bb38 100644
--- a/dev-docs/modules/pubCommonId.md
+++ b/dev-docs/modules/pubCommonId.md
@@ -4,7 +4,7 @@ page_type: module
 title: Module - Publisher Common ID
 description: User ID persisted in first party domain
 module_code : pubCommonId
-display_name : Publisher Common ID
+display_name : Publisher Common ID (deprecated)
 enable_download : true
 sidebarType : 1
 ---
diff --git a/dev-docs/modules/reconciliationRtdProvider.md b/dev-docs/modules/reconciliationRtdProvider.md
index da9da39642..47ff52d92e 100644
--- a/dev-docs/modules/reconciliationRtdProvider.md
+++ b/dev-docs/modules/reconciliationRtdProvider.md
@@ -5,8 +5,9 @@ description: Reconciliation Real Time Data Module
 page_type: module
 module_type: rtd
 module_code: reconciliationRtdProvider
-display_name: Reconciliation
+display_name: Reconciliation Supply Chain Validation
 enable_download: true
+vendor_specific: true
 sidebarType: 1
 ---
 
diff --git a/dev-docs/modules/schain.md b/dev-docs/modules/schain.md
index 77934e227c..4534f4840b 100644
--- a/dev-docs/modules/schain.md
+++ b/dev-docs/modules/schain.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Supply Chain Object
-description: Validates Supply Chain object and makes it available to bidder
+description: Validates the Supply Chain object and makes it available to bidders.
 module_code : schain
 display_name : Supply Chain Object
 enable_download : true
diff --git a/dev-docs/modules/sirdataRtdProvider.md b/dev-docs/modules/sirdataRtdProvider.md
index 419c8f0876..68a07237f2 100644
--- a/dev-docs/modules/sirdataRtdProvider.md
+++ b/dev-docs/modules/sirdataRtdProvider.md
@@ -7,6 +7,7 @@ page_type: module
 module_type: rtd
 module_code : sirdataRtdProvider
 enable_download : true
+vendor_specific: true
 sidebarType : 1
 ---
 
@@ -195,4 +196,4 @@ To view an example of available segments returned by Sirdata's backends:
 
 and then point your browser at:
 
-`http://localhost:9999/integrationExamples/gpt/sirdataRtdProvider_example.html`
\ No newline at end of file
+`http://localhost:9999/integrationExamples/gpt/sirdataRtdProvider_example.html`
diff --git a/dev-docs/modules/sizeMappingV2.md b/dev-docs/modules/sizeMappingV2.md
index e51406e929..7583b4bb5d 100644
--- a/dev-docs/modules/sizeMappingV2.md
+++ b/dev-docs/modules/sizeMappingV2.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - Size Mapping
-description: Display Conditional and Responsive Ad Units
+description: Display Responsive AdUnits in demanding page environments.
 module_code: sizeMappingV2
 display_name: Advanced Size Mapping
 enable_download: true
diff --git a/dev-docs/modules/timeoutRtdProvider.md b/dev-docs/modules/timeoutRtdProvider.md
new file mode 100644
index 0000000000..7830eb7b40
--- /dev/null
+++ b/dev-docs/modules/timeoutRtdProvider.md
@@ -0,0 +1,159 @@
+---
+layout: page_v2
+title: Timeout Rtd Module
+display_name: Timeout RTD
+description: Module for managing timeouts in real time
+page_type: module
+module_type: rtd
+module_code : timeoutRtdProvider
+enable_download : true
+sidebarType : 1
+---
+
+## Overview
+The timeout RTD module enables publishers to set rules that determine the timeout based on 
+certain features. It supports rules dynamically retrieved from a timeout provider as well as rules 
+set directly via configuration.
+Build the timeout RTD module into the Prebid.js package with: 
+```
+gulp build --modules=timeoutRtdProvider,rtdModule...
+```
+
+## Configuration
+The module is configured in the realTimeData.dataProviders object. The module will override 
+`bidderTimeout` in the pbjs config. 
+
+### Timeout Data Provider interface
+The timeout RTD module provides an interface of dynamically fetching timeout rules from 
+a data provider just before the auction begins. The endpoint url is set in the config just as in 
+the example below, and the timeout data will be used when making bid requests.
+ 
+```
+pbjs.setConfig({
+    ...
+    "realTimeData": {
+        "dataProviders": [{
+            "name": 'timeout',
+            "params": {
+                "endpoint": {
+                    "url": "http://{cdn-link}.json"
+                }
+            }
+        }
+    ]},
+    
+    // This value below will be modified by the timeout RTD module if it successfully 
+    // fetches the timeout data.  
+    "bidderTimeout": 1500, 
+    ...
+});
+```
+
+Sample Endpoint Response: 
+```
+{
+    "rules": {
+        "includesVideo": {
+            "true": 200,
+            "false": 50
+          },
+        "numAdUnits" : {
+            "1-5": 100,
+            "6-10": 200,
+            "11-15": 300
+        },
+        "deviceType": {
+            "2": 50,
+            "4": 100,
+            "5": 200
+        },
+        "connectionSpeed": {
+            "slow": 200,
+            "medium": 100,
+            "fast": 50,
+            "unknown": 10
+        },
+}
+```
+
+### Rule Handling:
+The rules retrieved from the endpoint will be used to add time to the `bidderTimeout` based on certain features such as 
+the user's deviceType, connection speed, etc. These rules can also be configured statically on page via a `rules` object.
+Note that the timeout Module will ignore the static rules if an endpoint url is provided. The timeout rules follow the 
+format:
+```
+{
+  '<feature>': {
+    '<key>': <milliseconds to be added to timeout>
+  }
+}
+```
+See bottom of page for examples.
+
+Currently supported features:
+
+|Name |Description | Keys | Example
+| :------------ | :------------ | :------------ |:------------ |
+| includesVideo | Adds time to the timeout based on whether there is a video ad unit in the auction or not | 'true'/'false'| { "true": 200, "false": 50 } | 
+| numAdUnits | Adds time based on the number of ad units. Ranges in the format `'lowerbound-upperbound` are accepted. This range is inclusive | numbers or number ranges | {"1": 50, "2-5": 100, "6-10": 200} |  
+| deviceType | Adds time based on device type| 2, 4, or 5| {"2": 50, "4": 100} |
+| connectionSpeed | Adds time based on connection speed. `connectionSpeed` defaults to 'unknown' if connection speed cannot be determined | slow, medium, fast, or unknown | { "slow": 200} |
+
+If there are multiple rules set, all of them would be used and any that apply will be added to the base timeout. For example, if the rules object contains:
+```
+{
+  "includesVideo": {
+      "true": 200,
+      "false": 50
+    },
+  "numAdUnits" : {
+      "1-3": 100,
+      "4-5": 200
+  }
+}
+```
+and there are 3 ad units in the auction, all of which are banner, then the timeout to be added will be 150 milliseconds (50 for `includesVideo[false]` + 100 for `numAdUnits['1-3']`).
+
+Full example:  
+```
+pbjs.setConfig({
+    ...
+    "realTimeData": {
+        "dataProviders": [{
+            "name": 'timeout',
+            "params": {
+                "rules": {
+                    "includesVideo": {
+                        "true": 200,
+                        "false": 50
+                      },
+                    "numAdUnits" : {
+                        "1-5": 100,
+                        "6-10": 200,
+                        "11-15": 300
+                    },
+                    "deviceType": {
+                        "2": 50,
+                        "4": 100,
+                        "5": 200
+                    },
+                    "connectionSpeed": {
+                        "slow": 200,
+                        "medium": 100,
+                        "fast": 50,
+                        "unknown": 10
+                    }
+                }
+            }
+        ]}
+    }
+    ...
+    // The timeout RTD module will add time to `bidderTimeout` based on the rules set above.  
+    "bidderTimeout": 1500, 
+```
+
+## Timeout Providers
+
+{: .table  }
+| Partner | Contact | About |
+| OpenX | [apollo@openx.com](mailto:apollo@openx.com) | Dynamic timeout optimization and more |
\ No newline at end of file
diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md
index 73cfcd5445..4f3e3ef9a4 100644
--- a/dev-docs/modules/userId.md
+++ b/dev-docs/modules/userId.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - User ID
-description: Supports multiple cross-vendor user IDs
+description: Vendor-specific user ID sub-modules are available to support a range of identification approaches.
 module_code : userId
 display_name : User ID
 enable_download : false
@@ -72,7 +72,7 @@ of sub-objects. The table below has the options that are common across ID system
 {: .table .table-bordered .table-striped }
 | Param under userSync.userIds[] | Scope | Type | Description | Example |
 | --- | --- | --- | --- | --- |
-| name | Required | String | May be: `"admixerId"`, `"amxId"`, `"britepoolId"`, `"criteo"`, `"fabrickId"`, `"flocId"`, `"haloId"`, `"id5id"`, `identityLink`, `"idx"`, `"intentIqId"`, `"liveIntentId"`, `"lotamePanoramaId"`, `"merkleId"`, `"mwOpenLinkId"`, `"netId"`, `"novatiqId"`, `"parrableId"`, `"quantcastId"`, `"pubProvidedId"`, `"sharedId"`, `"tapadId"`, `"unifiedId"`,`"uid2"`, `"verizonMediaId"`, `"zeotapIdPlus"` | `"unifiedId"`
+| name | Required | String | May be: `"admixerId"`, `"adtelligentId"`, `"akamaiDAPId"`, `"amxId"`, `"britepoolId"`, `"criteo"`, `"fabrickId"`, `"flocId"`, `"haloId"`, `"id5id"`, `identityLink`, `"idx"`, `"intentIqId"`, `"liveIntentId"`, `"lotamePanoramaId"`, `"merkleId"`, `"naveggId"`, `"mwOpenLinkId"`, `"netId"`, `"novatiqId"`, `"parrableId"`, `"quantcastId"`, `"pubProvidedId"`, `"sharedId"`, `"tapadId"`, `"unifiedId"`,`"uid2"`, `"verizonMediaId"`, `"zeotapIdPlus"` | `"unifiedId"`
 | params | Based on User ID sub-module | Object | | |
 | bidders | Optional | Array of Strings | An array of bidder codes to which this user ID may be sent. | `['bidderA', 'bidderB']` |
 | storage | Optional | Object | The publisher can specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. This is not needed when `value` is specified or the ID system is managing its own storage | |
@@ -139,6 +139,48 @@ The Rubicon bid adapter would then receive
 
 ## User ID Sub-Modules
 
+### AkamaiDAPId
+
+The Akamai Data Activation Platform (DAP) is a privacy-first system that protects end-user privacy by only allowing them to be targeted as part of a larger cohort.  DAP views hiding individuals in large cohorts as the best mechanism to prevent unauthorized tracking.
+
+The integration of DAP into Prebid.JS consists of creating a UserID plugin that interacts with the DAP API.  The UserID module tokenizes the end-user identity into an ephemeral, secure pseudonymization called a dapId.  The dapId is then supplied to the bid-stream where the SSP partner looks up cohort membership for that token, and supplies the cohorts to the rest of the bid-stream.
+
+In this system, no end-user identifier is supplied to the bid-stream, only cohorts.  This is a foundational privacy principal DAP is built upon.
+
+#### AkamaiDAPId Configuration
+
+First, make sure to add the DAP submodule to your Prebid.js package with:
+
+```
+gulp build --modules=akamaiDAPIdSystem,userId
+```
+
+The following configuration parameters are available:
+
+```javascript
+pbjs.setConfig({
+  userSync: {
+    userIds: [{
+      name: 'akamaiDAPId',
+      params: {
+        apiHostname: '<see your Akamai account rep>',
+        domain: 'your-domain.com',
+        type: 'email' | 'mobile' | ... | 'dap-signature:1.0.0',
+        identity: ‘your@email.com’ | ‘6175551234' | ...,
+        apiVersion: 'v1' | 'x1',
+        attributes: '{ "cohorts": [ "3:14400", "5:14400", "7:0" ],"first_name": "...","last_name": "..." }'
+      },
+    }],
+    auctionDelay: 50             // 50ms maximum auction delay, applies to all userId modules
+  }
+});
+```
+In order to make use of v1 APIs, "apiVersion" needs to explicitly mention 'v1'. The "apiVersion" defaults to x1 if not specified.
+"attributes" can be configured in x1 API only and not v1 APIs. Please ensure that the "attributes" value is in same format as shown above.
+
+Contact Prebid@akamai.com(Akamai account rep) for apiHostname.
+
+
 ### AdmixerID
 
 Admixer ID, provided by [Admixer] (https://admixer.com/), is a universal ID solution that doesn't rely on 3rd party cookies and helps publishers and advertisers to recognize users across various browsers and environments.  Our sub adapter takes deterministic signals like email and phone as input and returns an anonymous id that unlocks access to a wide range of Admixer's demand sources, amplifying audience segmentation, targeting and measurement.
@@ -186,6 +228,86 @@ gulp build --modules=admixerIdSystem
    });
 {% endhighlight %}
 
+### Adtelligent
+
+The [Adtelligent](https://adtelligent.com) ID system is a unique per-session user identifier for providing high quality DMP data for advertisers
+
+Add it to your Prebid.js package with:
+
+{: .alert.alert-info :}
+gulp build --modules=userId,adtelligentIdSystem
+
+#### Adtelligent Configuration
+
+adtelligentIdSystem adapter doesn't require any configuration or storage params. The adapter performs asynchronously and to achieve better performance it is recommended to set the `storage` object `refreshInSeconds` to a short period, such as ten minutes. At the end of the set storage refresh the adapter will refresh its configuration.
+
+#### Adtelligent Example
+ 
+{% highlight javascript %}
+ pbjs.setConfig({
+     userSync: {
+         userIds: [{
+             name: 'adtelligent'
+         }]
+     }
+ });
+{% endhighlight %}
+
+Example with a short storage for ~10 minutes and refresh in 5 minutes: 
+
+{% highlight javascript %}
+    pbjs.setConfig({
+        userSync: {
+            userIds: [{
+                name: 'adtelligent',
+                storage: {
+                    type: "html5",
+                    name: "adt_id",
+                    expires:0.003,
+                    refreshInSeconds: 60 * 5
+                }
+            }]
+        }
+    });
+{% endhighlight %}
+ 
+### AMX RTB ID
+
+The AMX RTB ID is a first-party identifier designed for publishers using the AMX RTB adapter. For more information please contact [prebid@amxrtb.com](prebid@amxrtb.com)
+
+#### AMX RTB ID Configuration
+
+First, add the AMX RTB ID module to your Prebid.js build:
+
+```shell
+gulp build --modules=userId,amxIdSystem
+```
+
+Then configure the amxId in your `userSync` configuration:
+
+```javascript
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: 'amxId',
+            storage: {
+                name: 'amxId',
+                type: 'html5',
+                expires: 14,
+            }
+        }]
+    }
+});
+```
+
+This will add a `userId.amxId` property to all bidRequests. This will be read by the AMX RTB bid adapter, and any other adapters that support EIDs:
+
+```javascript
+{
+  amxId: '3ca11058-ecbc-419f-bda7-b52fe7baf02a'
+}
+```
+
 ### BritePool
 
 The [BritePool](https://britepool.com) ID is a persistent identifier that enables identity resolution for people-based marketing in the cookieless world. Every BritePool ID is associated with a real identity. As a result, publishers, SSPs and DSPs that integrate with BritePool, or automated
@@ -489,43 +611,6 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
-### AMX RTB ID
-
-The AMX RTB ID is a first-party identifier designed for publishers using the AMX RTB adapter. For more information please contact [prebid@amxrtb.com](prebid@amxrtb.com)
-
-#### AMX RTB ID Configuration
-
-First, add the AMX RTB ID module to your Prebid.js build:
-
-```shell
-gulp build --modules=userId,amxIdSystem
-```
-
-Then configure the amxId in your `userSync` configuration:
-
-```javascript
-pbjs.setConfig({
-    userSync: {
-        userIds: [{
-            name: 'amxId',
-            storage: {
-                name: 'amxId',
-                type: 'html5',
-                expires: 14,
-            }
-        }]
-    }
-});
-```
-
-This will add a `userId.amxId` property to all bidRequests. This will be read by the AMX RTB bid adapter, and any other adapters that support EIDs:
-
-```javascript
-{
-  amxId: '3ca11058-ecbc-419f-bda7-b52fe7baf02a'
-}
-```
-
 ### Halo ID from Audigent
 
 Audigent is a next-generation data management platform and a first-of-a-kind "data agency" containing some of the most exclusive content-consuming audiences across desktop, mobile and social platforms. Our HaloId module allows for user id resolution and Audigent user data segmentation to be retrieved for users across the web.  For assistance setting up your module please contact us at [prebid@audigent.com](mailto:prebid@audigent.com).
@@ -552,13 +637,21 @@ pbjs.setConfig({
 });
 ```
 
-The `request.userId.haloId` will contain the Audigent HaloId and associated segments:
+The `request.userId.haloId` will contain the Audigent HaloId:
 ```
 {
-  "haloId": "user-halo-id",
-  "auSeg": ["segment1", "segment2"]
+  "haloId": "0201chpvai07jv2yg08xizqr0bwpa1w0evvmq014d2ykn0b5oe"
 }
 ```
+The following configuration parameters are available:
+
+{: .table .table-bordered .table-striped }
+| Param under usersync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | ID value for the HaloID module - `"haloId"` | `"haloId"` |
+| params | Optional | Object | Used to store params for the HaloId system |
+| params.url | Optional | String | Set an alternate GET url for HaloId with this parameter |
+| params.urlArg | Optional | Object | Optional url parameter for params.url |
 
 ### ID+
 
@@ -663,109 +756,77 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
-### RampID
+### IDx
 
-RampID, formerly known as IdentityLink, provided by [LiveRamp](https://liveramp.com) is a single person-based identifier which allows marketers, platforms and publishers to perform personalized segmentation, targeting and measurement use cases that require a consistent, cross-channel view of the user in anonymous spaces.
+IDx, a universal ID solution provided by [Retargetly](https://retargetly.com), is the evolution of digital identifiers for the Latin American region. Through a proprietary identity graph, it allows publishers, advertisers, and ad tech platforms to recognize users across domains and devices even where third party cookies aren't available.
+
+The IDx platform is designed with privacy at its core and allows for nearly every conceivable digital use case including but not limited to audience targeting, retargeting, frequency management, personalization, and total reach reporting.
 
 Add it to your Prebid.js package with:
 
 {: .alert.alert-info :}
-gulp build --modules=identityLinkIdSystem
+gulp build --modules=idxIdSystem
 
-#### RampID Registration
+#### IDx Registration
 
-Please sign up through our [Console](https://launch.liveramp.com) platform and request a `placementId`.
+If you are a publisher or an advertiser, then IDx is free to use but requires a simple registration process. To do this, please send an email to [idx-partners@retargetly.com](mailto:idx-partners@retargetly.com) to request your IDx Partner ID.
 
-The RampID privacy policy is at [https://liveramp.com/privacy/service-privacy-policy/](https://liveramp.com/privacy/service-privacy-policy/).
+We may ask for some basic information from you before approving your request. For more information on IDx, please visit [retargetly.com/idx](http://retargetly.com/idx).
 
-#### RampID Configuration
+#### IDx Configuration
 
 {: .table .table-bordered .table-striped }
 | Param under userSync.userIds[] | Scope | Type | Description | Example |
 | --- | --- | --- | --- | --- |
-| name | Required | String | `"identityLink"` | `"identityLink"` |
-| params | Required for Id Link | Object | Details for RampID initialization. | |
-| params.pid | This parameter is required for RampID | String | This is the placementId, value needed for obtaining user’s RampID envelope
-| params.notUse3P | This parameter is not required for RampID | Boolean | Property for choosing should 3P Liveramp envelope endpoint be fired or not, in order to get RampID envelope
-
-#### RampID Examples
-
-1) Publisher passes a placement ID and elects to store the RampID envelope in a cookie.
-
-
-{% highlight javascript %}
-pbjs.setConfig({
-    userSync: {
-        userIds: [{
-            name: "identityLink",
-            params: {
-                pid: '999',             // Set your real RampID placement ID here
-                // notUse3P: true/false    // If you do not want to use 3P endpoint to retrieve the envelope. If you do not set this property to true, 3P endpoint will be fired. By default this property is undefined and 3P request will be fired.
-            },
-            storage: {
-                type: "cookie",
-                name: "idl_env",       // create a cookie with this name
-                expires: 30            // cookie can last for 30 days
-            }
-        }],
-        syncDelay: 3000              // 3 seconds after the first auction
-    }
-});
-{% endhighlight %}
+| name | Required | String | `"idx"` | `"idx"` |
 
-2) Publisher passes a placement ID and elects to store the RampID envelope in HTML5 localStorage.
+#### IDx Example
 
 {% highlight javascript %}
 pbjs.setConfig({
     userSync: {
         userIds: [{
-            name: "identityLink",
-            params: {
-                pid: '999',          // Set your real RampID placement ID here
-                // notUse3P: true/false    // If you do not want to use 3P endpoint to retrieve the envelope. If you do not set this property to true, 3P endpoint will be fired. By default this property is undefined and 3P request will be fired.
-            },
-            storage: {
-                type: "html5",
-                name: "idl_env",    // set localstorage with this name
-                expires: 30
-            }
-        }],
-        syncDelay: 3000
+            name: "idx"
+        }]
     }
 });
 {% endhighlight %}
 
-### IDx
+### IM-UID by Intimate Merger
 
-IDx, a universal ID solution provided by [Retargetly](https://retargetly.com), is the evolution of digital identifiers for the Latin American region. Through a proprietary identity graph, it allows publishers, advertisers, and ad tech platforms to recognize users across domains and devices even where third party cookies aren't available.
-
-The IDx platform is designed with privacy at its core and allows for nearly every conceivable digital use case including but not limited to audience targeting, retargeting, frequency management, personalization, and total reach reporting.
+IM-UID, provided by [Intimate Merger](https://corp.intimatemerger.com/), is a universal identifier that designed for publishers, platforms and advertisers to perform segmentation and targeting even in environments where 3rd party cookies are not available. IM-UID is currently only available in Japan.
 
 Add it to your Prebid.js package with:
 
 {: .alert.alert-info :}
-gulp build --modules=idxIdSystem
+gulp build --modules=imuIdSystem
 
-#### IDx Registration
+#### IM-UID Registration
 
-If you are a publisher or an advertiser, then IDx is free to use but requires a simple registration process. To do this, please send an email to [idx-partners@retargetly.com](mailto:idx-partners@retargetly.com) to request your IDx Partner ID.
+Please visit [https://lp.intimatemerger.com/im-uid](https://lp.intimatemerger.com/im-uid) and request your Customer ID to get started.
 
-We may ask for some basic information from you before approving your request. For more information on IDx, please visit [retargetly.com/idx](http://retargetly.com/idx).
+The Intimate Merger privacy policy is at https://corp.intimatemerger.com/privacypolicy/
 
-#### IDx Configuration
+#### IM-UID Configuration
 
 {: .table .table-bordered .table-striped }
 | Param under userSync.userIds[] | Scope | Type | Description | Example |
 | --- | --- | --- | --- | --- |
-| name | Required | String | `"idx"` | `"idx"` |
+| name | Required | String | The name of this module. | `"imuid"` |
+| params | Required | Object | Details of module params. | |
+| params.cid | Required | Number | This is the Customer ID value obtained via Intimate Merger. | `5126` |
+| params.url | Optional | String | Use this to change the default endpoint URL. | `"https://example.com/some/api"` |
 
-#### IDx Example
+#### IM-UID Example
 
 {% highlight javascript %}
 pbjs.setConfig({
     userSync: {
         userIds: [{
-            name: "idx"
+            name: "imuid",
+            params: {
+                cid: 5126 // Set your Intimate Merger Customer ID here for production
+            }
         }]
     }
 });
@@ -884,6 +945,41 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
+### Kinesso ID
+
+Kinesso ID solution is a new approach to persistent cross domain authentication.
+
+#### How it works
+
+The Kinesso identity solution creates a persistent cross domain authenticated user id that is then used to link users with their interest signals (commonly known as segments).  The Kinesso user ID (knsso) is never broadcast into the bid stream. Instead it is sent to a server side data store, merged with accompanying data from the Prebid Id Library and shipped to Kinesso. All data is encrypted at rest and in transit so your identifiers are never stored or transmitted in an insecure manner. 
+
+The Kinesso ID sub adapter sets two cookies, one as a third party cookie and the other as a first party cookie in the publisher's domain. These cookies are merged with the user's hashed email address (when present) server side and sent to Kinesso. The combined output looks like this: 
+
+{: .table .table-bordered .table-striped }
+| kpuid | knsso | hid | account_id | created on |
+| --- | --- | --- | --- | --- |
+| `<my_1pc>` | `<my_3pc>` | `<my_hashed_email>` | `<my_ssp_accountid>` | `<my_birthday>` |
+
+Kinesso will then attach these users to deals ids that they will target in the ORTB bid stream by brands and agencies represented by IPG.
+   
+Add it to your Prebid.js package with:
+
+{: .alert.alert-info :}
+gulp build --modules=kinessoIdSystem
+
+#### Kinesso ID Registration
+
+You can set up Kinesso ID sub adapter by contacting Kinesso at prebid@kinesso.com
+
+The Kinesso ID privacy policy is covered under the [Kinesso Privacy Notice](https://kinesso.com/privacy-policy/). Please note, at present the Kinesso ID module is not meant for use inside the EEA.
+
+{: .table .table-bordered .table-striped }
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | The name of this module. | `'kinessoId'` |
+| params | Required | Object | Details for KinessoId initialization | |
+| params.accountid | Required | Int | Your SSP Account Id | 123 |
+
 ### LiveIntent nonID
 
 LiveIntent offers audience resolution by leveraging our next-generation identity solutions. The LiveIntent identity graph is built around a people-based set of data that is authenticated daily through active engagements with email newsletters and media across the web. The LiveIntent nonID is a user identifier tied to an active, encrypted email in our graph and functions in cookie-challenged environments and browsers.
@@ -1056,6 +1152,49 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
+### MediaWallah OpenLinkID
+
+MediaWallah's openLink is an anonymous person based ID that enables buyers and sellers of media to connect a person and their devices across the web and mobile apps. openLink facilities the buying of media between DSPs, SSPs and publishers.
+
+Add support for MediaWallah OpenLinkID to your Prebid.js package with:
+
+{: .alert.alert-info :}
+gulp build --modules=userId,mwOpenLinkIdSystem
+
+#### MediaWallah OpenLinkID Registration
+
+MediaWallah requires the creation of an accountId a partnerId in order to take advantage of openLink. Please contact your partner resource to get these Ids provisioned.
+
+#### MediaWallah OpenLinkID Configuration
+
+<div class="table-responsive" markdown="1">
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | The name of this module. | `'mwOpenLinkId'` |
+| params | Required | Object | Details for mwOLID syncing. ||
+| params.accountId | Required | String | The MediaWallah assigned Account Id  | `1000` |
+| params.partnerId | Required | String | The MediaWallah assign partner Id |`'1001'`|
+| params.uid | Optional | String | Your unique Id for the user or browser. Used for matching. | `'u-123xyz'` |
+{: .table .table-bordered .table-striped }
+</div>
+
+#### MediaWallah OpenLinkID Examples
+
+```
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: 'mwOpenLinkId',
+            params: {
+                accountId: '1000',
+                partnerId: '1001',
+                uid: 'u-123xyz'
+            }
+        }]
+    }
+})
+```
+
 ### Merkle ID
 
 [Merkury by Merkle](https://merkury.merkleinc.com/contact) enables marketers, media owners, and publishers to own, build, and control a cookie-less Private Identity Graph. Merkury uses an organization’s first-party CRM data and valuable interactions such as logins, outbound email campaigns and media reach to create and grow a universe of person-based IDs for cross-channel targeting, personalization, measurement and more.
@@ -1085,6 +1224,24 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
+### Navegg ID
+
+[Navegg](https://www.navegg.com) enables publishers, advertisers and agencies to use their own first party data together to activate media in a cookie-less way across several Ad Tech platforms. Navegg has one of the largest data networks in Latin America which also allows the enhancement of data with unique categories.
+
+#### Navegg ID Examples
+
+Publisher stores NaveggId in local storage and/or 1st party cookies
+
+{% highlight javascript %}
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+        name: 'naveggId'
+      }]
+    }
+});
+{% endhighlight %}
+
 ### netID
 
 The [European netID Foundation (EnID)](https://developerzone.netid.de/index.html) aims to establish with the netID an independent European alternative in the digital market for Demand and Supply side. With the netID Single-Sign-On, the EnID established an open standard for consumer logins for services of Buyers and Brands, that also includes user-centric consent management capabilities that results in a standardized, EU-GDPR compliant, IAB TCF aware, cross-device enabled Advertising Identifier, which can be leveraged by publishers and advertisers (and vendors supporting them) to efficiently deliver targeted advertising through programmatic systems to already more than 38 million Europeans on mobile and desktop devices.
@@ -1247,12 +1404,131 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
+### Publisher Link
+Publisher Link, provided by [Epsilon](https://www.epsilon.com/us),  is a cross-device identity solution that activates publisher first-party, authenticated 
+data to improve audience identification and increase bid opportunities, specifically designed for sites with authenticated 
+traffic.  Publisher first-party authenticated data and a user's unique encrypted ID is linked to an existing people-based 
+Epsilon CORE ID.  By utilizing Publisher Link, publishers are able to reap the benefits of Epsilon's CORE ID.
+
+#### Publisher Link  Registration
+Please contact [Epsilon](mailto:PublisherSupport@Epsilon.com) to sign up.
+
+The Epsilon privacy is covered in the [Epsilon Privacy Policy](https://www.epsilon.com/us/privacy-policy).
+
+The Publisher Link opt-out is included [here](https://www.epsilon.com/privacy/dms/opt-out/email)
+
+#### Publisher Link Configuration
+
+In addition to the parameters documented above in the Basic Configuration section the following Publisher Link specific configuration is available:
+
+{: .table .table-bordered .table-striped }
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | The name of this module. | `'publinkId'` |
+| params | Required | Object | Customized parameters. | |
+| params.e | Required | String | Hashed email address of the user.  Supports MD5 and SHA256. | `'7D320454942620664D96EF78ED4E3A2A'` |
+| params.site_id | Required | String | Site ID provided by Epsilon. | `'123456'` |
+| params.api_key | Required | String | API key provided by Epsilon. | `'00000000-0000-0000-0000-00000000000'`
+
+#### Publisher Link Examples
+```javascript
+    pbjs.setConfig({
+       userSync: {
+           userIds: [{
+               name: "publinkId",
+               storage: {
+                   name: "pbjs_publink",
+                   type: "cookie",
+                   expires: 30
+               },
+               params: {
+                   e: "7D320454942620664D96EF78ED4E3A2A", // example hashed email (md5)
+                   site_id: "123456",
+                   api_key: "00000000-0000-0000-0000-00000000000"
+               }
+           }]
+       }
+   });
+```
+
+### RampID
+
+RampID, formerly known as IdentityLink, provided by [LiveRamp](https://liveramp.com) is a single person-based identifier which allows marketers, platforms and publishers to perform personalized segmentation, targeting and measurement use cases that require a consistent, cross-channel view of the user in anonymous spaces.
+
+Add it to your Prebid.js package with:
+
+{: .alert.alert-info :}
+gulp build --modules=identityLinkIdSystem
+
+#### RampID Registration
+
+Please sign up through our [Console](https://launch.liveramp.com) platform and request a `placementId`.
+
+The RampID privacy policy is at [https://liveramp.com/privacy/service-privacy-policy/](https://liveramp.com/privacy/service-privacy-policy/).
+
+#### RampID Configuration
+
+{: .table .table-bordered .table-striped }
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | `"identityLink"` | `"identityLink"` |
+| params | Required for Id Link | Object | Details for RampID initialization. | |
+| params.pid | This parameter is required for RampID | String | This is the placementId, value needed for obtaining user’s RampID envelope
+| params.notUse3P | This parameter is not required for RampID | Boolean | Property for choosing should 3P Liveramp envelope endpoint be fired or not, in order to get RampID envelope
+
+#### RampID Examples
+
+1) Publisher passes a placement ID and elects to store the RampID envelope in a cookie.
+
+
+{% highlight javascript %}
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: "identityLink",
+            params: {
+                pid: '999',             // Set your real RampID placement ID here
+                // notUse3P: true/false    // If you do not want to use 3P endpoint to retrieve the envelope. If you do not set this property to true, 3P endpoint will be fired. By default this property is undefined and 3P request will be fired.
+            },
+            storage: {
+                type: "cookie",
+                name: "idl_env",       // create a cookie with this name
+                expires: 30            // cookie can last for 30 days
+            }
+        }],
+        syncDelay: 3000              // 3 seconds after the first auction
+    }
+});
+{% endhighlight %}
+
+2) Publisher passes a placement ID and elects to store the RampID envelope in HTML5 localStorage.
+
+{% highlight javascript %}
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: "identityLink",
+            params: {
+                pid: '999',          // Set your real RampID placement ID here
+                // notUse3P: true/false    // If you do not want to use 3P endpoint to retrieve the envelope. If you do not set this property to true, 3P endpoint will be fired. By default this property is undefined and 3P request will be fired.
+            },
+            storage: {
+                type: "html5",
+                name: "idl_env",    // set localstorage with this name
+                expires: 30
+            }
+        }],
+        syncDelay: 3000
+    }
+});
+{% endhighlight %}
+
 ### SharedID
 
-This module stores an unique user id in the first party domain and makes it accessible to all adapters. Similar to IDFA and AAID, this is a simple UUID that can be utilized to improve user matching, especially for iOS and MacOS browsers, and is compatible with ITP (Intelligent Tracking Prevention). It’s lightweight and self contained. Adapters that support Publisher Common ID will be able to pick up the user ID and return it for additional server-side cross device tracking.
+This module stores an unique user id in the first party domain and makes it accessible to all adapters. Similar to IDFA and AAID, this is a simple UUID that can be utilized to improve user matching, especially for iOS and MacOS browsers, and is compatible with ITP (Intelligent Tracking Prevention). It’s lightweight and self contained. Adapters that support SharedId will be able to pick up the user ID and return it for additional server-side cross device tracking.
 
 There is no special registration or configuration for SharedID. Each publisher's privacy policy should take
-SharedID into account.
+SharedID into account.  Prebid  recommends implementing a method where users can easily opt-out of targeted advertising. Please refer to the User Opt-Out section located at the bottom of this page. For more information check out Prebid's dedicated [identity page](/identity/sharedid.html) 
 
 Add it to your Prebid.js package with:
 
@@ -1269,8 +1545,12 @@ In addition to the parameters documented above in the Basic Configuration sectio
 | name | Required | String | The name of this module. | `'pubCommonId'` |
 | params | Optional | Object | Customized parameters | |
 | params.create | Optional | Boolean | For publisher server support only.  If true, the publisher's server will create the (pubcid) cookie.  Default is true. | `true` |
-| params.pixelUrl | Optional | String | For publisher server support only.  This is a URL of a pixel for updating cookies' expiration times.  Fired after a new ID has been created or an existing ID is being extended.  No default. | `'https://example.com/ping'`
+| params.pixelUrl | Optional | String | For publisher server support only. Where to call out to for a server cookie -- see [Prebid Identity](/identity/sharedid.html) for more information. | `/wp-json/pubcid/v1/extend/`
 | params.extend | Optional | Boolean | If true, the expiration time of the stored IDs will be refreshed during each page load.  Default is false. | `false` |
+| storage | Required | Object | The publisher must specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. |
+| storage.expires | Integer | Required | How long the user ID information will be stored. | `365` |
+| storage.name | String | Required | The name of the cookie or html5 local storage where the user ID will be stored. | `_pubcid`
+| storage.type | String | Required | This is where the results of the user ID will be stored. Must be either: Must be either: "cookie" or "html5". For server side implementations, which have the best identifier life and revenue impact, this must be a cookie. | `cookie`
 
 #### SharedID Examples
 
@@ -1283,7 +1563,7 @@ pbjs.setConfig({
             name: "pubCommonId",
             storage: {
                 type: "cookie",
-                name: "_pubcid",         // create a cookie with this name
+                name: `"_pubcid"`,         // create a cookie with this name
                 expires: 365             // expires in 1 years
             }
         }]
@@ -1308,9 +1588,12 @@ pbjs.setConfig({
             }
         },{
             name: "pubCommonId",
+            params: {
+                pixelUrl: "/wp-json/pubcid/v1/extend/"
+            },
             storage: {
                 type: "cookie",
-                name: "_pubcid",      // create a cookie with this name
+                name: `"_pubcid"`,      // create a cookie with this name
                 expires: 180
             }
         }],
@@ -1319,6 +1602,26 @@ pbjs.setConfig({
 });
 {% endhighlight %}
 
+3) Publisher supports SharedID and first party domain cookie storage initiated by a first party server
+
+{% highlight javascript %}
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: "pubCommonId",
+            params: {
+                pixelUrl: "/wp-json/pubcid/v1/extend/" //pixelUrl should be specified when the server plugin is used
+            },
+            storage: {
+                type: "cookie",
+                name: `"_pubcid"`,         // create a cookie with this name
+                expires: 365             // expires in 1 years
+            }
+        }]
+    }
+});
+{% endhighlight %}
+
 ### PubProvided ID
 
 The PubProvided Id module allows publishers to set and pass a first party user id into the bid stream. This module has several unique characteristics:
@@ -1343,27 +1646,27 @@ Or, the eids values can be passed directly into the `setConfig` call:
 pbjs.setConfig({
     userSync: {
         userIds: [{
-            name: "example.com",
+            name: "pubProvidedId",
             params: {
                 eids: [{
                     source: "domain.com",
-                    uids:[{
-                      id: "value read from cookie or local storage",
-                      atype: 1,
-                      ext: {
-                          stype: "ppuid"
-                      }
-
-                  }]
-                },{
+                    uids: [{
+                        id: "value read from cookie or local storage",
+                        atype: 1,
+                        ext: {
+                            stype: "ppuid"
+                        }
+
+                    }]
+                }, {
                     source: "3rdpartyprovided.com",
-                    uids:[{
-                      id: "value read from cookie or local storage",
-                      atype: 3,
-                      ext: {
-                          stype: "dmp"
-                      }
-                  }]
+                    uids: [{
+                        id: "value read from cookie or local storage",
+                        atype: 3,
+                        ext: {
+                            stype: "dmp"
+                        }
+                    }]
                 }]
             }
         }]
@@ -1404,25 +1707,32 @@ gulp build --modules=pubProvidedId
 
 ### Quantcast ID
 
-Quantcast ID enables publishers that use Quantcast Measure tag to uniquely identify
-their clients within Quantcast's extensive publisher network without relying on third party
-cookies. The Quantcast User ID submodule makes the existing Quantcast first party
-cookie available in the bid request. The first party cookie allows Quantcast to correlate
-the bid request with Quantcast's Measure dataset.
-
-Currently, Quantcast ID only works with the presence of Quantcast Measure tag. More information
-about Measure can be found in https://www.quantcast.com/measure.
-
-The Quantcast privacy policy is at https://www.quantcast.com/privacy/.
+The Prebid Quantcast ID module stores a Quantcast ID in a first party cookie. The ID is then made available in the bid request. The ID from the cookie added in the bidstream allows Quantcast to more accurately bid on publisher inventories without third party cookies, which can result in better monetization across publisher sites from Quantcast. And, it’s free to use! For easier integration, you can work with one of our SSP partners, like PubMatic, who can facilitate the legal process as well as the software integration for you.
 
 Add it to your Prebid.js package with:
 
 {: .alert.alert-info :}
 gulp build --modules=userId,quantcastIdSystem
 
+Quantcast’s privacy policies for the services rendered can be found at
+ 		https://www.quantcast.com/privacy/
+      
+Publishers deploying the module are responsible for ensuring legally required notices and choices for users. 
+
+The Quantcast ID module will only perform any action and return an ID in situations where:
+1. the publisher has not set a ‘coppa'  flag on the prebid configuration on their site (see [pbjs.setConfig.coppa](https://docs.prebid.org/dev-docs/publisher-api-reference/setConfig.html#setConfig-coppa)) 
+2. there is not a IAB us-privacy string indicating the digital property has provided user notice and the user has made a choice to opt out of sale
+3. if GDPR applies, an IAB TCF v2 string exists indicating that Quantcast does not have consent for purpose 1 (cookies, device identifiers, or other information can be stored or accessed on your device for the purposes presented to you), or an established legal basis (by default legitimate interest) for purpose 10 (your data can be used to improve existing systems and software, and to develop new products).
+
 #### Quantcast ID Configuration
 
-Quantcast ID module does not require any configuration parameters at this time.
+{: .table .table-bordered .table-striped }
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | `"quantcastId"` | `"quantcastId"` |
+| params | Optional | Object | Details for Quantcast initialization. | |
+| params.ClientID | Optional | String | Optional parameter for Quantcast prebid managed service partners. The parameter is not required for websites with Quantcast Measure tag. Reach out to Quantcast for ClientID if you are not an existing Quantcast prebid managed service partner: quantcast-idsupport@quantcast.com  | |
+
 
 #### Quantcast ID Example
 
@@ -1430,13 +1740,14 @@ Quantcast ID module does not require any configuration parameters at this time.
 pbjs.setConfig({
     userSync: {
         userIds: [{
-            name: "quantcastId",
+            name: "quantcastId"
         }]
     }
 });
 {% endhighlight %}
 
 
+
 ### Tapad ID
 
 Tapad's ID module provides access to a universal identifier that publishers, ad tech platforms and advertisers can use for data collection and collation without reliance on third-party cookies.
@@ -1615,95 +1926,52 @@ pbjs.setConfig({
 {% endhighlight %}
 
 
-### Verizon Media ConnectID
+### Yahoo ConnectID
 
-Verizon Media ConnectID is a person based ID and does not depend on 3rd party cookies. It enables ad tech platforms to recognize and match users consistently across the open web. Built on top of Verizon Media’s robust and proprietary ID Graph it delivers a higher find rate of audiences on publishers’ sites user targeting that respects privacy.
+Yahoo ConnectID is a person based ID and does not depend on 3rd party cookies. It enables ad tech platforms to recognize and match users consistently across the open web. Built on top of Yahoo’s robust and proprietary ID Graph it delivers a higher find rate of audiences on publishers’ sites user targeting that respects privacy.
 
-Verizon Media ConnectID honors privacy choices from the [Verizon Media Privacy Dashboard](https://www.verizonmedia.com/policies/us/en/verizonmedia/privacy/dashboard/index.html) as well as global privacy acts.
+Verizon Media ConnectID honors privacy choices from the [Yahoo Privacy Dashboard](https://legal.yahoo.com/us/en/yahoo/privacy/dashboard/index.html) as well as global privacy acts.
 
-Add support for Verizon Media ConnectID to your Prebid.js package with:
+Add support for Yahoo ConnectID to your Prebid.js package with:
 
 {: .alert.alert-info :}
-gulp build --modules=userId,verizonMediaIdSystem
+gulp build --modules=userId,connectIdSystem
 
-#### Verizon Media ConnectID Registration
+#### Yahoo ConnectID Registration
 
-A Verizon Media supplied publisher specific pixel Id is required. Reach out to your account manager for assistance with setup.
+A Yahoo supplied publisher specific pixel Id is required. Please reach out to your account manager for assistance with setup.
 
-#### Verizon Media ConnectID Configuration
+#### Yahoo ConnectID Configuration
 
 <div class="table-responsive" markdown="1">
 | Param under userSync.userIds[] | Scope | Type | Description | Example |
 | --- | --- | --- | --- | --- |
-| name | Required | String | The name of this module. | `'verizonMediaId'` |
+| name | Required | String | The name of this module. | `'connectId'` |
 | params | Required | Object | Container of all module params. ||
-| params.pixelId | Required | Number | The Verizon Media supplied publisher specific pixel Id  | `8976` |
+| params.pixelId | Required | Number | The Yahoo supplied publisher specific pixel Id  | `8976` |
 | params.he | Required | String | The SHA-256 hashed user email address |`'ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4'`|
 | storage | Required | Object | Defines where and for how long the results of the call to get a user ID will be stored. | |
 | storage.type | Required | String | Defines where the resolved user ID will be stored (either `'cookie'` or `'html5'` localstorage).| `'html5'` |
-| storage.name | Required | String | The name of the cookie or html5 localstorage where the resolved user ID will be stored. | `'connectid'` |
+| storage.name | Required | String | The name of the cookie or html5 localstorage where the resolved user ID will be stored. | `'connectId'` |
 | storage.expires | Recommended | Integer | How long (in days) the user ID information will be stored. The recommended value is `15` | `15` |
 {: .table .table-bordered .table-striped }
 </div>
 
-#### Verizon Media ConnectID Examples
+#### Yahoo ConnectID Examples
 
 ```
 pbjs.setConfig({
     userSync: {
         userIds: [{
-            name: "verizonMediaId",
+            name: "connectId",
             params: {
               pixelId: 8976,
               he: "ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4"
             },
             storage: {
               type: "html5",
-              name: "connectid",
-              expires: 1
-            }
-        }]
-    }
-})
-```
-
-### MediaWallah OpenLinkID
-
-MediaWallah's openLink is an anonymous person based ID that enables buyers and sellers of media to connect a person and their devices across the web and mobile apps. openLink facilities the buying of media between DSPs, SSPs and publishers.
-
-Add support for MediaWallah OpenLinkID to your Prebid.js package with:
-
-{: .alert.alert-info :}
-gulp build --modules=userId,mwOpenLinkIdSystem
-
-#### MediaWallah OpenLinkID Registration
-
-MediaWallah requires the creation of an accountId a partnerId in order to take advantage of openLink. Please contact your partner resource to get these Ids provisioned.
-
-#### MediaWallah OpenLinkID Configuration
-
-<div class="table-responsive" markdown="1">
-| Param under userSync.userIds[] | Scope | Type | Description | Example |
-| --- | --- | --- | --- | --- |
-| name | Required | String | The name of this module. | `'mwOpenLinkId'` |
-| params | Required | Object | Details for mwOLID syncing. ||
-| params.accountId | Required | String | The MediaWallah assigned Account Id  | `1000` |
-| params.partnerId | Required | String | The MediaWallah assign partner Id |`'1001'`|
-| params.uid | Optional | String | Your unique Id for the user or browser. Used for matching. | `'u-123xyz'` |
-{: .table .table-bordered .table-striped }
-</div>
-
-#### MediaWallah OpenLinkID Examples
-
-```
-pbjs.setConfig({
-    userSync: {
-        userIds: [{
-            name: 'mwOpenLinkId',
-            params: {
-                accountId: '1000',
-                partnerId: '1001',
-                uid: 'u-123xyz'
+              name: "connectId",
+              expires: 15
             }
         }]
     }
@@ -1733,6 +2001,8 @@ Bidders that want to support the User ID module in Prebid.js, need to update the
 | ID System Name | ID System Host | Prebid.js Attr: bidRequest.userId. | EID Source | Example Value |
 | --- | --- | --- | --- | --- | --- | --- |
 | Admixer ID | Admixer | admixerId | admixer.net | "1111" |
+| Adtelligent ID | Adtelligent | bidRequest.userId.adtelligentId | `"1111"` |
+| Akamai DAP ID | Akamai DAP | dapId | akamai.com | "eyJhbGciOiJka....YIsj7"|
 | AMX RTB ID | AMX RTB | amxId | amxrtb.com | "3ca11058-..." |
 | BritePool ID | BritePool | britepoolid | britepool.com | "1111" |
 | DeepIntent ID | Deep Intent | deepintentId | deepintent.com | "1111" |
@@ -1745,21 +2015,24 @@ Bidders that want to support the User ID module in Prebid.js, need to update the
 | ID5 ID | ID5 | id5id | id5-sync.com | {uid: "1111", ext: { linkType: 2, abTestingControlGroup: false } } |
 | IdentityLink | LiveRamp | idl_env | liveramp.com | "1111" |
 | Intent IQ ID | Intent IQ | intentiqid | intentiq.com | "1111" |
+| Kinesso ID | Kinesso | kpuid | kpuid.com | "1111" |
 | LiveIntent ID | Live Intent | lipb.lipbid | liveintent.com | "1111" |
 | Lotame Panorama ID | Lotame | lotamePanoramaId | crwdcntrl.net | "e4b9..." |
 | MediaWallah OpenLink ID | MediaWallah | mwOpenLinkId | mediawallahscript.com | "1111" |
 | merkleID | Merkle | merkleId | merkleinc.com | "1111" |
+| naveggId | Navegg | naveggId | navegg.com | "1111" |
 | netID | netID | netId | netid.de | "fH5A..." |
 | NextRoll ID | NextRoll | nextrollId | nextroll.com | "bf3Ka.../SjP/zpVGr09voA" |
 | Novatiq ID | Novatiq | novatiqId | novatiq.com | "1111" |
 | Parrable ID | Parrable | parrableId | parrable.com | {"eid":"01.15946..."} |
+| Publisher Link ID | n/a | publinkId | epsilon.com | |
 | PubProvided ID | n/a | pubProvidedId | publisher domain | "1111" |
 | Quantcast ID | n/a | quantcastId | quantcast.com | "1111" |
 | Tapad ID | Tapad | tapadId | tapad.com | "1111" |
 | SharedID (PBJS 5.x) | n/a | pubcid | pubcid.org | "1111" |
 | SharedID (PBJS 4.x)| Prebid | sharedid | sharedid.org | {"id":"01EAJWWN...", "third":"01EAJ..."} |
 | Unified ID | Trade Desk | tdid | adserver.org | "1111" |
-| Verizon Media ConnectID | Verizon Media | connectid | verizonmedia.com | "72d04af6..." |
+| ConnectID | Yahoo | connectId | yahoo.com | "72d04af6..." |
 
 For example, the adapter code might do something like:
 
@@ -1828,7 +2101,7 @@ If you're an ID provider that wants to get on this page:
 - Add your *IdSystem name into the modules/.submodules.json file
 - Follow all the guidelines in the [contribution page](https://github.com/prebid/Prebid.js/blob/master/CONTRIBUTING.md).
 - Submit a Pull Request against the [Prebid.js repository](https://github.com/prebid/Prebid.js).
-- Fork the prebid.org [documentation repository](https://github.com/prebid/prebid.github.io), modify the /dev-docs/modules/userId.md, and submit a documentation Pull Request as well.
+- Fork the prebid.org [documentation repository](https://github.com/prebid/prebid.github.io), modify /dev-docs/modules/userId.md, /download.md, and submit a documentation Pull Request.
 
 <a name="getUserIds"></a>
 
diff --git a/dev-docs/modules/validationFpdModule.md b/dev-docs/modules/validationFpdModule.md
index 00c3cae15a..571eb26f7f 100644
--- a/dev-docs/modules/validationFpdModule.md
+++ b/dev-docs/modules/validationFpdModule.md
@@ -2,7 +2,7 @@
 layout: page_v2
 page_type: module
 title: Module - First Party Data Validation
-description: Validates First Party Data
+description: Verify First Party Data fields and data types. Not recommended for production use.
 module_code : validationFpdModule
 display_name : First Party Data Validation
 enable_download : true
diff --git a/dev-docs/modules/weboramaRtdProvider.md b/dev-docs/modules/weboramaRtdProvider.md
new file mode 100644
index 0000000000..9fc5ec5e10
--- /dev/null
+++ b/dev-docs/modules/weboramaRtdProvider.md
@@ -0,0 +1,83 @@
+---
+layout: page_v2
+title: Weborama Real Time Data Provider
+display_name: Weborama Real-time Segmentation Module
+description: Weborama Real-time Segmentation Module
+page_type: module
+module_type: rtd
+module_code : weboramaRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# Weborama RTD Segmentation Module
+{:.no_toc}
+
+* TOC
+{:toc}
+
+Weborama provides a Semantic AI Contextual API that classifies in Real-time a web page seen by a web user within generic and custom topics. It enables publishers to better monetize their inventory and unlock it to programmatic.
+
+ORTB2 compliant and FPD support for Prebid versions < 4.29
+
+Please contact prebid-support@weborama.com for more information.
+
+## Publisher Usage
+
+### Configure Prebid.js
+
+Compile the Weborama RTD module into your Prebid build:
+
+`gulp build --modules=rtdModule,weboramaRtdProvider`
+
+Add the Weborama RTD provider to your Prebid config.
+
+
+#### Minimal configuration
+
+```
+pbjs.setConfig(
+    ...
+    realTimeData: {
+        auctionDelay: 1000,
+        dataProviders: [
+            {
+                name: "weborama",
+                waitForIt: true,
+                params: {
+			weboCtxConf: {
+				token: "<token-provided-by-weborama>"
+			}
+                }
+            }
+        ]
+    }
+    ...
+);
+```
+
+### Parameter Descriptions for the Weborama Configuration Section
+
+| Name  |Type | Description   | Notes  |
+| :------------ | :------------ | :------------ |:------------ |
+| name | String | Real time data module name | Mandatory. Always 'Weborama' |
+| waitForIt | Boolean | Mandatory. Required to ensure that the auction is delayed until prefetch is complete | Optional. Defaults to false but recommended to true |
+| params | Object | | Optional |
+| params.weboCtxConf | Object | Weborama Contextual Configuration | Optional |
+| params.weboCtxConf.token | String | Security Token provided by Weborama, unique per client | Mandatory |
+| params.weboCtxConf.targetURL | String | Url to be profiled in the contextual api | Optional. Defaults to `document.URL` |
+| params.weboCtxConf.defaultProfile | Object | default value of the profile to be used when there are no response from contextual api (such as timeout)| Optional. Default is `{}` |
+| params.weboCtxConf.setTargeting|Boolean|If true, will use the contextual profile to set the gam targeting of all adunits managed by prebid.js| Optional. Default is *true*.|
+| params.weboCtxConf.setOrtb2|Boolean|If true, will use the contextual profile to set the ortb2 configuration on `site.ext.data`| Optional. Default is *false*.|
+
+
+### Testing
+
+To view an example of available segments returned by Weborama's backends:
+
+`gulp serve --modules=rtdModule,weboramaRtdProvider,appnexusBidAdapter`
+
+and then point your browser at:
+
+`http://localhost:9999/integrationExamples/gpt/weboramaRtdProvider_example.html`
diff --git a/dev-docs/modules/yieldmoSyntheticInventoryModule.md b/dev-docs/modules/yieldmoSyntheticInventoryModule.md
new file mode 100644
index 0000000000..e6d044d890
--- /dev/null
+++ b/dev-docs/modules/yieldmoSyntheticInventoryModule.md
@@ -0,0 +1,79 @@
+---
+layout: page_v2
+page_type: module
+title: Yieldmo Synthetic Inventory Module
+description: Yieldmo Synthetic Outstream ads
+module_code : yieldmoSyntheticInventoryModule
+display_name : Synthetic Inventory Module
+enable_download : true
+sidebarType : 1
+---
+
+# Yieldmo Synthetic Inventory Module
+
+## Overview
+
+This module enables publishers to set up Yieldmo Synthetic Outstream ads on their pages.
+
+If publishers will enable this module and provide placementId and Google Ad Manager ad unit path, this module will create a placement on the page and inject Yieldmo SDK into this placement. Publisher will then need to get a placement id from their Yieldmo account manager (accounts email) and setup corresponding ad units on the GAM ad server.
+
+## Integration
+
+Build the Yieldmo Synthetic Inventory Module into the Prebid.js package with:
+
+```
+gulp build --modules=yieldmoSyntheticInventoryModule,...
+```
+
+## Module Configuration
+
+```js
+pbjs.que.push(function() {
+    pbjs.setConfig({
+        yieldmo_synthetic_inventory: {
+            placementId: '1234567890',
+            adUnitPath: '/1234567/ad_unit_name_used_in_gam'
+        }
+    });
+});
+```
+
+### Configuration Parameters
+
+|Name |Scope |Description | Example| Type
+| :------------ | :------------ | :------------ | :------------ | :------------ |
+|placementId | required | Yieldmo placement ID | '1234567890' | string
+|adUnitPath | required | Google Ad Manager ad unit path | '/6355419/ad_unit_name_used_in_gam' | string
+
+### How to get ad unit path
+
+Ad unit path follows the format /network-code/[parent-ad-unit-code/.../]ad-unit-code, where:
+
+- network-code is a unique identifier for the Ad Manager network the ad unit belongs to
+- parent-ad-unit-code are the codes of all parent ad units (only applies to non-top level ad units)
+- ad-unit-code is the code for the ad unit to be displayed
+
+Note that all ad unit codes included in the ad unit path must adhere to the [formatting rules](https://support.google.com/admanager/answer/1628457#ad-unit-codes) specified by Ad Manager.
+
+Another and probably the easiest way to get an ad unit path is to get it from the google ad manager ad unit document header generated tag:
+
+```js
+googletag.defineSlot('/1234567/ad_unit_name_used_in_gam', [1, 1], 'ad-container-id').addService(googletag.pubads());
+```
+
+### How to get Yieldmo placement id
+
+Please reach out to your Yieldmo account's person or email to support@yieldmo.com
+
+### Google Ad Manager setup
+
+Yieldmo Synthetic Inventory Module is designed to be used along with Google Ad Manager. GAM should be set as usual, but there are a few requirements:
+
+- Ad unit size should be 1x1
+- Creative should NOT be served into a SafeFrame and also should have 1x1 size
+- Synthetic Inventory Universal Tag should be used as 3rd party creative code
+### Synthetic Inventory Universal Tag
+
+```js
+<div id="ym_%%PATTERN:ym_sim_p_id%%" class="ym"></div><script type="text/javascript">(function(e,t){if(t._ym===void 0){t._ym="";var m=e.createElement("script");m.type="text/javascript",m.async=!0,m.src="//static.yieldmo.com/ym."+Math.round(5*Math.random()/3)+".js",(e.getElementsByTagName("head")[0]||e.getElementsByTagName("body")[0]).appendChild(m)}else t._ym instanceof String||void 0===t._ym.chkPls||t._ym.chkPls()})(document,window);</script>
+```
diff --git a/dev-docs/pbs-bidders.md b/dev-docs/pbs-bidders.md
index 491c6d70a2..d9b5ccee80 100644
--- a/dev-docs/pbs-bidders.md
+++ b/dev-docs/pbs-bidders.md
@@ -49,8 +49,9 @@ You can also download the full <a href="/dev-docs/bidder-data.csv" download>CSV
 | **User IDs** | {% if page.userIds and page.userIds != '' %}{{page.userIds}}{% else %}none{% endif %} | **USP/CCPA Support** | {% if page.usp_supported == true %}yes{% else %}no{% endif %} |
 | **Supply Chain Support** | {% if page.schain_supported  == true %}yes{% else %}no{% endif %} | **COPPA Support** | {% if page.coppa_supported == true %}yes{% else %}no{% endif %} |
 | **Demand Chain Support** | {% if page.dchain_supported  == true %}yes{% else %}no{% endif %} | **Safeframes OK** | {% if page.safeframes_ok and page.safeframes_ok == false %}no{% elsif page.safeframes_ok and page.safeframes_ok == true %}yes{% else %}check with bidder{% endif %} |
-| **Supports Deals** | {% if page.bidder_supports_deals and page.bidder_supports_deals == false %}no{% else %}yes{% endif %} | **Prebid.js Adapter** | {% if page.pbjs == true %}yes{% else %}no{% endif %} |
+| **Supports Deals** | {% if page.deals_supported and page.deals_supported == false %}no{% else %}yes{% endif %} | **Prebid.js Adapter** | {% if page.pbjs == true %}yes{% else %}no{% endif %} |
 | **Mobile App Support** | {% if page.pbs_app_supported and page.pbs_app_supported == false %}no{% elsif page.pbs_app_supported and page.pbs_app_supported == true %}yes{% else %}check with bidder{% endif %} | **Prebid Server Adapter** | yes |
+| **Floors Support** | {% if page.floors_supported == false %}no{% elsif page.floors_supported == true %}yes{% else %}check with bidder{% endif %} | **First Party Data Support** | {% if page.fpd_supported == true %}yes{% elsif page.fpd_supported == false %}no{% else %}check with bidder{% endif %} |
 
 
 <h3>"Send All Bids" Ad Server Keys</h3>
diff --git a/dev-docs/prebid-troubleshooting-guide.md b/dev-docs/prebid-troubleshooting-guide.md
index a842461c37..70f4d1f22b 100644
--- a/dev-docs/prebid-troubleshooting-guide.md
+++ b/dev-docs/prebid-troubleshooting-guide.md
@@ -2,10 +2,6 @@
 layout: page_v2
 title: Prebid.js Troubleshooting Guide
 head_title: Prebid.js Troubleshooting Guide
-description: How to troubleshoot Prebid.js from the perspective of an ad call from start to finish.
-pid: 10
-top_nav_section: dev_docs
-nav_section: troubleshooting
 sidebarType: 1
 ---
 
@@ -14,109 +10,4 @@ sidebarType: 1
 # Prebid.js Troubleshooting Guide
 {:.no_toc}
 
-{: .alert.alert-danger :}
-Prebid.org does not support any version of Prebid.js prior to version 1.0.
-
-Use this guide to troubleshoot your Prebid.js integration. You can follow this guide sequentially to determine whether Prebid.js is working as intended on your website. It takes you through the ad call from start to finish.
-
-* TOC
-{:toc}
-
-## Check Your Prebid Version
-
-The open source code in Prebid.js can change frequently. To see what version of Prebid.js you are using, open your browser console and type `pbjs.version;`.
-
-You can reference this against the changes listed in the [Prebid.js Release Notes](https://github.com/prebid/Prebid.js/releases).
-
-## Delay the Ad Server Call so Key-Values can be Set
-
-Make sure that you delay any calls to the ad server. This allows all of the key-values to be set before the auction in the ad server occurs.
-
-Within Google Ad Manager, this is achieved by adding the following code to your page.  It should be called before any of the ad server code to make sure it runs first.
-
-{% highlight js %}
-var googletag = googletag || {};
-googletag.cmd = googletag.cmd || [];
-googletag.cmd.push(function() {
-     googletag.pubads().disableInitialLoad();
-});
-{% endhighlight %}
-
-## Check the Ad Units on the Page
-
-Make sure the ad units configured for Prebid.js match up with the ad units that have been set up in your ad server.
-
-You can review what ad units have been configured for Prebid by opening your browser console and typing `pbjs.getBidResponses();`. This will show a list of what div IDs are present:
-
-![pbjs.getBidResponses() showing ad units in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/ad-units.png "pbjs.getBidResponses() showing ad units in browser console"){: .pb-lg-img :}
-
-## List your Bids and Bidders
-
-Open your browser console and type `pbjs.getBidResponses();` to see a list of the ad units that have been configured.  This also shows what bids have been returned from each of the bidder partners in chronological order as shown in the screenshot below.
-
-To see all of the winning bids, open your browser console and type [`pbjs.getAllWinningBids();`]({{site.baseurl}}/dev-docs/publisher-api-reference/getAllWinningBids.html).
-
-{: .alert.alert-danger :}
-Keep in mind that any bid responses that come back after [the timeout you configured during setup]({{site.github.url}}/dev-docs/getting-started.html#set-the-ad-server-timeout) will not be sent to the ad server.
-
-{: .alert.alert-success :}
-You can also [print this data to the console in table format]({{site.baseurl}}/dev-docs/troubleshooting-tips.html#see-all-bids-in-the-console) for easier reading.
-
-![pbjs.getBidResponses() in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/bids.png "pbjs.getBidResponses()"){: .pb-lg-img :}
-
-## Verify your Ad Server Targeting
-
-After the auction on page has occurred, Prebid.js will set key-value targeting for the ad server for those bids that have been returned before the [timeout you configured during setup]({{site.github.url}}/dev-docs/getting-started.html#set-the-ad-server-timeout).
-
-To see what values Prebid.js intends to send to the ad server, open your browser console and type `pbjs.getAdserverTargeting();` as shown below:
-
-![pbjs.getAdserverTargeting() in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/ad-server-target.png "pbjs.getAdserverTargeting()"){: .pb-lg-img :}
-
-{: .alert.alert-danger :}
-Note that if no bids are returned, no key-values will be set. You may need to increase your timeout setting or reach out to your bidder partners to determine why no bid responses are being sent.
-
-## Check the Ad Server's Auction
-
-After the Prebid auction has occurred and key-values have been set for the ad server, the ad server will use the line items targeting those key-values within its auction.
-
-If you're using Google Ad Manager, you can verify this by using the [Google Publisher Console](https://support.google.com/dfp_sb/answer/2462712?hl=en), which can be accessed as follows:
-
-+ Open your browser's console and type `googletag.openConsole();`
-
-+ Append `googfc` as a query parameter to the URL.  Then, click the *Delivery Diagnostics* option to reveal most of the information described below.
-
-To make sure your ad server is set up correctly, answer the following questions:
-
-+ **How many ads have been fetched for an ad unit?** Ideally, only 1 ad will be requested on page load. If not, check for unnecessary extra calls to the ad server in your page's source code.  
-
-  ![Google Publisher Console Ad fetch count]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/ad-server-1.png "Google Publisher Console Ad fetch count"){: .pb-sm-img :}
-
-+ **Are the key-values being set in the ad server?** If not, review your page's source code to ensure that the Prebid auction completes **before** sending the key-value targeting to the ad server.  
-
-  ![Google Ad Manager Delivery Troubleshooting]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/ad-server-2.png "Google Ad Manager Delivery Troubleshooting"){: .pb-lg-img :}
-
-+ **Has the ad server order been activated?** If not, you'll have to activate the order to see Prebid-delivered ads.
-
-+ **Are there other higher priority campaigns running within your ad server?** Higher priority campaigns will prevent Prebid ads with a higher CPM bid from winning in the ad server's auction. For testing purposes, you may want to pause these campaigns or have them excluded when the prebid key values are present.
-
-+ **Is there other remnant inventory in the ad server with a higher CPM that is winning?** To test for this, you may want to use a test creative set up within a bidder partner that has a high CPM or create artificial demand with a [bidCPMadjustment]({{site.github.url}}/dev-docs/publisher-api-reference/bidderSettings.html).
-
-+ **Have you set up all of the line items in the ad server to match the [setPriceGranularity setting]({{site.github.url}}/dev-docs/examples/custom-price-buckets.html) within Prebid.js?**  All of the line items that correspond to your price granularity settings must be set up in your ad server.  When there are gaps in the price granularity of your line item setup, bids will be reduced according to the size of the gap.  For example, with [dense granularity]({{site.github.url}}/dev-docs/publisher-api-reference.html#dense-granularity), a $3.32 bid will be sent to the ad server as $3.30.
-
-## Look for the Winning Bid
-
-When a prebid line item wins the ad server's auction, a `renderAd` event will be logged in the browser console. To see this event, you need to do either of the following before the auction:
-
-+ Have typed `pbjs.logging=true` into your your browser console
-
-+ Appended `pbjs_debug=true` as a query parameter to the URL
-
-When this event is logged, it shows that Prebid.js has requested to render the ad from the winning bidder partner, and that this partner's bid has won both the Prebid and ad server auctions.
-
-![renderAd event in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/render-ad.png "renderAd event in browser console"){: .pb-lg-img :}
-
-## Related Topics
-
-+ [Developer Troubleshooting Tips]({{site.github.url}}/dev-docs/troubleshooting-tips.html)
-
-+ [Common Setup Issues]({{site.github.url}}/dev-docs/common-issues.html)
+Moved to a new [Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html)
diff --git a/dev-docs/publisher-api-reference/bidderSettings.md b/dev-docs/publisher-api-reference/bidderSettings.md
index 224ef27548..c2ddb80c18 100644
--- a/dev-docs/publisher-api-reference/bidderSettings.md
+++ b/dev-docs/publisher-api-reference/bidderSettings.md
@@ -58,8 +58,8 @@ you'll need to fully manage the targeting -- the default `hb_` targeting variabl
 **Keyword targeting for all bidders**
 
 The below code snippet is the *default* setting for ad server targeting. For each bidder's bid,
-Prebid.js will set 6 keys (`hb_bidder`, `hb_adid`, `hb_pb`, `hb_size`, `hb_source`, `hb_format`) with their corresponding values.
-In addition, video will receive additional keys: `hb_cache_id`, `hb_uuid`, and `hb_cache_host`.
+Prebid.js will set 6 keys (`hb_bidder`, `hb_adid`, `hb_pb`, `hb_size`, `hb_format`) with their corresponding values.
+In addition, video will receive additional keys: `hb_cache_id` and `hb_cache_host`.
 The key value pair targeting is applied to the bid's corresponding ad unit. Your ad ops team will have the ad server's line items and creatives to utilize these keys.
 
 If you'd like to customize the key value pairs, you can overwrite the settings as the below example shows. *Note* that once you updated the settings, let your ad ops team know about the change, so they can update the line item targeting accordingly. See the [Ad Ops](/adops/before-you-start.html) documentation for more information.
@@ -110,7 +110,7 @@ pbjs.bidderSettings = {
 {% endhighlight %}
 
 {: .alert.alert-warning :}
-Note that the existence of `bidderSettings.adserverTargeting.standard` will prevent the system from adding the standard display targeting values: hb_bidder, hb_adid, hb_pb, hb_size, hb_source, and hb_format. However, if the mediaType is video and `bidderSettings.adserverTargeting.standard` does not specify hb_uuid, hb_cache_id, or hb_cache_host, they will be added unless `bidderSettings.sendStandardTargeting` is set to false.
+Note that the existence of `bidderSettings.adserverTargeting.standard` will prevent the system from adding the standard display targeting values: hb_bidder, hb_adid, hb_pb, hb_size, and hb_format. However, if the mediaType is video and `bidderSettings.adserverTargeting.standard` does not specify hb_uuid, hb_cache_id, or hb_cache_host, they will be added unless `bidderSettings.sendStandardTargeting` is set to false.
 
 <a name="key-targeting-specific-bidder"></a>
 **Keyword targeting for a specific bidder**
diff --git a/dev-docs/publisher-api-reference/getConfig.md b/dev-docs/publisher-api-reference/getConfig.md
index 9ff5f12ff9..99ac02fd88 100644
--- a/dev-docs/publisher-api-reference/getConfig.md
+++ b/dev-docs/publisher-api-reference/getConfig.md
@@ -4,8 +4,9 @@ title: pbjs.getConfig([string])
 description: 
 ---
 
+## Overview
 
-The `getConfig` function is for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned.
+The `getConfig` function is used for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned. Be careful with use of this function, as it returns a reference to the configuration instead of a clone. The readConfig function has been introduced for safer use. 
 
 {% highlight js %}
 /* Get config object */
@@ -15,7 +16,10 @@ config.getConfig()
 config.getConfig('debug')
 {% endhighlight %}
 
-The `getConfig` function also contains a 'subscribe' ability that adds a callback function to a set of listeners that are invoked whenever `setConfig` is called. The subscribed function will be passed the options object that was used in the `setConfig` call. Individual topics can be subscribed to by passing a string as the first parameter and a callback function as the second.  For example:
+
+### Subscribe
+
+The `getConfig` function contains a `subscribe` feature that adds a callback function to a set of listeners that are invoked whenever `setConfig` is called. The `subscribed` function will be passed the `options` object that was used in the `setConfig` call. Individual topics can be subscribed to by passing a string as the first parameter and a callback function as the second.  For example:
 
 {% highlight js %}
 
@@ -31,4 +35,4 @@ unsubscribe(); // no longer listening
 
 {% endhighlight %}
 
-<hr class="full-rule" />
\ No newline at end of file
+<hr class="full-rule" />
diff --git a/dev-docs/publisher-api-reference/getEvents.md b/dev-docs/publisher-api-reference/getEvents.md
index 70fd24a5a7..5964c66b5d 100644
--- a/dev-docs/publisher-api-reference/getEvents.md
+++ b/dev-docs/publisher-api-reference/getEvents.md
@@ -4,23 +4,19 @@ title: pbjs.getEvents()
 description: 
 ---
 
+The `getEvents` method returns a copy of all emitted events since the page loaded.
 
-The methods `onEvent` and `offEvent` are provided for you to register
-a callback to handle a Prebid.js event.
+**Kind**: static method of `pbjs`
 
-The `getEvents` method returns a copy of all emitted events.
+**Args**: none
 
-The optional `id` parameter provides more finely-grained event
-callback registration.  This makes it possible to register callback
-events for a specific item in the event context.
+**Returns**: `array of objects`
 
-For example, `bidWon` events will accept an `id` for ad unit code.
-`bidWon` callbacks registered with an ad unit code id will be called
-when a bid for that ad unit code wins the auction. Without an `id`
-this method registers the callback for every `bidWon` event.
-
-{: .alert.alert-info :}
-Currently, `bidWon` is the only event that accepts the `id` parameter.
+**Returned Object Params**:
+- eventType (see table below)
+- args (varies for each event type)
+- id (only for bidWon, set to adUnit.code)
+- elapsedTime
 
 The available events are:
 
@@ -30,6 +26,7 @@ The available events are:
 | auctionInit   | The auction has started                 | Object containing auction details |
 | auctionEnd    | The auction has ended                   | Object containing auction details |
 | beforeRequestBids | Bids are about to be requested from adapters (added in 3.x) | Array of adunits in the auction |
+| beforeBidderHttp | bidder network request is about be triggered | Array of Bid request objects |
 | bidRequested  | A bid was requested from a specific bidder | Bid request object |
 | bidResponse   | A bid response has arrived              | Bid response object |
 | bidAdjustment | A bid was adjusted                      | Bid response object |
@@ -39,75 +36,21 @@ The available events are:
 | requestBids   | Bids have been requested from adapters (i.e. pbjs.requestBids() was called) | None |
 | addAdUnits    | Ad units have been added to the auction | None |
 | adRenderFailed| Ad rendering failed | Object containing 'reason' and 'message' |
+| adRenderSucceeded | Ad rendering succeeded| Object containing the document containing the ad, the bid, and the adId |
 | auctionDebug  | An error was logged to the console | Object containing 'type' and 'arguments' |
 | bidderDone    | A bidder has signaled they are done responding | Bid request object |
+| bidderError    | A bidder responded with an error | Object with the XMLHttpRequest error and the bid request object `{ error, bidderRequest }` |
 | tcf2Enforcement | There was a TCF2 enforcement action taken | `{ storageBlocked: ['moduleA', 'moduleB'], biddersBlocked: ['moduleB'], analyticsBlocked: ['moduleC'] }` |
 
-The examples below show how these events can be used.
-
-Events example 1
-{% highlight js %}
-
-        /* Log when ad units are added to Prebid */
-        pbjs.onEvent('addAdUnits', function() {
-          console.log('Ad units were added to Prebid.')
-          console.log(pbjs.adUnits);
-        });
-
-        /* Log when Prebid wins the ad server auction */
-        pbjs.onEvent('bidWon', function(data) {
-          console.log(data.bidderCode+ ' won the ad server auction for ad unit ' +data.adUnitCode+ ' at ' +data.cpm+ ' CPM');
-        });
-
-{% endhighlight %}
-
-Events example 2: Use the optional 3rd parameter for the `bidWon` event
-{% highlight js %}
-        /* This handler will be called only for rightAdUnit */
-        /* Uses the `pbjs.offEvent` method to remove the handler once it has been called */
-        var bidWonHandler = function bidWonHandler() {
-            console.log('bidWonHandler: ', arguments);
-            pbjs.offEvent('bidWon', bidWonHandler, rightAdUnit);
-        };
-
-        var rightAdUnit="/111111/right";
-        pbjs.que.push(function () {
-            var adUnits = [{
-                code: rightAdUnit,
-		...
-	    },{
-		...
-	    }];
-
-	    pbjs.addAdUnits(adUnits);
-            pbjs.requestBids({
-		...
-            });
-
-            /* Register a callback for just the rightSlot `bidWon` event */
-            /* Note that defining an event that uses the 3rd parameter must come after initiating the auction */
-            pbjs.onEvent('bidWon', bidWonHandler, rightAdUnit);
+The example below shows how these events can be used.
 
-            ...
-{% endhighlight %}
-
-Events example 3: Dynamically modify the auction
 {% highlight js %}
-	var bidderFilter = function bidderFilter(adunits) {
-	    // pub-specific logic to optimize bidders
-            // e.g. "remove any that haven't bid in the last 4 refreshes"
-	};
-	pbjs.onEvent('beforeRequestBids', bidderFilter);
+      pbjs.getEvents().forEach(event => {
+        console.log("event: "+event.eventType)
+      });
 {% endhighlight %}
 
-Events example 4: Log errors and render fails to your own endpoint
-{% highlight js %}
-        pbjs.onEvent('adRenderFailed', function () {
-              // pub-specific logic to call their own endpoint
-            });
-	pbjs.onEvent('auctionDebug', function () {
-              // pub-specific logic to call their own endpoint
-            });
-{% endhighlight %}
 
-<hr class="full-rule" />
\ No newline at end of file
+## See Also
+- [onEvent](/dev-docs/publisher-api-reference/onEvent.html)
+- [offEvent](/dev-docs/publisher-api-reference/offEvent.html)
diff --git a/dev-docs/publisher-api-reference/getNoBids.md b/dev-docs/publisher-api-reference/getNoBids.md
index 8730a42852..aa2ebd491f 100644
--- a/dev-docs/publisher-api-reference/getNoBids.md
+++ b/dev-docs/publisher-api-reference/getNoBids.md
@@ -5,6 +5,6 @@ description:
 ---
 
 
-Use this method to get all of the bid requests that resulted in a NO_BID.  These are bid requests that were sent to a bidder but, for whatever reason, the bidder decided not to bid on.  Used by debugging snippet in [Tips for Troubleshooting](/dev-docs/troubleshooting-tips.html).
+Use this method to get all of the bid requests that resulted in a NO_BID.  These are bid requests that were sent to a bidder but, for whatever reason, the bidder decided not to bid on.  Used by debugging snippet in the [Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html).
 
-+ `pbjs.getNoBids()`: returns an array of bid request objects that were deliberately not bid on by a bidder.
\ No newline at end of file
++ `pbjs.getNoBids()`: returns an array of bid request objects that were deliberately not bid on by a bidder.
diff --git a/dev-docs/publisher-api-reference/offEvent.md b/dev-docs/publisher-api-reference/offEvent.md
index 1a365aafc2..31dc71af82 100644
--- a/dev-docs/publisher-api-reference/offEvent.md
+++ b/dev-docs/publisher-api-reference/offEvent.md
@@ -1,6 +1,56 @@
 ---
 layout: api_prebidjs
-title: pbjs.offEvent(event, handler, id)
+title: pbjs.offEvent(eventType, handler, id)
 description: 
 ---
 
+Turns off an event callback defined with [onEvent](/dev-docs/publisher-api-reference/onEvent.html)
+
+**Kind**: static method of `pbjs`
+
+**Args**: eventType, callbackFunction, id
+
+**Returns**: none
+
+See the [getEvents](/publisher-api-reference/getEvents.html) function for the full list of eventTypes supported.
+
+Causes PBJS to search through registered event callbacks and remove the
+supplied callbackFunction for the specifc eventType.
+
+The optional `id` parameter provides more finely-grained event
+callback de-registration.  This makes it possible to de-register callback
+events for a specific item in the event context.
+
+Example
+
+{% highlight js %}
+        /* This handler will be called only for rightAdUnit */
+        /* Uses the `pbjs.offEvent` method to remove the handler once it has been called */
+        var bidWonHandler = function bidWonHandler() {
+            console.log('bidWonHandler: ', arguments);
+            pbjs.offEvent('bidWon', bidWonHandler, rightAdUnit);
+        };
+
+        var rightAdUnit="/111111/right";
+        pbjs.que.push(function () {
+            var adUnits = [{
+                code: rightAdUnit,
+                ...
+            },{
+                ...
+            }];
+            pbjs.addAdUnits(adUnits);
+            pbjs.requestBids({
+                ...
+            });
+
+            /* Register a callback for just the rightSlot `bidWon` event */
+            /* Note that defining an event that uses the 3rd parameter must come after initiating the auction */
+            pbjs.onEvent('bidWon', bidWonHandler, rightAdUnit);
+
+            ...
+{% endhighlight %}
+
+## See Also
+- [getEvents](/dev-docs/publisher-api-reference/getEvents.html)
+- [onEvent](/dev-docs/publisher-api-reference/onEvent.html)
diff --git a/dev-docs/publisher-api-reference/onEvent.md b/dev-docs/publisher-api-reference/onEvent.md
index 716048f519..e322367352 100644
--- a/dev-docs/publisher-api-reference/onEvent.md
+++ b/dev-docs/publisher-api-reference/onEvent.md
@@ -1,6 +1,65 @@
 ---
 layout: api_prebidjs
-title: pbjs.onEvent(event, handler, id)
+title: pbjs.onEvent(eventType, handler, id)
 description: 
 ---
 
+This routine allows the page (or module) to create a callback function that's invoked when heading bidding events are fired.
+
+**Kind**: static method of `pbjs`
+
+**Args**: eventType, callbackFunction, id
+
+**Returns**: none
+
+See the [getEvents](/publisher-api-reference/getEvents.html) function for the full list of eventTypes supported.
+
+The optional `id` parameter provides more finely-grained event
+callback registration.  This makes it possible to register callback
+events for a specific item in the event context.
+
+For example, `bidWon` events will accept an `id` for ad unit code.
+`bidWon` callbacks registered with an ad unit code id will be called
+when a bid for that ad unit code wins the auction. Without an `id`
+this method registers the callback for every `bidWon` event.
+
+{: .alert.alert-info :}
+Currently, `bidWon` is the only event that accepts the `id` parameter.
+
+Example 1: Basic event logging
+```
+        /* Log when ad units are added to Prebid */
+        pbjs.onEvent('addAdUnits', function() {
+          console.log('Ad units were added to Prebid.')
+          console.log(pbjs.adUnits);
+        });
+
+        /* Log when Prebid wins the ad server auction */
+        pbjs.onEvent('bidWon', function(data) {
+          console.log(data.bidderCode+ ' won the ad server auction for ad unit ' +data.adUnitCode+ ' at ' +data.cpm+ ' CPM');
+        });
+
+```
+
+Example 2: Dynamically modify the auction
+```
+        var bidderFilter = function bidderFilter(adunits) {
+            // pub-specific logic to optimize bidders
+            // e.g. "remove any that haven't bid in the last 4 refreshes"
+        };
+        pbjs.onEvent('beforeRequestBids', bidderFilter);
+```
+
+Example 3: Log errors and render fails to your own endpoint
+```
+        pbjs.onEvent('adRenderFailed', function () {
+              // pub-specific logic to call their own endpoint
+            });
+        pbjs.onEvent('auctionDebug', function () {
+              // pub-specific logic to call their own endpoint
+            });
+```
+
+## See Also
+- [getEvents](/dev-docs/publisher-api-reference/getEvents.html)
+- [offEvent](/dev-docs/publisher-api-reference/offEvent.html)
diff --git a/dev-docs/publisher-api-reference/readConfig.md b/dev-docs/publisher-api-reference/readConfig.md
new file mode 100644
index 0000000000..734647e762
--- /dev/null
+++ b/dev-docs/publisher-api-reference/readConfig.md
@@ -0,0 +1,18 @@
+---
+layout: api_prebidjs
+title: pbjs.readConfig([string])
+description: 
+---
+
+
+The `readConfig` function is used for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned.  The readConfig function has been introduced for safer use of the getConfig functionality, as it returns a clone. 
+
+{% highlight js %}
+/* Get config object */
+config.readConfig()
+
+/* Get debug config */
+config.readConfig('debug')
+{% endhighlight %}
+
+<hr class="full-rule" />
diff --git a/dev-docs/publisher-api-reference/setConfig.md b/dev-docs/publisher-api-reference/setConfig.md
index 3a580ad401..1d2904bc70 100644
--- a/dev-docs/publisher-api-reference/setConfig.md
+++ b/dev-docs/publisher-api-reference/setConfig.md
@@ -52,7 +52,7 @@ Debug mode can be enabled permanently in a page if desired. In debug mode,
 Prebid.js will post additional messages to the browser console and cause Prebid Server to
 return additional information in its response. If not specified, debug is off.
 Note that debugging can be specified for a specific page view by adding
-`pbjs_debug=true` to the URL's query string. e.g. <code>/pbjs_demo.html?pbjs_debug=true</code> See [Prebid.js troubleshooting tips](/dev-docs/troubleshooting-tips.html) for more information.
+`pbjs_debug=true` to the URL's query string. e.g. <code>/pbjs_demo.html?pbjs_debug=true</code> See [Prebid.js troubleshooting guide](/troubleshooting/troubleshooting-guide.html) for more information.
 
 Turn on debugging permanently in the page:
 {% highlight js %}
@@ -374,34 +374,44 @@ This implies that ranges should have max values that are really the min value of
 
 #### Media Type Price Granularity
 
-The default [Prebid price granularities](#setConfig-Price-Granularity) cap out at $20, which isn't always convenient for video ads, which can command more than $20. One solution is to just set up a
-custom price
-granularity as described above. Another approach is
-`mediaTypePriceGranularity` config that may be set to define granularities for each of five media types:
-banner, video, video-instream, video-outstream, and native. e.g.
+The standard [Prebid price granularities](#setConfig-Price-Granularity) cap out at 20, which isn't always convenient for video ads, which can command more than that. One solution is to set up a custom price
+granularity as described above. Another approach is to use
+`mediaTypePriceGranularity` config that may be set to define different price bucket
+structures for different types of media:
+- for each of five media types: banner, video, video-instream, video-outstream, and native.
+- it is recommended that defined granularities be custom. It's possible to define "standard" granularities (e.g. "medium"), but it's not possible to mix both custom and standard granularities.
 
 {% highlight js %}
-const customPriceGranularity = {
+const customPriceGranularityVideo = {
             'buckets': [
-              { 'precision': 2, 'max':x 5, 'increment': 0.25 },
+              { 'precision': 2, 'max': 5, 'increment': 0.25 },
               { 'precision': 2, 'max': 20, 'increment': 0.5 },
               { 'precision': 2, 'max': 100, 'increment': 1 }
             ]
 };
+const customPriceGranularityBanner = {
+            'buckets': [
+              { 'precision': 2, 'max': 5, 'increment': 0.5 },
+              { 'precision': 2, 'max': 20, 'increment': 1 }
+            ]
+};
 
 pbjs.setConfig({'mediaTypePriceGranularity': {
           'video': customPriceGranularity,   // used as default for instream video
-	  'video-outstream': customPriceGranularityOutstream,
-          'banner': 'medium',
-          'native': 'medium',
+	  'video-outstream': customPriceGranularityBanner,
+          'banner': 'customPriceGranularityBanner'
         }
 });
 {% endhighlight %}
 
 Any `mediaTypePriceGranularity` setting takes precedence over `priceGranularity`.
 
+{: .alert.alert-warning :}
+mediaTypePriceGranularity works in two modes: either auctions contain adunits with a single media type, or all defined price granularities are custom.
+i.e. You cannot run an auction containing a mix of mediatypes across an adunit AND having a mix of "custom" and "standard" price granularities across mediatypes.
+
 {: .alert.alert-info :}
-Note: mediaTypePriceGranularity is the only place that 'video-outstream' or 'video-instream'
+Note that mediaTypePriceGranularity is the only place that 'video-outstream' or 'video-instream'
 are recognized. This was driven by the recognition that outstream often shares line items with banner.
 If the mediatype is video, the price bucketing code further looks at the context (e.g. outstream) to see if there's
 a price granularity override. If it doesn't find 'video-outstream' defined, it will then look for just 'video'.
@@ -459,20 +469,29 @@ The `s2sConfig` properties:
 | `enabled` | Optional | Boolean | Enables this s2sConfig block - defaults to `false` |
 | `timeout` | Required | Integer | Number of milliseconds allowed for the server-side auctions. This should be approximately 200ms-300ms less than your Prebid.js timeout to allow for all bids to be returned in a timely manner. See the Additional Notes below for more information. |
 | `adapter` | Required | String | Adapter to use to connect to Prebid Server. Defaults to 'prebidServer' |
-| `endpoint` | Required | URL | Defines the auction endpoint for the Prebid Server cluster |
-| `syncEndpoint` | Required | URL | Defines the cookie_sync endpoint for the Prebid Server cluster |
+| `endpoint` | Required | URL or Object | Defines the auction endpoint for the Prebid Server cluster.  See table below for object config properties. |
+| `syncEndpoint` | Required | URL or Object | Defines the cookie_sync endpoint for the Prebid Server cluster. See table below for object config properties. |
 | `userSyncLimit` | Optional | Integer | Max number of userSync URLs that can be executed by Prebid Server cookie_sync per request.  If not defined, PBS will execute all userSync URLs included in the request. |
-| `coopSync` | Optional | Boolean | Whether or not PBS is allowed to perform "cooperative syncing" for bidders not on this page. Publishers help each other improve match rates by allowing this. Default is true. Supported in PBS-Java only. |
+| `coopSync` | Optional | Boolean | Whether or not PBS is allowed to perform "cooperative syncing" for bidders not on this page. Publishers help each other improve match rates by allowing this. Default is true. |
 | `defaultTtl` | Optional | Integer | Configures the default TTL in the Prebid Server adapter to use when Prebid Server does not return a bid TTL - 60 if not set |
 | `adapterOptions` | Optional | Object | Arguments will be added to resulting OpenRTB payload to Prebid Server in every impression object at request.imp[].ext.BIDDER. See the example above. |
 | `extPrebid` | Optional | Object | Arguments will be added to resulting OpenRTB payload to Prebid Server in request.ext.prebid. See the examples below. |
 | `syncUrlModifier` | Optional | Object | Function to modify a bidder's sync url before the actual call to the sync endpoint. Bidder must be enabled for s2sConfig. |
 
+If `endpoint` and `syncEndpoint` are objects, these are the supported properties:
+
+{: .table .table-bordered .table-striped }
+| Attribute | Scope | Type | Description |
+|------------+---------+---------+---------------------------------------------------------------|
+| p1Consent | Required | String | Defines the auction endpoint or the cookie_sync endpoint for the Prebid Server cluster for non-consent requests or users who grant consent. |
+| noP1Consent | Required | String | Defines the auction endpoint or the cookie_sync endpoint for the Prebid Server cluster for users who do not grant consent. (This is useful for a server configured to not accept any cookies to ensure compliance regulations.) |
+
 **Notes on s2sConfig properties**
 
-- Currently supported vendors are: appnexus & rubicon
+- Currently supported vendors are: appnexus, openx, and rubicon
 - When using `defaultVendor` option, `accountId` and `bidders` properties still need to be defined.
 - If the `s2sConfig` timeout is greater than the Prebid.js timeout, the `s2sConfig` timeout will be automatically adjusted to 75% of the Prebid.js timeout in order to fit within the auction process.
+- When using the `endpoint` or `syncEndpoint` object configs, you should define both properties.  If either property is not defined, Prebid Server requests for that type of user will not be made.  If you do not need to distinguish endpoints for consent reasons, you can simply define the same URL value in both fields or use the String version of the field (which is configured to use defined URL for all users).
 
 {: .alert.alert-warning :}
 **Errors in bidder parameters will cause Prebid Server to reject the
@@ -506,6 +525,38 @@ pbjs.setConfig({
 
 Additional options for `s2sConfig` may be enabled by including the [Server-to-Server testing module]({{site.baseurl}}/dev-docs/modules/s2sTesting.html).
 
+s2sConfig example with the endpoint attributes defined as strings:
+{% highlight js %}
+pbjs.setConfig({
+    s2sConfig: [{
+        accountId: '1001',
+        bidders: ['bidderA', 'bidderB'],
+        endpoint: 'https://mypbs.example.com/path',
+	syncEndpoint: 'https://mypbs.example.com/path',
+        timeout: 300
+    }]
+})
+{% endhighlight %}
+
+s2sConfig example with the endpoint attributes defined as objects:
+{% highlight js %}
+pbjs.setConfig({
+    s2sConfig: [{
+        accountId: '1001',
+        bidders: ['bidderA', 'bidderB'],
+        endpoint: {
+	   p1Consent: 'https://mypbs.example.com/path',
+	   noP1Consent: 'https://mypbs2.example.com/path'
+	},
+        syncEndpoint: {
+	   p1Consent: 'https://mypbs.example.com/path',
+	   noP1Consent: 'https://mypbs2.example.com/path'
+	}
+        timeout: 300
+    }]
+})
+{% endhighlight %}
+
 **Server-Side Aliases**
 
 You may want to run a particular bidder on the client for banner, but that same bidder on the
@@ -784,9 +835,9 @@ The targeting key names and the associated prefix value filtered by `allowTarget
 | PRICE_BUCKET | `hb_pb` | yes | The results of the [price granularity](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity) calculation. |
 | SIZE | `hb_size` | yes | '300x250' |
 | DEAL | `hb_deal` | yes | |
-| SOURCE | `hb_source` | yes | 'client' or 's2s' |
+| SOURCE | `hb_source` | no | 'client' or 's2s' |
 | FORMAT | `hb_format` | yes | 'banner', 'video', or 'native' |
-| UUID | `hb_uuid` | yes | Network cache ID for video |
+| UUID | `hb_uuid` | no | Network cache ID for video |
 | CACHE_ID | `hb_cache_id` | yes | Network cache ID for AMP or Mobile |
 | CACHE_HOST | `hb_cache_host` | yes | |
 | ADOMAIN | `hb_adomain` | no | Set to bid.meta.advertiserDomains[0]. Use cases: report on VAST errors, set floors on certain buyers, monitor volume from a buyer, track down bad creatives. |
diff --git a/dev-docs/show-prebid-ads-on-amp-pages.md b/dev-docs/show-prebid-ads-on-amp-pages.md
index 0195cc63fe..e03048365e 100644
--- a/dev-docs/show-prebid-ads-on-amp-pages.md
+++ b/dev-docs/show-prebid-ads-on-amp-pages.md
@@ -91,34 +91,40 @@ that doesn't come from /amp parameters:
             }
         }
     },
-    "imp": [
-        {
-            "id": "some-impression-id",
-            "banner": {
-                "format": [
-                    {
-                        "w": 300,
-                        "h": 250
-                    }
-                ]
-            },
-            "ext": {
+    "imp": [{
+      "id": "some-impression-id",
+      "banner": {
+          "format": [{
+            "w": 300,
+            "h": 250
+          }]
+      },
+      "ext": {
+        "prebid": {
+          "bidder": {
                 "bidderA": {
                     // Insert parameters here
                 },
                 "bidderB": {
                     // Insert parameters here
                 }
-            }
+          }
         }
-    ]
+      }
+    }]
 }
-
 ```
 This basic OpenRTB record will be enhanced by the parameters from the call to the [/amp endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html).
 
 ### AMP content page
 
+First ensure that the amp-ad component is imported in the header.
+
+```
+<script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.js"></script>
+```
+This script provides code libraries that will convert `<amp-ad>` properties to the endpoint query parameters usint the [Real Time Config](https://github.com/ampproject/amphtml/blob/main/extensions/amp-a4a/rtc-documentation.md) (RTC) protocol.
+
 The `amp-ad` elements in the page body need to be set up as shown below, especially the following attributes:
 
 + `data-slot`: Identifies the ad slot for the auction.
@@ -130,7 +136,7 @@ e.g. for the AppNexus cluster of Prebid Servers:
 ```html
 <amp-ad width="300" height="250"
     type="doubleclick"
-    data-slot="/19968336/universal_creative"
+    data-slot="/1111/universal_creative"
     rtc-config='{"vendors": {"prebidappnexus": {"PLACEMENT_ID": "13144370"}}, "timeoutMillis": 500}'>
 </amp-ad>
 ```
@@ -139,11 +145,20 @@ e.g. for Rubicon Project's cluster of Prebid Servers:
 ```html
 <amp-ad width="300" height="250"
     type="doubleclick"
-    data-slot="/19968336/universal_creative"
+    data-slot="/1111/universal_creative"
     rtc-config='{"vendors": {"prebidrubicon": {"REQUEST_ID": "1234-amp-pub-300x250"}}, "timeoutMillis": 500}'>
 </amp-ad>
 ```
 
+For other hosts, you can specify the URL directly rather than using one of the convenient vendor aliases. e.g.
+```html
+<amp-ad width="300" height="250"
+    type="doubleclick"
+    data-slot="/1111/universal_creative"
+    rtc-config='{"urls": ["https://prebid-server.example.com/openrtb2/amp?tag_id=1001-amp&w=ATTR(width)&h=ATTR(height)&ow=ATTR(data-override-width)&oh=ATTR(data-override-height)&ms=ATTR(data-multi-size)&slot=ATTR(data-slot)&targeting=TGT&curl=CANONICAL_URL&timeout=TIMEOUT&adc=ADCID&purl=HREF&gdpr_consent=CONSENT_STRING&account=ACCOUNT_ID&gdpr_applies=CONSENT_METADATA(gdprApplies)&addtl_consent=CONSENT_METADATA(additionalConsent)&consent_type=CONSENT_METADATA(consentStringType)]}'
+</amp-ad>
+```
+
 ### HTML Creative
 
 This is the creative that your Ad Ops team needs to upload to the ad server (it's also documented at [Setting up Prebid for AMP in Google Ad Manager]({{site.github.url}}/adops/setting-up-prebid-for-amp-in-dfp.html)).
@@ -244,37 +259,45 @@ If you're using AppNexus' managed service, you would enter something like this:
   height="1"
   sandbox="allow-scripts allow-same-origin"
   frameborder="0"
-  src="https://acdn.adnxs.com/prebid/amp/user-sync/load-cookie.html?endpoint=appnexus&max_sync_count=5">
+  src="https://acdn.adnxs.com/prebid/amp/user-sync/load-cookie.html?endpoint=appnexus&max_sync_count=5&source=amp">
   <amp-img layout="fill" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" placeholder></amp-img>
 </amp-iframe>
 ```
 
-If you are utilizing Magnite's managed service, there's an extra parameter:
+If you are utilizing Magnite's managed service, there's an extra `args` parameter:
 ```html
 <amp-iframe width="1" title="User Sync"
   height="1"
   sandbox="allow-scripts allow-same-origin"
   frameborder="0"
-  src="https://PROVIDED_BY_MAGNITE/prebid/load-cookie.html?endpoint=rubicon&max_sync_count=5&args=account:MAGNITE_ACCOUNT_ID">
+  src="https://GET_URL_FROM_MAGNITE_ACCOUNT_TEAM/prebid/load-cookie.html?endpoint=rubicon&max_sync_count=5&source=amp&args=account:MAGNITE_ACCOUNT_ID">
   <amp-img layout="fill" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" placeholder></amp-img>
 </amp-iframe>
 ```
+
+Or you can specify a full URL to another Prebid Server location (including a QA site) by setting `endpoint` to a URL-encoded string. e.g.
+```html
+<amp-iframe width="1" title="User Sync"
+  height="1"
+  sandbox="allow-scripts allow-same-origin"
+  frameborder="0"
+  src="https://acdn.adnxs.com/prebid/amp/user-sync/load-cookie.html?endpoint=https%3A%2F%2Fprebid-server-qa.example.com%2Fcookie_sync&max_sync_count=5&source=amp">
+  <amp-img layout="fill" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" placeholder></amp-img>
+</amp-iframe>
+```
+
 The usage of `load-cookie.html` and `load-cookie-with-consent.html` is the same. The arguments available on the query string are:
 
 {: .table .table-bordered .table-striped }
 | Param | Scope | Values | Description |
 | --- | --- | --- | --- |
-| endpoint | recommended | appnexus or rubicon | Determines which cluster of prebid servers to load from. Default, for legacy reasons, is appnexus. |
+| endpoint | recommended | 'appnexus', 'rubicon', or URL | Determines which cluster of prebid servers to load from. Default, for legacy reasons, is appnexus. |
+| source | optional | recommended | Set it to 'amp' to tell Prebid Server to exclude iframe syncs, which don't work on AMP. |
 | max_sync_count | optional | integer | How many sync pixels should be returned from Prebid Server |
 | args | optional | attr1:val1,attr2:val2 | These attribute value pairs will be passed to Prebid Server in the /cookie_sync call. The attribute and value will be quoted by the system when appropriate. |
 | gdpr | optional | 0 or 1 | Defines whether GDPR processing is in scope for this request. 0=no, 1=yes. Leave unknown if not sure. |
 | gdpr_consent | optional | String | IAB CMP-formatted consent string |
 
-{% capture endpointNote %}
-Currently, if you need to sync with a Prebid Server other than appnexus or rubicon, you'll need to fork the repo, change the endpoint, and host it somewhere. There is an [issue open to resolve](https://github.com/prebid/prebid-universal-creative/issues/122) this.
-{% endcapture %}
-{% include alerts/alert_note.html content=endpointNote %}
-
 ### AMP RTC and GDPR
 
 The two Prebid Server RTC vendor strings 'prebidappnexus' and 'prebidrubicon'
@@ -283,7 +306,25 @@ support passing GDPR consent to Prebid Server.
 The CONSENT_STRING macro will be populated if you've integrated with a CMP
 that supports amp-consent v2 -- custom CMP integration.
 
-If you're using a custom RTC callout, you'll need to add `gdpr_consent=CONSENT_STRING` to the list of parameters.
+If you're using a custom RTC callout, here are the parameters that can be passed through the RTC string:
+- tag_id
+- w=ATTR(width)
+- h=ATTR(height)
+- ow=ATTR(data-override-width)
+- oh=ATTR(data-override-height)
+- ms=ATTR(data-multi-size)
+- slot=ATTR(data-slot)
+- targeting=TGT
+- curl=CANONICAL_URL
+- timeout=TIMEOUT
+- adc=ADCID
+- purl=HREF
+- gdpr_consent=CONSENT_STRING
+- consent_type=CONSENT_METADATA(consentStringType)
+- gdpr_applies=CONSENT_METADATA(gdprApplies)
+- attl_consent=CONSENT_METADATA(additionalConsent)
+
+See the entries in the [AMP vendors callout file](https://github.com/ampproject/amphtml/blob/main/src/service/real-time-config/callout-vendors.js).
 
 ## Debugging Tips
 To review that Prebid on AMP is working properly the following aspects can be looked at:
diff --git a/dev-docs/troubleshooting-tips.md b/dev-docs/troubleshooting-tips.md
index 874e3d90e6..1b2375c9e1 100644
--- a/dev-docs/troubleshooting-tips.md
+++ b/dev-docs/troubleshooting-tips.md
@@ -3,12 +3,9 @@ layout: page_v2
 title: Dev Tips
 description: Troubleshooting tips for developers implementing Prebid.js Header Bidding.
 pid: 0
-
-top_nav_section: dev_docs
 nav_section: troubleshooting
 redirect_from: "/dev-docs/toubleshooting-tips.html"
 sidebarType: 1
-
 ---
 
 
@@ -16,221 +13,4 @@ sidebarType: 1
 # Tips for Troubleshooting
 {:.no_toc}
 
-This page has tips and tricks for troubleshooting issues with your Prebid.js integration.
-
-* TOC
-{:toc}
-
-## Turn on Prebid.js debug messages
-
-Add `pbjs_debug=true` to the end of your page's URL. For example: <code>/pbjs_demo.html?pbjs_debug=true</code>. This will add two types of messages to your browser's developer console:
-
-1. Prebid.js suppresses Javascript errors in the normal mode to not break the rest of your page. Adding the `pbjs_debug` parameter will expose the Javascript errors.
-2. You'll find additional debug messages. Filter the messages by string `MESSAGE:`. For example:
-
-<br>
-
-![Prebid.js Debug Console]({{ site.github.url }}/assets/images/dev-docs/pbjs_debug-console-log.png){: .pb-sm-img :}
-
-<br>
-
-{: .table .table-bordered .table-striped }
-| Message |  Description   |
-| :----  |:--------|
-| Calling bidder |  When Prebid.js sends out bid requests, this message is logged |
-| Set key value for placement | After all the bids came back, or when timeout is reached, prebid.js will set keyword targeting for the defined ad units. |
-| Calling renderAd | If a header bidding bid wins the ad server's auction, prebid.js will render the winning bid's creative. |
-
-<br>
-
-## Turn on your ad server's developer console
-
-The ad server's developer console usually provide information such as targeting, latency, and key events logging. For example, here is a screenshot of Google Ad Manager's GPT developer console logs:
-
-<br>
-
-![Prebid.js Debug Console]({{ site.github.url }}/assets/images/dev-docs/googfc.png){: .pb-md-img :}
-
-<br>
-
-## See all bids in the console
-
-To print information about all of the bids that come in to the Console on any page that is running Prebid.js, follow these steps.
-
-Open the Chrome Dev Tools.  In the **Sources** tab, next to **Content Scripts**, click the **>>** button and you can add **Snippets**:
-
-![View Snippets in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
-
-<br />
-
-Right-click to add a **New** snippet:
-
-![Add New Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
-
-<br />
-
-Paste in the following code using Control-V (or Command-V on Mac), and give the snippet a name, such as 'show-all-bids':
-
-```javascript
-(function() {
-  function forEach(responses, cb) {
-    Object.keys(responses).forEach(function(adUnitCode) {
-      var response = responses[adUnitCode];
-      response.bids.forEach(function(bid) {
-        cb(adUnitCode, bid);
-      });
-    });
-  }
-  var winners = pbjs.getAllWinningBids();
-  var output = [];
-  forEach(pbjs.getBidResponses(), function(code, bid) {
-    output.push({
-      bid: bid,
-      adunit: code,
-      adId: bid.adId,
-      bidder: bid.bidder,
-      time: bid.timeToRespond,
-      cpm: bid.cpm,
-      msg: bid.statusMessage,
-      rendered: !!winners.find(function(winner) {
-        return winner.adId==bid.adId;
-      })
-    });
-  });
-  forEach(pbjs.getNoBids && pbjs.getNoBids() || {}, function(code, bid) {
-    output.push({
-      msg: "no bid",
-      adunit: code,
-      adId: bid.bidId,
-      bidder: bid.bidder
-    });
-  });
-  if (output.length) {
-    if (console.table) {
-      console.table(output);
-    } else {
-      for (var j = 0; j < output.length; j++) {
-        console.log(output[j]);
-      }
-    }
-  } else {
-    console.warn('NO prebid responses');
-  }
-})();
-```
-
-<br />
-
-Right-click the snippet and choose **Run**:
-
-![Run a Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
-
-<br />
-
-Check the output in Console to see the bids:
-
-![See Snippet Output in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
-
-## See all winning bids in the console
-
-To print information about all of the winning bids that come in to the Console on any page that is running Prebid.js, follow these steps.
-
-Open the Chrome Dev Tools.  In the **Sources** tab, next to **Content Scripts**, click the **>>** button and you can add **Snippets**:
-
-![View Snippets in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
-
-<br />
-
-Right-click to add a **New** snippet:
-
-![Add New Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
-
-<br />
-
-Paste in the following code using Control-V (or Command-V on Mac), and give the snippet a name, such as 'show-all-winning-bids':
-
-```javascript
-var bids = pbjs.getAllWinningBids();
-var output = [];
-for (var i = 0; i < bids.length; i++) {
-    var b = bids[i];
-    output.push({
-        'adunit': b.adUnitCode, 'adId': b.adId, 'bidder': b.bidder,
-        'time': b.timeToRespond, 'cpm': b.cpm
-    });
-}
-if (output.length) {
-    if (console.table) {
-        console.table(output);
-    } else {
-        for (var j = 0; j < output.length; j++) {
-            console.log(output[j]);
-        }
-    }
-} else {
-    console.warn('No prebid winners');
-}
-```
-
-<br />
-
-Right-click the snippet and choose **Run**:
-
-![Run a Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
-
-<br />
-
-Check the output in Console to see the bids (note that this screenshot shows the output from "see all bids" but they're very similar):
-
-![See Snippet Output in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
-
-## Modify bid responses for testing
-
-Using `pbjs.setConfig({debugging:{ ... }})` from the javascript console, it is possible to override and filter bids as they come in.
-When this type of debugging is enabled it will persist across page loads using `sessionStorage`.  This allows
-for easy testing of pages that immediately start auctions (most pages), but also means you need to remember
-to deactivate debugging when you are done (or clear your local storage / use incognito mode when testing).
-
-```
-// Filtering bidders
-javascript console> pbjs.setConfig({
-  debugging: {
-    enabled: true,                     // suppresses bids from other bidders
-    bidders: ['bidderA', 'bidderB']
-  }
-});
-
-// Overwriting bid responses for all bidders
-javascript console> pbjs.setConfig({
-  debugging: {
-    enabled: true,
-    bids: [{
-      cpm: 1.5
-    }]
-  }
-});
-
-// Overwriting bid responses for a specific bidder and adUnit code (can use either separately)
-javascript console> pbjs.setConfig({
-  debugging: {
-    enabled: true,
-    bids: [{
-      bidder: 'bidderA',
-      adUnitCode: '/19968336/header-bid-tag-0',
-      cpm: 1.5
-    }]
-  }
-});
-
-// Disabling debugging
-javascript console> pbjs.setConfig({
-  debugging: {
-    enabled: false
-  }
-});
-```
-
-## Related Reading
-
-+ [Prebid.js FAQ](/dev-docs/faq.html)
-+ [Prebid.js Common Issues](/dev-docs/common-issues.html)
+Moved to [the PBJS Troubleshooting Guide](/troubleshooting/troubleshooting-guide.html).
diff --git a/download.md b/download.md
index 136aa3a74b..d34490f91d 100644
--- a/download.md
+++ b/download.md
@@ -5,6 +5,33 @@ description: Documentation on how to download Prebid.js for header bidding.
 sidebarType: 0
 ---
 
+<style>
+a.tip {
+    border-bottom: 1px dashed;
+    text-decoration: none
+}
+a.tip:hover {
+    cursor: help;
+    position: relative
+}
+a.tip span {
+    display: none
+}
+a.tip:hover span {
+    border: #c0c0c0 1px dotted;
+    padding: 5px 20px 5px 5px;
+    display: block;
+    z-index: 100;
+    left: 0px;
+    background: #f0f0f0;
+    margin: 10px;
+    width: 300px;
+    position: absolute;
+    top: 10px;
+    text-decoration: none
+}
+</style>
+
 <script src="https://cdn.firebase.com/js/client/2.4.2/firebase.js"></script>
 
 <script>
@@ -162,6 +189,9 @@ function get_form_data() {
 {: .alert.alert-warning :}
 Prebid.js is open source software that is offered for free as a convenience. While it is designed to help companies address legal requirements associated with header bidding, we cannot and do not warrant that your use of Prebid.js will satisfy legal requirements. You are solely responsible for ensuring that your use of Prebid.js complies with all applicable laws.  We strongly encourage you to obtain legal advice when using Prebid.js to ensure your implementation complies with all laws where you operate.
 
+{: .alert.alert-danger :}
+**Note:** recommended modules are now checked by default. Please uncheck them as desired.
+
 ### Option 1: Customize your download here
 
 {% assign bidder_pages = site.pages | where: "layout", "bidder" %}
@@ -191,113 +221,129 @@ Prebid.js is open source software that is offered for free as a convenience. Whi
 <br>
 <h4>Analytics Adapters</h4>
 <div class="row">
-{% for page in analytics_pages %}{% if page.enable_download == false %}{% continue %}{% endif %}<div class="col-md-4">
-  <div class="checkbox">
-    <label>
-      <input type="checkbox" analyticscode="{{ page.modulecode }}" class="analytics-check-box"> {{ page.title }}
-    </label>
-  </div>
-</div>
-{% endfor %}
+{% for page in analytics_pages %}{% if page.enable_download == false %}{% continue %}{% endif %}<div class="col-md-4"><div class="checkbox"><label><input type="checkbox" analyticscode="{{ page.modulecode }}" class="analytics-check-box"> {{ page.title }}</label></div></div>{% endfor %}
 </div>
 <br/>
+<h4>Recommended Modules</h4>
+Prebid.org highly recommends that publishers utilize the following modules:
+<br/>
+{% for page in module_pages %}{% if page.recommended == true %}<div class="row"><div class="checkbox" style="background-color: #e1fce2;"><label> <input type="checkbox" CHECKED moduleCode="{{ page.module_code }}" class="bidder-check-box"> <a href="{{page.url}}"><strong>{{ page.display_name }}</strong></a> - {{page.description}}</label></div></div>{% endif %}{% endfor %}
+<br/>
 <h4>General Modules</h4>
 <div class="row">
- {% for page in module_pages %}{% if page.enable_download == false %}{% continue %}{% endif %}<div class="col-md-4"><div class="checkbox">
-  <label> <input type="checkbox" moduleCode="{{ page.module_code }}" class="bidder-check-box"> {{ page.display_name }}</label>
+ {% for page in module_pages %}{% if page.enable_download == false or page.recommended == true or page.vendor_specific == true %}{% continue %}{% endif %}<div class="col-md-4"><div class="checkbox">
+  <label> <input type="checkbox" moduleCode="{{ page.module_code }}" class="bidder-check-box"> <a href="{{page.url}}" class="tip">{{ page.display_name }}<span>{{page.description}}</span></a></label>
 </div></div>{% endfor %}
 </div>
 
+<h4>Vendor-Specific Modules</h4>
+These modules may require accounts with a service provider.<br/>
+<div class="row">
+ {% for page in module_pages %}{% if page.enable_download == false or page.recommended == true %}{% continue %}{% endif %}{% if page.vendor_specific == true %}<div class="col-md-4"><div class="checkbox"><label> <input type="checkbox" moduleCode="{{ page.module_code }}" class="bidder-check-box"> <a href="{{page.url}}" class="tip">{{ page.display_name }}<span>{{page.description}}</span></a></label>
+</div></div>{% endif %}{% endfor %}
+</div>
 
 <h4>User ID Modules</h4>
 <div class="row">  
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="admixerIdSystem" class="bidder-check-box"> Admixer ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="britepoolIdSystem" class="bidder-check-box"> BritePool ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="criteoIdSystem" class="bidder-check-box"> Criteo ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="deepintentDpesIdSystem" class="bidder-check-box"> Deepintent DPES ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="dmdIdSystem" class="bidder-check-box"> DMD ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="fabrickIdSystem" class="bidder-check-box"> Neustar Fabrick ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="flocIdSystem" class="bidder-check-box"> FLoC Cohort ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="haloIdSystem" class="bidder-check-box"> Halo ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="id5IdSystem" class="bidder-check-box"> ID5 ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="identityLinkIdSystem" class="bidder-check-box"> IdentityLink ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="idxIdSystem" class="bidder-check-box"> IDx</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="intentIqIdSystem" class="bidder-check-box"> IntentIQ ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="liveIntentIdSystem" class="bidder-check-box"> LiveIntent ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="lotamePanoramaIdSystem" class="bidder-check-box"> Lotame ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="mwOpenLinkIdSystem" class="bidder-check-box"> MediaWallah OpenLink ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="merkleIdSystem" class="bidder-check-box"> Merkle ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="netIdSystem" class="bidder-check-box"> NetID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="nextrollIdSystem" class="bidder-check-box"> NextRoll ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="novatiqIdSystem" class="bidder-check-box"> Novatiq Snowflake ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="parrableIdSystem" class="bidder-check-box"> Parrable ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="sharedIdSystem" class="bidder-check-box"> SharedID (formerly known as PubCommon)</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="pubProvidedIdSystem" class="bidder-check-box"> PubProvided ID</label>
-</div></div>  
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="quantcastIdSystem" class="bidder-check-box"> Quantcast ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="tapadIdSystem" class="bidder-check-box"> Tapad ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="unifiedIdSystem" class="bidder-check-box"> Unified ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="uid2IdSystem" class="bidder-check-box"> Unified ID 2</label>
-</div></div>  
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="verizonMediaIdSystem" class="bidder-check-box"> Verizon Media ID</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="zeotapIdPlusIdSystem" class="bidder-check-box"> Zeotap ID+</label>
-</div></div>
-<div class="col-md-4"><div class="checkbox">
-<label><input type="checkbox" moduleCode="pubCommonIdSystem" class="bidder-check-box"> PubCommon ID<div style="font-size:80%"> (not in 5.x)</div></label>
-</div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="admixerIdSystem" class="bidder-check-box"> Admixer ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="amxIdSystem" class="bidder-check-box"> AMX RTB ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="akamaiDAPIdSystem" class="bidder-check-box"> Akamai DAP ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="britepoolIdSystem" class="bidder-check-box"> BritePool ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="criteoIdSystem" class="bidder-check-box"> Criteo ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="deepintentDpesIdSystem" class="bidder-check-box"> Deepintent DPES ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="dmdIdSystem" class="bidder-check-box"> DMD ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="fabrickIdSystem" class="bidder-check-box"> Neustar Fabrick ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="flocIdSystem" class="bidder-check-box"> FLoC Cohort ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="haloIdSystem" class="bidder-check-box"> Halo ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="id5IdSystem" class="bidder-check-box"> ID5 ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="identityLinkIdSystem" class="bidder-check-box"> IdentityLink ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="idxIdSystem" class="bidder-check-box"> IDx</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="intentIqIdSystem" class="bidder-check-box"> IntentIQ ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="kinessoIdSystem" class="bidder-check-box"> Kinesso ID</label>
+  </div></div>
+    <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="liveIntentIdSystem" class="bidder-check-box"> LiveIntent ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="lotamePanoramaIdSystem" class="bidder-check-box"> Lotame ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="mwOpenLinkIdSystem" class="bidder-check-box"> MediaWallah OpenLink ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="merkleIdSystem" class="bidder-check-box"> Merkle ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="netIdSystem" class="bidder-check-box"> NetID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="nextrollIdSystem" class="bidder-check-box"> NextRoll ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="novatiqIdSystem" class="bidder-check-box"> Novatiq Snowflake ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="parrableIdSystem" class="bidder-check-box"> Parrable ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="publinkIdSystem" class="bidder-check-box"> Publisher Link ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="sharedIdSystem" class="bidder-check-box"> SharedID (formerly known as PubCommon)</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="pubProvidedIdSystem" class="bidder-check-box"> PubProvided ID</label>
+  </div></div>  
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="quantcastIdSystem" class="bidder-check-box"> Quantcast ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="tapadIdSystem" class="bidder-check-box"> Tapad ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="unifiedIdSystem" class="bidder-check-box"> Unified ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="uid2IdSystem" class="bidder-check-box"> Unified ID 2</label>
+  </div></div>  
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="verizonMediaIdSystem" class="bidder-check-box"> Verizon Media ID</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="zeotapIdPlusIdSystem" class="bidder-check-box"> Zeotap ID+</label>
+  </div></div>
+  <div class="col-md-4"><div class="checkbox">
+  <label><input type="checkbox" moduleCode="pubCommonIdSystem" class="bidder-check-box"> PubCommon ID<div style="font-size:80%"> (not in 5.x)</div></label>
+  </div></div>
 </div>
 
 <br>
diff --git a/examples/index.md b/examples/index.md
index 4a488d159c..c9d62bb27e 100644
--- a/examples/index.md
+++ b/examples/index.md
@@ -13,7 +13,7 @@ sidebarType:
 
 - [Basic Example]({{site.baseurl}}/dev-docs/examples/basic-example.html)
 - [Prebid Native]({{site.baseurl}}/dev-docs/examples/native-ad-example.html)
-- [Prebid Mutli-Format]({{site.baseurl}}/dev-docs/examples/multi-format-example.html)
+- [Prebid Multi-Format]({{site.baseurl}}/dev-docs/examples/multi-format-example.html)
 
 
 ## Prebid Video
diff --git a/examples/legacy/simple.html b/examples/legacy/simple.html
index c9a3dd9aa1..2cc6b3fd00 100644
--- a/examples/legacy/simple.html
+++ b/examples/legacy/simple.html
@@ -2,8 +2,8 @@
 
     <head>
         <link rel="icon" type="image/png" href="/favicon.png">
-        <script async src="//www.googletagservices.com/tag/js/gpt.js"></script>
-        <script async src="//acdn.adnxs.com/prebid/not-for-prod/prebid.js"></script>
+        <script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
+        <script async src="https://acdn.adnxs.com/prebid/not-for-prod/prebid.js"></script>
         <script>
             var sizes = [
                 [300, 250]
diff --git a/faq/prebid-server-faq.md b/faq/prebid-server-faq.md
index 897921131b..8ae4ce15de 100644
--- a/faq/prebid-server-faq.md
+++ b/faq/prebid-server-faq.md
@@ -168,3 +168,37 @@ Another way is to [register for our host company mailing list](/prebid-server/ho
 Prebid Server is not a full-fledged SSP. Any DSP bid adapters should keep this in mind when it comes to assuming SSP functionality like resolving OpenRTB macros. We debated building this functionality into PBS, but realized it would take precious milliseconds away from the overall header bidding auction to scan kilobytes of bidder creatives for the 9 different OpenRTB macros. Since so few bidders require this functionality, it makes sense to have those adapters do it themselves.
 
 If an adapter doesn't resolve its own macros, AUCTION_PRICE will eventually get resolved by the [Prebid Universal Creative](https://github.com/prebid/prebid-universal-creative), but by then the bid price will be in the ad server currency and quantized by the price granularity. This will likely cause reporting discrepancies.
+
+## Does Prebid Server support region-specific endpoints for bidders?
+
+Yes. This is handled by the PBS host company in their datacenter config.
+Bidders that want to make use of region-specific endpoints will need to work
+with each PBS host company:
+
+- determine which regions the host company supports
+- map the regions to the bidder's endpoints
+- the host company overrides the bidder's default auction endpoint when they deploy the configuration for each region.
+
+We recognize that it's inconvenient for bidders to be required to have this
+conversation with each host company, but there's really not a better way
+in an open source project. Any number of companies may choose to host
+PBS and we cannot constrain them into a defined set of regions.
+
+## Can bidder endpoints differ by publisher?
+
+You may not use an endpoint domain as a bidder parameter. Prebid Server is not
+an open proxy. If absolutely necessary, you may specify a portion of the
+domain as a parameter to support geo regions or account specific servers.
+However, this is discouraged and may degrade the performance of your adapter
+since the server needs to maintain more outgoing connections. Host companies
+may choose to disable your adapter if it uses a dynamically configured domain.
+
+e.g. this config is not allowed because the entire domain name is a variable:
+
+```
+endpoint: "https://{host}/path"
+```
+but this would be ok:
+```
+endpoint: "https://{host}.example.com/path"
+```
diff --git a/features/InterstitialAds.md b/features/InterstitialAds.md
index 3eda2187fa..e034212528 100644
--- a/features/InterstitialAds.md
+++ b/features/InterstitialAds.md
@@ -54,7 +54,7 @@ pbjs.addAdUnits({
         }
     },
     ortb2Imp: {
-        intl:1
+        instl:1
     },
     ...
 });
diff --git a/features/firstPartyData.md b/features/firstPartyData.md
index cceb41322d..c8ec385e1c 100644
--- a/features/firstPartyData.md
+++ b/features/firstPartyData.md
@@ -63,7 +63,7 @@ pbjs.setConfig({
 		userrating: "4",
 		data: [{
           	    name: "www.dataprovider1.com",
-          	    ext: { "segtax": 1 },
+          	    ext: { segtax: 4 },
 		    segment: [
             		{ id: "687" },
             		{ id: "123" }
@@ -83,7 +83,7 @@ pbjs.setConfig({
            keywords: "a,b",
 	   data: [{
 	       name: "dataprovider.com",
-	       ext: { segtax: 3 },
+	       ext: { segtax: 4 },
                segment: [
 		  { id: "1" }
                ]
@@ -177,6 +177,82 @@ pbjs.setBidderConfig({ // different bidders can receive different data
 });
 {% endhighlight %}
 
+### Supplying App Content Data
+
+Occasionally, an app which embeds a webview might run Prebid.js. In this case, the app object is often specified for OpenRTB, and the site object would be invalid. When this happens, one should specify app.content.data in place of site.content.data.
+
+{% highlight js %}
+pbjs.setConfig({
+  ortb2: {
+    app: {
+      name: "myappname",
+      keywords: "power tools, drills",
+      content: {
+        data: [
+          {
+            name: "www.dataprovider1.com",
+            ext: {
+              segtax: 6
+            },
+            segment: [
+              {
+                id: "687"
+              },
+              {
+                id: "123"
+              }
+            ]
+          },
+          {
+            name: "www.dataprovider1.com",
+            ext: {
+              segtax: 7
+            },
+            segment: [
+              {
+                id: "456"
+              },
+              {
+                id: "789"
+              }
+            ]
+          }
+        ]
+     }
+    }
+  }
+)
+
+{% endhighlight %}
+
+### Supplying OpenRTB Content Data
+OpenRTB `content` object describes specific (mostly audio/video) content information, and it is useful for targeting.
+For website ad, the content object should be defined in `ortb2.site.content`, for non-browser ad, it should be defined in `ortb2.app.content`
+
+{% highlight js %}
+pbjs.setConfig({
+    ortb2: {
+        site: {
+            content: {
+                id: "some_id",
+                episode: "1",
+                title: "some title",
+                series: "some series",
+                season: "s1",
+                artist: "John Doe",
+                genre: "some genre",
+                isrc: "CC-XXX-YY-NNNNN",
+                url: "http://foo_url.de",
+                cat: ["IAB1-1", "IAB1-2", "IAB2-10"],
+                context: "7",
+                keywords: ["k1", "k2"],
+                live: "0"
+            }
+        }
+    }
+});
+{% endhighlight %}
+
 ## Segments and Taxonomy
 
 The [IAB](https://iab.com) offers standard content and audience taxonomies for categorizing sites and users. Prebid supports defining these values as first party data in `site.content.data` or `user.data` as shown in the examples above.
@@ -188,7 +264,7 @@ Segment support is still under development. You can follow the [Prebid.js discus
         user: {
 	   data: [{
 	       name: "dataprovider.com", // who resolved the segments
-	       ext: { segtax: 3 },       // taxonomy used to encode the segments
+	       ext: { segtax: 4 },       // taxonomy used to encode the segments
                segment: [
 		  { id: "1" }
                ]
diff --git a/features/timeouts.md b/features/timeouts.md
index aa07e5ddef..d3d592b91b 100644
--- a/features/timeouts.md
+++ b/features/timeouts.md
@@ -26,7 +26,7 @@ header bidding activities. Determining this value is a delicate balance: too sho
 may go down due to delaying the ad server call to the point where users have left
 the page. Publishers must determine the value that works for them, considering
 a balance of factors: average user time on page, direct sellthrough, value of different ad channels, and average user network delay.
-3. **Timout Buffer** - The JavaScript timer environment is not perfectly accurate
+3. **Timeout Buffer** - The JavaScript timer environment is not perfectly accurate
 because competing JavaScript on the page can delay the header bidding auction
 or the recognition that auction results have returned. By default, Prebid.js adds a 400ms buffer to the Auction Timeout to account for the noisy environment. Publishers can
 change this default value with the [`timeoutBuffer`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-timeoutBuffer) configuration.
diff --git a/guide.md b/guide.md
index f397c5a8d5..434d04a776 100644
--- a/guide.md
+++ b/guide.md
@@ -9,14 +9,32 @@ sidebarType: 0
 
 # Prebid Website Maintenance Guide
 
-v 1.1  
-Sept 7, 2019
+v 1.2  
+Sept 24, 2021
 
 ***
 
+## Reviewing Pull Requests and Issues
+
+Being a reviewer means you're in weekly rotation where you keep an eye on pull requests (PRs) and issues opened in this repo.
+
+### PR Review Guidelines
+
+1. Make sure no inappropriate changes are made. This covers obvious things like bad language and content, but we also don't allow overt marketing language on the site. Phrases like "we're the best BLAH" or "number one FOOZIT" need to be toned down.
+2. Make sure competitors aren't messing with each other's docs. This can be hard to tell because we don't know which github handles belong to which companies, but in general, if a destructive or suspicious change is being made to a doc, check on the Prebid Slack channel to confirm that the affected company approves the change.
+3. Make sure the change doesn't break formatting. It's not always necessary to preview locally, but for large changes, it's worthwhile verifying visually because markdown can be cranky.
+4. Help the author with basic readability - if you as a reviewer don't understand a sentence, probably others will have trouble too. Push back and ask questions about what they're really trying to say.
+5. We don't generally merge a docs PR until the related code is released. Prebid.js releases happen on Weds or Thurs, and people really like to have their docs PRs merged shortly after the code is released. For Prebid Server, it's ok to merge the docs after the code is merged.
+6. Fix broken or out-of-date things you run across. At least flag it in the team slack channel so we can fix it someday.
+7. Bid Adapter Guidelines
+    1. Check the front-matter: required fields are title and either pbjs or pbs.
+    2. Every adapter needs a parameters table that contains exactly 5 columns in this order: Name, Scope, Description, Example, Type.
+    3. Discourage full-page HTML examples. Better to have just the bidder-specific logic and a pointer to a standard Prebid.js example.
+    4. All headers must be level 3, 4, or 5.
+
 ## Core Technologies
 
-The Prebid website is developed using [Jekyll](https://jekyllrb.com/), a static site generator which uses the following technology to create and style HTML pages.
+The Prebid website is developed using [GitHub pages](https://pages.github.com/) and [Jekyll](https://jekyllrb.com/), a static site generator which uses the following technology to create and style HTML pages. See the [main README file](https://github.com/prebid/prebid.github.io/blob/master/README.md) for instructions on how to set this up.
 
 **Markdown**: The majority of the content is written in Markdown language. Jekyll transform this into raw HTML.
 
@@ -34,11 +52,18 @@ Learn more about [Liquid](https://help.shopify.com/en/themes/liquid/basics)
 
 **CSS**: The site builds on the base Bootstrap template with custom CSS stored in the style.css file.
 
-***
+### Environment
+
+- prebid.org is built with Wordpress. We call it "the marketing site". We generally use a contracting company to make major updates there so it's pretty. But if you know Wordpress, we may give you permissions to do minor updates there.
+- docs.prebid.org is the Github pages site. We call it "the docs site".
+- dev.prebid.org is served through Netlify from the 'dev' branch of the repo. It's often out of date and only used for major projects or for sharing major docs for external review.
+- stage.prebid.org is also served through Netlify, but from the 'staging' branch. You should assume it's out of date.
+
+On the rare occasions where we need to use the 'dev' or 'stage' sites, we just check with each other to make sure it's not already being used for something.
 
 ## Site Config
 
-The _config.yml file (note underscore prefix) sets the base configuration for the site. Refer to [Jekyll](https://jekyllrb.com/docs/configuration/) documentation on which properties can be set in the _congig.yml file.
+The _config.yml file (note underscore prefix) sets the base configuration for the site. Refer to [Jekyll](https://jekyllrb.com/docs/configuration/) documentation on which properties can be set in the _config.yml file.
 
 ***
 
@@ -236,18 +261,14 @@ The attributes in the Jekyll 'front matter' drive various behaviors and dynamic
 | ----- | ------ | ------ | ------ |
 | layout | yes | bidder | Links this file to the bidder.html layout |
 | title | yes | company name | For display |
+| pbjs | sorta | true or false | defines whether this is a Prebid.js bidder |
+| pbs | sorta | true or false | defines whether this is a Prebid Server bidder |
 | description | no | - | Not used |
-| hide | no | - | Not used |
 | biddercode | yes | preferred bidder code | Used as the default ad server targeting suffix and the default download filename |
 | aliasCode | no | download filename | Overrides the filename used to build the PBJS package on the download page |
 | prevBiddercode | no | secondary bidder code | Adds a note about an alternate code that may have been used. |
-| bidder_supports_deals | no | true or false, whether the adapter supports deals | For display. Defaults to 'true'. |
-| s2s_only | no | true or false, whether the adapter is server-to-server only | Adds a note to the display. Defaults to 'false'. |
-| gdpr_supported | no | true or false, whether the adapter supports GDPR | For display. Defaults to 'false'. |
-| coppa_supported | no | true or false, whether the adapter supports COPPA | For display. Defaults to 'false'. |
-| media_types | no | comma-separated list of: banner, video, native | For display. |
-| userIds | no | comma-separated list of supported user id modules | For display. |
-| prebid_member | no | true or false, whether this company is a prebid.org member | For display. |
+| pbjs_version_notes | no | string | Displays on the download page |
+| ANYTHING ELSE | no | string | There are many pieces of metadata (e.g. GDPR support, user IDs supported) that bid adapters can disclose. They're displayed on the bidder's parameter page. |
 
 The bidderCode, aliasCode, and prevBiddercode parameters bear some description.
 Some adapters have a longer bidderCode and a shorter bidderCode -- their adapter supports both (with the `alias` feature) but
diff --git a/identity/sharedid.md b/identity/sharedid.md
index 900f27da75..be8913d04a 100644
--- a/identity/sharedid.md
+++ b/identity/sharedid.md
@@ -12,30 +12,60 @@ sidebarType: 9
 {:toc}
 
 {: .alert.alert-warning :}
-As of Prebid.js 5.0, PubCommon ID is no longer supported -- it's been merged into SharedID. Also, SharedID no longer syncs to sharedid.org like it did in Prebid.js 4.x.
+As of Prebid.js 5.0, PubCommon ID is no longer supported -- it's been merged into SharedId. Also, SharedId no longer syncs to sharedid.org like it did in Prebid.js 4.x.
 
 ## What is it?
 
 SharedId is a convenient Prebid-owned first party identifier within the [Prebid UserId Module framework](/dev-docs/modules/userId.html).
 
-## How does it work?
+There are multiple ways to integrate SharedId on your site. See the table below for a breakout of options, and the rest of this document for detailed integration instructions.
+
+{: .table .table-bordered .table-striped }
+| Implementation | Description | Cookie Lifetime | Safari Cookie Lifetime | Technical Difficulty | Revenue Benefit |
+| --- | --- | --- | --- | --- | --- |
+| 3rd Party Cookie Only | No first party cookie solution. | Some Blocked | Blocked | None | Low |
+| User Id Submodule | Including User Id Module in your Prebid.js installation. | 365 days | 7 days | Basic | Good |
+| PubCID Script | Adding the legacy PubCID script; not maintained by Prebid.org. | 365 days | 7 days | High | Varies |
+| SharedId First Party Endpoint | Writing a first party cookie from your web server code. | 365 days | 365 days | Intermediate | Best |
+
+## How does the Prebid UserId Module implementation work?
 
 The SharedID ID system sets a user id cookie in the publisher’s domain.
-Since the cookie is set in the publisher's first party domain it does not fall in scope of browser restrictions on third party cookies.
+Since the cookie is set in the publisher's first party domain it does not fall in scope of browser restrictions on third party cookies. Safari has restrictions on first party cookies set via document.cookie. For this reason we recommend considering a server endpoint installation for maximum effect. See the "Alternate Implementations" section below.
 
 ### Prebid.js 5.x
 
-The SharedID module reads and/or sets a random ID in
+The SharedId module reads and/or sets a random ID in
 the cookie name defined by the publisher when initializing
 the module:
 
+Example 1: client-side cookie setting
 ```
 pbjs.setConfig({
     userSync: {
         userIds: [{
-            name: 'sharedId',
+            name: 'sharedId', //"pubCommonId" as a name is supported for backwards compatibility,
             storage: {
-                name: '_sharedID', // name of the 1st party cookie
+                name: '_sharedID', // name of the 1st party cookie, _pubcid is supported for backwards compatibility
+                type: 'cookie',
+                expires: 30
+            }
+        }]
+    }
+});
+```
+
+Example 2: setting the cookie with a first party endpoint
+```
+pbjs.setConfig({
+    userSync: {
+        userIds: [{
+            name: 'sharedId', //"pubCommonId" as a name is supported for backwards compatibility,
+            params: {
+                pixelUrl: "/wp-json/pubcid/v1/extend/" // this parameter identifies your server-side endpoint that will set a first party cookie'
+            }, 
+            storage: {
+                name: '_sharedID', // name of the 1st party cookie, _pubcid is supported for backwards compatibility
                 type: 'cookie',
                 expires: 30
             }
@@ -68,9 +98,9 @@ source value.
 
 ### Before Prebid.js 5.0
 
-In addition to setting a first party cookie, SharedID in Prebid.js 4.x also sets a third party cookie where possible, syncing the first and third party cookies (subject to browser capability and user opt-out).
+In addition to setting a first party cookie, SharedId in Prebid.js 4.x also sets a third party cookie where possible, syncing the first and third party cookies (subject to browser capability and user opt-out).
 
-SharedID in Prebid.js 4.x was transmitted through the header-bidding ecosystem on user.ext.eids with a different 'source':
+SharedId in Prebid.js 4.x was transmitted through the header-bidding ecosystem on user.ext.eids with a different 'source':
 ```
 user: {
     ext: {
@@ -92,20 +122,20 @@ user: {
 
 ### Detailed Walkthrough
 
-This diagram summarizes the workflow for SharedID:
+This diagram summarizes the workflow for SharedId:
 
-![SharedID](/assets/images/sharedid5.png){: .pb-lg-img :}
+![SharedId](/assets/images/sharedid5.png){: .pb-lg-img :}
 
 1. The page loads the Prebid.js package, which includes the SharedId module.
 2. The page enables one or more user ID modules with pbjs.setConfig({usersync}) per the module documentation. The publisher can control which bidders are allowed to receive each type of ID.
-3. If permitted, the SharedID module retrieves and/or sets the designated first party cookie for this user.
+3. If permitted, the SharedId module retrieves and/or sets the designated first party cookie for this user.
 4. When a header bidding auction is run, the ID modules are invoked to add their IDs into the bid requests.
 5. Bid adapters send the additional IDs to the bidding endpoints, along with other privacy information such as GDPR consent, US Privacy consent, and the Global Privacy Control header.
-6. SharedID is used by the bidder for ad targeting, frequency capping, and/or sequential ads.
+6. SharedId is used by the bidder for ad targeting, frequency capping, and/or sequential ads.
 7. Bids are sent to the publisher's ad server, where the best ad is chosen for rendering.
 
 {: .alert.alert-info :}
-In Prebid.js 4.x, when SharedID performed third-party syncing there
+In Prebid.js 4.x, when SharedId performed third-party syncing there
 was an extra step in the diagram between steps 3 and 4 where the module would connect to a server on sharedid.org. This step was
 removed in Prebid.js 5.0.
 
@@ -116,7 +146,7 @@ There are several privacy scenarios in which a user ID is not created or read:
 1. The User ID module suppresses all cookie reading and setting activity
 when the [GDPR Enforcement Module](/dev-docs/modules/gdprEnforcement.html) is in place and there's no consent for Purpose 1.
 2. The User ID module infrastructure supports a first-party opt-out, by setting the `_pbjs_id_optout` cookie or local storage to any value. No other cookies will be set if this one is set.
-3. The SharedID module will suppress the ID when the COPPA flag is set.
+3. The SharedId module will suppress the ID when the COPPA flag is set.
 
 For all other privacy-sensitive scenarios, it is encumbent upon bid adapters and endpoints
 to be aware of and enforce relevant regulations such as CCPA and Global Privacy Control.
@@ -132,9 +162,214 @@ by the publisher.
 Publishers that decide to build a first-party opt-out workflow might follow a process like this:
 - User is presented with an option to turn off ad targeting
 - If the user opts out, the page can do one of two things:
-    - set a _pbjs_id_optout first party cookie
+    - set a `_pbjs_id_optout` first party cookie
     - avoid calling pbjs.setConfig to initialize the user ID modules
 
+## Alternative Implementations
+
+For those not using Prebid's header bidding solution, SharedId can deployed via in inline script reference or from a web server. 
+
+### SharedId Script
+
+For those interested in implementing SharedId without prebid.js. 
+1. Clone the [SharedId script repository](https://github.com/prebid/Shared-id-v2)
+2. Implement the pubcid.js script on the desired page by following the build instructions in the [readme.md](https://github.com/prebid/Shared-id-v2#readme)
+
+Prebid also recommends implementing a method where users can easily opt-out of targeted advertising. Please refer to the User Opt-Out section located at the bottom of this page.
+
+If there are no custom configurations, then just include the script and it'll use the default values.
+
+```
+<script type="text/javascript" src="//myserver.com/pubcid.min.js"></script>
+```
+
+If custom configurations are needed, define the pubcid_options object before inclusion of the script. Below is an example to switch from using local storage to cookie:
+
+```
+<script type="text/javascript">
+   window.pubcid_options = {type: 'cookie'};
+</script>
+<script type="text/javascript" src="//myserver.com/pubcid.min.js"></script>
+```
+
+#### Configuration
+
+Below are the available configuration options for the PubCID script.
+
+{: .table .table-bordered .table-striped }
+| Parameter Name | Type | Description |  | Example |
+| --- | --- | --- | --- | --- |
+| create | boolean | If true, then an id is created automatically by the script if it's missing. Default is true. If your server has a component that generates the id instead, then this should be set to false |  | `true` |
+| expInterval | decimal | Expiration interval in minutes. Default is 525600, or 1 year |  | `525600` |
+| extend | boolean | If true, the the expiration time is automatically extended whenever the script is executed even if the id exists already. Default is true. If false, then the id expires from the time it was initially created. | For publisher server support only.  If true, the publisher's server will create the (pubcid) cookie.  Default is true. | `true` |
+| pixelUrl | string (optional) | For publisher server support only. Where to call out to for a server cookie. |  | `/wp-json/pubcid/v1/extend/`
+| type | string | Type of storage. It's possible to specify one of the following: 'html5', 'cookie'. Default is 'html5' priority, aka local storage, and fall back to cookie if local storage is unavailable. | If true, the expiration time of the stored IDs will be refreshed during each page load. Default is false. | `cookie` |
+
+#### Example Configurations
+
+Always use cookies and create an ID that expires in 30 days after creation.
+
+```
+{ 
+    type: 'cookie',
+    extend: false,
+    expInterval: 43200
+}
+```
+
+Using a SharedId Endpoint implementation, create the cookie once, which will be allowed to expire before it is created again.
+
+```
+{ 
+    type: 'cookie',
+    pixelUrl: '/wp-json/pubcid/v1/extend/',
+    create: false,
+    extend: false
+}
+
+```
+
+### SharedId First Party Endpoint
+
+Add server-side support for SharedId to better handle the ever-increasing restrictions on cookies in modern web browsers by having the SharedId first party cookie written and extended by your web server.
+
+#### CMS
+
+PubCID/SharedId plugins are available for Wordpress and Drupal. Because the CMS can cache pages to improve scalability, it's impractical to set unique cookies during page generation. Instead these plugins require a dynamic endpoint that serves back a blank pixel along with a unique cookie value. The client side script  needs one additional parameter for this URL. Please consult the corresponding plugin documents for default values:
+
+1. Wordpress : Install directly from the [Wordpress admin page](https://wordpress.org/plugins/publisher-common-id/). Install from [GITHUB](https://github.com/prebid/sharedid-wordpress) 
+2. Drupal : Install from [Github](https://github.com/prebid/sharedid-drupal).
+
+#### Endpoint Implementations
+
+The Wordpress and Drupal plugins require that the host company integrate a new endpoint into their webserver that can receive request from the page and set a unique cookie.
+Below are some examples for how to implement this function in various languages or platforms. It is up to the site owner to integrate an appropriate script for their specific scenario.
+
+##### JAVA
+```JAVA
+public class PubCid {
+    private static final String pubcidCookieName = "_pubcid";
+    private static final int expireTime = (int) TimeUnit.DAYS.toSeconds(365); //store cookie for 1 year
+ 
+    /**
+     * Returns the pubcid cookie found in the user's list of cookies.
+     * Always update the expire time to another year so that the cookie persists.
+     *
+     * @param cookies User's list of cookies
+     * @return the pubcid cookie if found, null otherwise
+     */
+    public static Cookie getPubcidCookie(Cookie[] cookies) {
+ 
+        Cookie pubcidCookie = fetchPubcidCookie(cookies);
+        if (pubcidCookie != null)
+            pubcidCookie.setMaxAge(expireTime);
+ 
+        return pubcidCookie;
+    }
+ 
+    /**
+     * Simple function to test if the user has a pubcid cookie
+     *
+     * @param cookies User's list of cookies
+     * @return true if the cookie is found, false otherwise
+     */
+    public static boolean hasPubcidCookie(Cookie[] cookies) {
+        return fetchPubcidCookie(cookies) != null;
+    }
+ 
+    /**
+     * Local function to find the pubcid cookie within the user's list of cookie
+     *
+     * @param cookies User's list of cookies
+     * @return pubcid cookie if found, null otherwise
+     */
+    private static Cookie fetchPubcidCookie(Cookie[] cookies) {
+        if (cookies == null) return null;
+        return Arrays.stream(cookies)
+                .filter(e -> e.getName().equals(pubcidCookieName))
+                .findFirst()
+                .orElse(null);
+    }
+}
+```
+##### PHP
+```PHP
+$cookie_name = '_pubcid';
+$cookie_path = '/';
+$max_age = 365;
+ 
+$value = NULL;
+ 
+// See if the cookie exist already
+ 
+if (isset($_COOKIE[$cookie_name ]))
+    $value = $_COOKIE[$cookie_name];
+ 
+// Obtain site domain if defined
+if (defined(COOKIE_DOMAIN))
+    $cookie_domain = COOKIE_DOMAIN;
+else
+    $cookie_domain = "";
+ 
+// Update the cookie
+if (isset($value)) {
+    setcookie(
+        $cookie_name,
+        $value,
+        time() + $max_age * DAY_IN_SECONDS,
+        $cookie_path,
+        $cookie_domain
+    );
+}
+```
+##### Node.js
+```Node
+const express = require('express');
+const cookieParser = require('cookie-parser');
+const app = express();
+const port = 3000;
+ 
+app.use(cookieParser());
+ 
+app.get('/', function(req, res) {
+ 
+    // Check for existence of _pubcid cookie
+    let value = req.cookies['_pubcid'];
+ 
+    // If pubcid exists, then update its expiration time
+    if (value) {
+        res.cookie('_pubcid', value, {domain: '.example.com', path: '/', expires: new Date(Date.now() + 1000*60*60*24*365)});
+    }
+ 
+    res.render('index');
+});
+ 
+app.listen(port, ()=>console.log(`App listening on port ${port}`));
+```
+##### Apache
+```Apache
+# Add to httpd.conf
+# Requires mod_headers and mod_env
+ 
+# Capture _pubcid cookie value if available
+SetEnvIf Cookie "(^|;\ *)_pubcid=([^;\ ]+)" PUBCID_VALUE=$2
+SetEnvIf Cookie "(^|;\ *)_pubcid=([^;\ ]+)" HAVE_PUBCID=1
+ 
+# Add _pubcid cookie if it exists to the response with 1 year expiration time
+Header add Set-Cookie "_pubcid=%{PUBCID_VALUE}e;Domain=.example.com;Path=/;Max-Age=31536000" env=HAVE_PUBCID
+```
+##### Nginx
+```Nginx
+# Add to a location directive
+ 
+    location /example {
+        set $pubcid_value $cookie__pubcid;
+        if ($pubcid_value) {
+            add_header Set-Cookie "_pubcid=$pubcid_value;Domain=.example.com;Path=/;Max-Age=31536000";
+        }
+    }
+```
+
 ## Related Topics
 
 - [Prebid Identity Overview](/identity/prebid-identity.html)
diff --git a/overview/intro.md b/overview/intro.md
index 914e35f5d9..23342c615b 100644
--- a/overview/intro.md
+++ b/overview/intro.md
@@ -31,7 +31,7 @@ Our flagship product, Prebid.js, is sometimes referred to as simply *Prebid*, bu
 
 ### What is Header Bidding?
 
-Header bidding is a response to a fragmented and inefficient process for digital ad display. It is an alternative to the "waterfall" method, in which impressions impressions are offered to one sales channel at a time, moving down an inflexible stack of sources.
+Header bidding is a response to a fragmented and inefficient process for digital ad display. It is an alternative to the "waterfall" method, in which impressions are offered to one sales channel at a time, moving down an inflexible stack of sources.
 With header bidding, the publisher creates a short delay in their ad serving to obtain bids from many SSPs and ad exchanges. In this way, publishers can receive high value bids on their inventory that may be unavailable through their primary ad server and exchange.
 The returned bids are then passed into the ad server so they can compete with direct demand and the primary ad server's exchange on a level playing field.
 
diff --git a/package.json b/package.json
index 27b2226477..320ee697a4 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
     "test": "echo \"Error: no test specified\" && exit 1",
     "dev": "npm run development",
     "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
-    "watch": "npm run development -- --watch",
+    "watch": "bundle exec jekyll serve",
     "prod": "npm run production",
     "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --nide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
   },
diff --git a/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md b/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md
index cd857e9ad4..01cce946bc 100755
--- a/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md
+++ b/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md
@@ -114,9 +114,9 @@ TargetingParams.setStoreUrl(storeUrl);
 ```
 
 
-### Open Measurment SDK (OMSDK)
+### Open Measurement SDK (OMSDK)
 
-OMSDK is designed to facilitate 3rd party viewability and verification measurement for ads served in mobile app enviroments. Prebid SDK will provide the signaling component to Bid Adapters, by way of Prebid Server, indicating the impression is elligible for OMSDK support. Prebid SDK does not currently integrate with OMSDK itself, instead it will rely on a publisher ad server to render viewability and verification measurement code.
+OMSDK is designed to facilitate 3rd party viewability and verification measurement for ads served in mobile app enviroments. Prebid SDK will provide the signaling component to Bid Adapters, by way of Prebid Server, indicating the impression is eligible for OMSDK support. Prebid SDK does not currently integrate with OMSDK itself, instead it will rely on a publisher ad server to render viewability and verification measurement code.
 
 There three components to signaling support for OMSDK:
 * Partner Name
diff --git a/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md b/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md
index 414d830d01..a118da3145 100644
--- a/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md
+++ b/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md
@@ -151,9 +151,9 @@ Targeting.shared.itunesID
 Targeting.shared.itunesID = itunesID
 ```
 
-### Open Measurment SDK (OMSDK)
+### Open Measurement SDK (OMSDK)
 
-OMSDK is designed to facilitate 3rd party viewability and verification measurement for ads served in mobile app enviroments. Prebid SDK will provide the signaling component to Bid Adapters, by way of Prebid Server, indicating the impression is elligible for OMSDK support. Prebid SDK does not currently integrate with OMSDK itself, instead it will rely on a publisher ad server to render viewability and verification measurement code.
+OMSDK is designed to facilitate 3rd party viewability and verification measurement for ads served in mobile app enviroments. Prebid SDK will provide the signaling component to Bid Adapters, by way of Prebid Server, indicating the impression is eligible for OMSDK support. Prebid SDK does not currently integrate with OMSDK itself, instead it will rely on a publisher ad server to render viewability and verification measurement code.
 
 There three components to signaling support for OMSDK:
 * Partner Name
diff --git a/prebid-mobile/pbm-api/ios/pbm-video-rewarded-adunit-ios.md b/prebid-mobile/pbm-api/ios/pbm-video-rewarded-adunit-ios.md
index d1be426cc1..2befade496 100755
--- a/prebid-mobile/pbm-api/ios/pbm-video-rewarded-adunit-ios.md
+++ b/prebid-mobile/pbm-api/ios/pbm-video-rewarded-adunit-ios.md
@@ -21,7 +21,7 @@ Create a new Video Rewarded Ad Unit associated with a Prebid Server configuratio
 
 
 
-# Paramaters
+# Parameters
 
 Parameters is a sub class of RewardedVideoAdUnit.Create new Parameters class to define the parameters of the video ad unit. Parameters contain the OpenRTB video attributes.
 
diff --git a/prebid-mobile/pbm-api/ios/pbm-videointerstitialadunit-ios.md b/prebid-mobile/pbm-api/ios/pbm-videointerstitialadunit-ios.md
index 385bac77d3..7d54ba038a 100755
--- a/prebid-mobile/pbm-api/ios/pbm-videointerstitialadunit-ios.md
+++ b/prebid-mobile/pbm-api/ios/pbm-videointerstitialadunit-ios.md
@@ -20,7 +20,7 @@ Video Insterstital is only supported with Google Ad Manager.
 `configId(String)`: Prebid Server configuration ID.
 
 
-# Paramaters
+# Parameters
 
 Parameters is a sub class of VideoInterstitialAdUnit.Create new Parameters class to define the parameters of the video ad unit. Parameters contain the OpenRTB video attributes.
 
diff --git a/prebid-mobile/pbm-api/ios/pbm-videooutstreamadunit-ios.md b/prebid-mobile/pbm-api/ios/pbm-videooutstreamadunit-ios.md
index f5379e6be3..93c063b712 100755
--- a/prebid-mobile/pbm-api/ios/pbm-videooutstreamadunit-ios.md
+++ b/prebid-mobile/pbm-api/ios/pbm-videooutstreamadunit-ios.md
@@ -61,7 +61,7 @@ OpenRTB Placement Type represented as an enumeration of values:
 * inFeed is transformed into OpenRTB value 4 to bid adapters
 
 
-### Paramaters
+### Parameters
 
 Parameters is a sub class of videoAdUnit. Create new Parameters class to define the parameters of the video ad unit. Parameters contain the OpenRTB video attributes.
 
diff --git a/prebid-server/developers/add-a-module-java.md b/prebid-server/developers/add-a-module-java.md
new file mode 100644
index 0000000000..b98ec414f4
--- /dev/null
+++ b/prebid-server/developers/add-a-module-java.md
@@ -0,0 +1,226 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Prebid Server | Developers | Adding a Java Module
+
+---
+
+# Prebid Server - Adding a Java Module
+{: .no_toc}
+
+* TOC
+{:toc }
+
+## Overview
+
+This document details how to make a module for PBS-Java.
+
+You will want to be familiar with the following background information:
+
+- the [module overview](/prebid-server/developers/add-a-module.html) 
+- the [PBS-Java Modularity Tech Spec](https://docs.google.com/document/d/1VP_pi7L5Iy3ikHMbtC2_rD5RZTVSc3OkTWKvtRS5x5Y/edit#heading=h.oklyk2bogkx4)
+
+### Coding standards
+
+The module’s code style should correspond to the [PBS-Java project code style](https://github.com/prebid/prebid-server-java/blob/master/docs/code-style.md).
+
+## Module Directory Layout
+
+The Prebid Server repository contains a maven submodule called `all-modules` located in the `extra/modules` folder. It includes all available PBS modules. So, in order to add a new module, fork the repository and create a folder with the desired name inside the modules folder with the following structure:
+
+```
++- prebid-server-java/
+  +- extra/
+    +- modules/
+      +- YOUR_MODULE_NAME/
+        +- pom.xml <- POM of your module
+      +- pom.xml <- POM of all included modules
+```
+
+A benefit of open sourcing your module in this way is that it can use the parent `all-modules` as a maven dependency. It simplifies management of the PBS-Core and other commonly used dependencies and you will be confident that it works well with the current version of Prebid Server. 
+
+### Your module's build file
+
+Here's a partial example of your module-specific `pom.xml` file:
+
+```
+<?xml ...>
+<project ...>
+   <parent>
+       <groupId>org.prebid.server.hooks.modules</groupId>
+       <artifactId>all-modules</artifactId>
+       <version>PREBID_SERVER_VERSION</version>
+   </parent>
+
+   <artifactId>YOUR_MODULE_ARTIFACT_ID</artifactId>
+
+   <name>YOUR_MODULE_TEXTUAL_NAME</name>
+   <description>YOUR_MODULE_DESCRIPTION</description>
+</project>
+```
+
+where:
+- PREBID_SERVER_VERSION is the current version of Prebid Server. The release team will update this value for all modules with each release, but you need to set it to the version of PBS that you're developing with.
+- YOUR_MODULE_ARTIFACT_ID is the name of your module JAR file without version and extension. e.g. ortb2-blocking
+- YOUR_MODULE_TEXTUAL_NAME is unique within the space of all other modules. e.g. instead of naming a module "blocking", a better name would be "ortb2blocking".
+
+### Add your module to the add-modules build file
+
+Add your module within `extra/modules/pom.xml` in the "modules" section:
+
+```
+<modules>
+    ...
+    <module>YOUR_MODULE_ARTIFACT_ID</module>
+</modules>
+```
+
+### Your directory layout
+
+The structure of your module source code inside the modules directory must have a standard maven-compatible structure:
+
+```
++- src/
+  +- main/
+    +- java/ <- source code
+    +- resources/ <- required resources
+  +- test/
+    +- java/ <- tests
+    +- resources/ <- required test resources
++- pom.xml <- POM of your module
++- README.md <- documentation
+```
+
+## Module Code
+
+The quick start is to take a look in two places:
+- the [ortb2-blocking module](https://github.com/prebid/prebid-server-java/tree/master/extra/modules/ortb2-blocking)
+- the [module test cases](https://github.com/prebid/prebid-server-java/tree/master/src/test/java/org/prebid/server/it/hooks)
+
+### Adding module documentation
+It is required to add a "README.md" file to the root of your module folder. Recommended this file contains the description of what the implemented module does, links to external documentation and includes maintainer contact info (email, slack, etc).
+
+The documentation must also live on the docs.prebid.org site. Please add a markdown file to https://github.com/prebid/prebid.github.io/tree/master/prebid-server/pbs-modules
+
+### Hook Interfaces
+
+The Prebid server processing workflow is divided into serveal 'stages' where module authors can code agaist a specific function signature called a 'hook'.
+
+The Prebid Server host company will define which modules to run in which order by setting up a configuration defining which hooks run, and which can run in parallel.
+
+The supported stages are described in the [general module overview](/prebid-server/developers/add-a-module.html#2-understand-the-endpoints-and-stages) and in PBS-Core source code at the "org.prebid.server.hooks" package.
+
+These are the available hooks that can be implemented in a module:
+
+- org.prebid.server.hooks.v1.entrypoint.EntrypointHook
+- org.prebid.server.hooks.v1.auction.RawAuctionRequestHook
+- org.prebid.server.hooks.v1.auction.ProcessedAuctionRequestHook
+- org.prebid.server.hooks.v1.bidder.BidderRequestHook
+- org.prebid.server.hooks.v1.bidder.RawBidderResponseHook
+- org.prebid.server.hooks.v1.bidder.ProcessedBidderResponseHook
+- org.prebid.server.hooks.v1.auction.AuctionResponseHook
+
+In a module it is not necessary to implement all mentioned interfaces but only one (or several) required by your functionality.
+
+Each hook interface internally extends org.prebid.server.hooks.v1.Hook basic interface with methods should be implemented:
+- `code()` - returns module code.
+- `call(...)` - returns result of hook invocation.
+
+### Examples
+
+1) To **update** the request in the `RawAuctionRequestHook` you would return:
+```
+Future.succeededFuture(
+    InvocationResultImpl.<AuctionRequestPayload>builder()
+        .status(InvocationStatus.success)
+        .action(InvocationAction.update)
+        .payloadUpdate(payload ->
+          AuctionRequestPayloadImpl.of(payload.bidRequest().toBuilder()
+                  .id("updated request ID")
+                  .build()))
+    .build()
+);
+```
+
+2) To **reject** the request in the `RawAuctionRequestHook` you would return:
+```
+Future.succeededFuture(
+    InvocationResultImpl.rejected(“The rejection reason”)
+);
+```
+
+3) To supply [analytics tags](/prebid-server/developers/module-atags.html) in the `RawAuctionRequestHook` you would return:
+```
+Future.succeededFuture(
+    InvocationResultImpl.<AuctionRequestPayload>builder()
+        ...
+        .analyticsTags(TagsImpl.of(
+            Collections.singletonList(ActivityImpl.of(
+                "device-id",
+                "success",
+                Collections.singletonList(ResultImpl.of(
+                    "success",
+                    mapper.mapper().createObjectNode()
+                        .put("some-field", "some-value"),
+                AppliedToImpl.builder()
+                       .impIds(Collections.singletonList("impId1"))
+                       .request(true)
+                       .build()))))))
+        ...
+    .build()
+);
+```
+
+More test implementations for each hook can be found in unit-tests at https://github.com/prebid/prebid-server-java/tree/master/src/test/java/org/prebid/server/it/hooks folder.
+
+### Applying results asynchronously
+
+Please note method call() returns a Future object. This means it won’t apply changes immediately but rather when PBS-Core executes it in org.prebid.server.hooks.execution.GroupExecutor#executeHook method.
+
+### Do not block the main thread
+
+Prebid Server Java uses Vert.x in its core, so developers need to keep an eye on blocking the main thread. See the [Vert.x documentation](https://vertx.io/docs/vertx-core/java/#_dont_block_me).
+
+Thus, for any kind of blocking operations it is recommended to use a Vert.x built-in (for example, io.vertx.core.http.HttpClient) or even better - PBS wrapper components (for example, org.prebid.server.vertx.http.HttpClient).
+
+To see how to proceed with async operations, please see similar PBS-Core functionality, for example Currency Conversion Service implementation (class “org.prebid.server.currency.CurrencyConversionService”).
+
+### Configuration
+
+It's possible to define default module configuration which can be read by the module at PBS startup. Please see the [Configuration](https://docs.google.com/document/d/1VP_pi7L5Iy3ikHMbtC2_rD5RZTVSc3OkTWKvtRS5x5Y/edit#heading=h.mh3urph3k1mk) section of the technical specification.
+
+### Testing
+
+Unit tests are required. Each implemented hook must be at least 90% covered by unit tests.
+
+### How to build and install a module
+
+Read about the bunding of modules with PBS in the [bundling section](https://docs.google.com/document/d/1VP_pi7L5Iy3ikHMbtC2_rD5RZTVSc3OkTWKvtRS5x5Y/edit#heading=h.o8dv0neoq4xm) of the technical specification.
+
+## Analytics Adapters and Modules
+
+Each module can inject analytics tags into the request as described in the analytics tags section.
+
+Analytics adapters can receive these tags in a parameter that's been added to the Auction/AMP endpoints. The org.prebid.server.analytics.model.AuctionEvent event object which includes AuctionContext with HookExecutionContext inside.
+
+To get analytics tag you need to go into:
+
+```
+AuctionEvent 
+  -> AuctionContext 
+    -> HookExecutionContext 
+      -> stageOutcomes (select stage)
+        -> groups (iterate through groups)
+          -> hooks (go through hooks and find interested one)
+            -> analyticsTags
+```
+
+The AnalyticsTags object has activities with collection of  org.prebid.server.hooks.v1.analytics.Result objects inside. Each Result has the values() method which returns com.fasterxml.jackson.databind.node.ObjectNode. 
+
+It depends on the particular module implementation how to parse their analytics tags, since the internal structure is custom and depends on the module. Therefore, analytics modules that want to report on specific behavior need to be coded to know about that module. See the ortb2blocking module for an example of what analytics tags may be available.
+
+
+## Further Reading
+
+- [PBS Module Overview](/prebid-server/developers/add-a-module.html)
+- [PBS Module Analytics Tags Conventions](/prebid-server/developers/module-atags.html)
diff --git a/prebid-server/developers/add-a-module.md b/prebid-server/developers/add-a-module.md
new file mode 100644
index 0000000000..502adf870e
--- /dev/null
+++ b/prebid-server/developers/add-a-module.md
@@ -0,0 +1,190 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Prebid Server | Developers | Adding a Module
+
+---
+
+# Prebid Server - Adding a Module
+{: .no_toc}
+
+This document guides you through the process of developing a module for host companies to plug into their instance of Prebid Server.
+We encourage you to look at existing modules for working examples. You can also ask us questions by [submitting a GitHub issue](https://github.com/prebid/prebid-server/issues/new).
+
+{: .alert.alert-info :}
+Modules are currently only supported in [PBS-Java](https://github.com/prebid/prebid-server-java).
+
+
+* TOC
+{:toc }
+
+## Overview
+
+The ability to add optional modules in [Prebid.js](/prebid/prebidjs.html) has been widely used,
+with dozens of interesting features forming a healthy ecosystem of vendor choice that's good for publishers and the industry.
+
+Prebid Server (Java) supports a rich module interface that
+allows anyone to contribute functionality at predefined places
+along the request pipeline. Here's the general development process:
+
+1. The module writer designs the feature, then optionally posts it as an [issue](https://github.com/prebid/prebid-server/issues) for community feedback.
+1. They then code the module and unit tests and write user documentation.
+1. Code, tests, and documentation are submitted to the Prebid Server team for review.
+1. Once accepted, Prebid Server Host companies may choose to activate the new module for their publishers.
+1. Publishers can utilize the feature, doing any required account setup described in the module documentation.
+
+The first module written was the ORTB2 Blocking module. Example ideas for future modules include creative validation and traffic quality.
+If you have an idea for a module that's not feasible (e.g. a new endpoint), open [an issue](https://github.com/prebid/prebid-server/issues) with a detailed description of what you're looking to do.
+
+### Terminology
+
+- **PBS**: short for **P**re**b**id **S**erver
+- **PBS-core**: The inner workings of Prebid Server -- not part of a module, bid adpater, or analytics adapter
+- **PBS-Java**: the Java version of Prebid Server
+- **PBS-Go**: the Go-Lang version of Prebid Server
+- **Host Company**: the entity running the PBS cluster, e.g. one of the ones on [this list](https://prebid.org/product-suite/managed-services/).
+- **Module**: a coherent feature set that plugs into Prebid Server with its own configuration.
+- **Stage**: a place in the Prebid Server process flow from which a module can be invoked.
+- **Hook**: a function in the module code that executes at a given stage with a particular function signature. 
+- **Endpoint**: an externally-visible service that responds to web requests. e.g. /openrtb2/auction, /cookie-sync.
+- **Analytics Tags**: a mechanism for a module to inform other modules of what it has encountered or changed.
+
+## Planning Your Module
+
+### 1. Review the Module Rules
+
+There are a number of things modules are not allowed to do
+without disclosing prominently on their documentation. Please review
+the [Module Rules](/dev-docs/module-rules.html) page. Here are some highlights:
+
+- a module can't add pixels to the creative without disclosure
+- every module must obey privacy regulations: GDPR, CCPA, COPPA
+- modules cannot create new bids. That is reserved for bid adapters.
+- modules must be configurable to make data available to all bidders. i.e. you can't make a module that works always and forever with just one bidder without prominent disclosure.
+
+### 2. Understand the Endpoints and Stages
+
+Here's a description of the Stages of a PBS request that modules can tap into for each supported endpoint:
+
+{: .table .table-bordered .table-striped }
+| Stage | Description | Endpoints | Example Use Cases |
+|-------------+-------------+-------+-----|
+| Entrypoint | Hook functions can see the raw request before PBS has processed or validated anything | auction, amp, video | A/B testing of account parameters, Alternate account validation, AMP pre-processing |
+| Raw Auction Request | Validations have been done, but no enrichments | auction, amp, video | A/B testing of StoredRequests, Advanced device detection, Traffic Quality |
+| Processed Auction Request | Any stored requests have been merged in and all PBS enrichments are done | auction, amp, video | Inject First Party Data, Channel determination, Bid floors, Bidder optimization |
+| Bidder Request | The request has been customized for a particular bidder in the auction | auction, amp, video | Bidder-specific bcat/badv, Bidder-specific deals |
+| Raw Bidder Response | Hook functions can get access to the unprocessed bidder response | auction, amp, video | Response validations |
+| Processed Bidder Response | PBS has done its own validations on an individual bidder's response | auction, amp, video | Advanced CPM adjustments, Custom VAST macros |
+| Auction Response | Last step before the response goes back to the client | auction, amp, video | Inject ad server targeting, alternate auction winner logic |
+
+### 3. Figure out which Stages You're going to Hook Into
+
+A module may be comprised of:
+
+- init and hook functions that are called by Prebid Server
+- internal functions and state
+- optional external connections to data sources or other services
+
+Some modules may plug into only one endpoint and one stage of processing. Others may coordinate activity across multiple stages. For example,
+this diagram illustrates the design of a module that's configured to plug into two stages of
+the processing workflow:
+
+![Prebid Server Modularity Architecture](/assets/images/prebid-server/module-example.png){:class="pb-xlg-img"}
+
+### 4. Module Hook Actions: Read, Change and/or Reject
+
+There are a few basic ways a module's hook function can respond to PBS-core:
+
+- inspect the request/response
+- change the request by adding a new field to the request/response or updating an existing field
+- instruct PBS-core to reject the request or response entirely
+
+The amount of time your module takes to perform its actions will be limited
+by PBS-core. For example, if a creative validation module needs to 'phone home'
+to analyze the bid creative, it will have a tight window of a few milliseconds
+to get the response and apply it. Your documentation can request how long
+the module needs, but keep in mind that PBS host companies may not use your
+module if it leads to an increased rate in header bidding timeouts.
+
+### 5. Determine what Should be Configurable
+
+There are two sources of configuration for each module:
+
+#### 5.1. Initialization Config
+
+When Prebid Server starts up, it can be configured to initialize
+modules supported by the Host Company. This start up config should contain
+values that are constant across requests. e.g.:
+
+- URLs for external services
+- host-company specific settings like cache sizes, installation ID, global timeout, other defaults
+
+Values in this config can only change with a bounce of Prebid Server.
+
+#### 5.2. Runtime Config
+
+For each user request, modules can have account-specific
+configuration stored in the account-config data source. This configuration
+is used to store parameters that could vary for different publishers 
+utilizing this PBS instance. e.g.:
+
+- publisher account ID
+- application config (e.g. 'blocked advertisers')
+- publisher timeout override
+
+### 6. Consider Storage Needs
+
+If your module will require state of some sort beyond configurtaion, you'll have to provide instructions
+to the PBS host company. Examples:
+
+- a module could require a No-SQL endpoint that's populated at init and refreshed periodically
+- modules may require a local SQL DB populated with application data
+- some modules may require access to local disk to read a security certificate
+
+### 7. Think about Analytics Tags
+
+Analytics Tags (aka 'ATags') are a log mechanism provided by PBS-core to inform downstream
+modules about what's happened in the request so far. Use of the Analytics Tag structure
+is completely optional, but there may be application or reporting reasons for sharing
+the results. Examples:
+
+- The [ORTB2 Blocking module](/prebid-server/pbs-modules/ortb2-blocking.html) creates ATags informing analytics adapters that
+a bid response was inspected and/or blocked for violating a publisher-defined
+rule like advertiser domains. This data can be used to alert the analytics users
+that a given bidder is losing bid opportunities by not adhering to the auction parameters.
+- A bid optimization module could inform analytics how many times it dropped a bidder from an auction for various reasons. e.g. "dropped this bidder X% of the time due to geographic reasons, Y% of the time due to session length.
+
+See the [Module Analytics Tag Conventions](/prebid-server/developers/module-atags.html) for more specific details
+about how to format ATags.
+
+### 8. Write the Code, Config, and Unit Tests
+
+The details of the implementation depend on the platform.
+
+- PBS-Java: see [Adding a PBS-Java module](/prebid-server/developers/add-a-module-java.html)
+- PBS-Go: TBD
+
+Other rules for open source PBS pull request:
+
+- Unit test coverage must exceed 90%.
+- A maintainer email address must be provided and be a group, not an individual. e.g. "support@example.com rather than jsmith@example.com
+
+### 9. Write the Module Documentation
+
+Fork the [documentation repo](https://github.com/prebid/prebid.github.io) and
+create a file in /prebid-server/pbs-modules. You can start by copying one of the existing files. It should contain:
+
+- A description of the module functionality: why people might be interested in using it.
+- Prerequisites: any necessary account activation, other required modules, etc.
+- Configuration: both init and runtime
+- Analytics Tag support
+- Privacy Support: disclose whether the module has user privacy implications and support for GDPR, CCPA, etc.
+
+### 10. Submit the Pull Requests
+
+When everthing checks out on your dev environment, submit the PRs for review.
+
+## Further Reading
+
+- [Prebid Server Module List](/prebid-server/pbs-modules/index.html)
+- [PBS Module Analytics Tags Conventions](/prebid-server/developers/module-atags.html)
diff --git a/prebid-server/developers/add-new-bidder-go.md b/prebid-server/developers/add-new-bidder-go.md
index 7cfc39e2f7..cbd2f8d369 100644
--- a/prebid-server/developers/add-new-bidder-go.md
+++ b/prebid-server/developers/add-new-bidder-go.md
@@ -13,7 +13,7 @@ Thank you for contributing a bid adapter to the open source Prebid Server projec
 This document guides you through the process of developing a new bid adapter for your bidding server. We encourage you to look at [existing bid adapters](https://github.com/prebid/prebid-server/tree/master/adapters) for working examples and practical guidance. You can also ask us questions by [submitting a GitHub issue](https://github.com/prebid/prebid-server/issues/new).
 
 {: .alert.alert-info :}
-**NOTE:** There are two implementations of Prebid Server, [PBS-Go](https://github.com/prebid/prebid-server) and [PBS-Java](https://github.com/prebid/prebid-server-java). We recommend you build new adapters for PBS-Go and allow us to port it to PBS-Java within a couple of months. If you'd like to build both yourself, please also follow these [instructions for building an adapter in PBS-Java](/prebid-server/developers/add-new-bidder-java.html).
+There are two implementations of Prebid Server, [PBS-Go](https://github.com/prebid/prebid-server) and [PBS-Java](https://github.com/prebid/prebid-server-java). We recommend you build new adapters for PBS-Go and allow us to port it to PBS-Java within a couple of months. If you'd like to build both yourself, please also follow these [instructions for building an adapter in PBS-Java](/prebid-server/developers/add-new-bidder-java.html).
 
 
 * TOC
@@ -31,7 +31,7 @@ An OpenRTB 2.5 Bid Request contains one or more Impressions, each representing a
 
 You will need to choose a unique name for your bid adapter. Names should be written in lower case and may not contain special characters or emoji. If you already have a Prebid.js bid adapter, we encourage you to use the same name with the same bidder parameters. You may not name your adapter `all`, `context`, `data`, `general`, `prebid`, or `skadn` as those have special meaning in various contexts. Existing bid adapter names are [maintained here](https://github.com/prebid/prebid-server/blob/master/openrtb_ext/bidders.go#L37).
 
-We ask that the first 6 letters of the name you choose be unique among the existing bid adapters. This consideration helps with generating targeting keys for use by some ad exchanges, such as Google Ad Manager. There's no need to manually check, as this constraint is enforced by the [`TestBidderUniquenessGatekeeping`](https://github.com/prebid/prebid-server/blob/master/openrtb_ext/bidders_test.go#L61) test. 
+We ask that the first 6 letters of the name you choose be unique among the existing bid adapters. This consideration helps with generating targeting keys for use by some ad exchanges, such as Google Ad Manager. There's no need to manually check, as this constraint is enforced by the [`TestBidderUniquenessGatekeeping`](https://github.com/prebid/prebid-server/blob/master/openrtb_ext/bidders_validate_test.go#L45) test.
 
 Throughout the rest of this document, substitute `{bidder}` with the name you've chosen.
 
@@ -48,9 +48,9 @@ We are proud to run the Prebid Server project as a transparent and trustworthy h
   - Adapters must annotate the bid response with the proper media type, ideally based on the response from the bidding server.
 
 {: .alert.alert-warning :}
-Failure to follow the rules will lead to delays in approving your adapter for inclusion in Prebid Server. If you'd like to discuss an exception to a rule, please make your request by [submitting a GitHub issue](https://github.com/prebid/prebid-server/issues/new).
+Failure to follow the rules will lead to delays in approving your adapter. If you'd like to discuss an exception to a rule, please make your request by [submitting a GitHub issue](https://github.com/prebid/prebid-server/issues/new).
 
-### Ongoing Support and Maintenance
+### Support and Maintenance
 
 You are expected to provide support and maintenance for the code you contribute to Prebid Server as part of your bid adapter. We ask that you proactively update your adapter when your bidding server introduces new features or breaking changes.
 
@@ -60,18 +60,18 @@ Please be attentive in reading and responding to emails and [GitHub issues](http
 
 ## Create Your Adapter
 
-Prebid Server bid adapters consist of several components: bidder info, bidder parameters, adapter code, user sync code, registration with the core framework, and default configuration values. This chapter will guide you though each component.
+Prebid Server bid adapters consist of several components: bidder info, bidder parameters, adapter code, registration with the core framework, and default configuration values. This document will guide you though each component.
 
-Please refer to [existing bid adapters](https://github.com/prebid/prebid-server/tree/master/adapters) for working examples and practical guidance, but understand that our adapter interfaces and coding style evolve over time. Please prefer the examples in this document over differences you may find in  code.
+Please refer to [existing bid adapters](https://github.com/prebid/prebid-server/tree/master/adapters) for working examples and practical guidance, but understand that our adapter interfaces and coding style evolve over time. The examples in this document have precedence over differences you may find in an existing bid adapter.
 
 Our project is written in the [Go programming language](https://golang.org/). We understand not everyone has prior experience writing Go code. Please try your best and we'll respectfully steer you in the right direction during the review process.
 
 {: .alert.alert-info :}
-Please do not ignore errors from method calls made in your bid adapter code. Even if it's seemingly impossible for an error to occur, such as from `json.Marshal`, it's still possible under the high throughput multi-threaded nature of Prebid Server.
+**Please do not ignore errors from method calls made in your bid adapter code.** Even if it's seemingly impossible for an error to occur, such as from `json.Marshal`, it's still possible under the high throughput multi-threaded nature of Prebid Server.
 
 ### Bidder Info
 
-Let's begin with your adapter's bidder information YAML file. This file is required and contains your maintainer email address, your [GDPR Global Vendor List (GVL) id](https://iabeurope.eu/vendor-list-tcf-v2-0/), specifies the ad formats your adapter will accept, and allows you to opt-out of video impression tracking.
+Let's begin with your adapter's bidder information YAML file. This file is required and contains your bid adapter's maintainer email address, [GDPR Global Vendor List (GVL) ID](https://iabeurope.eu/vendor-list-tcf-v2-0/), supported ad formats, user sync endpoints, and allows you to opt-out of video impression tracking.
 
 Create a file with the path `static/bidder-info/{bidder}.yaml` and begin with the following template:
 
@@ -93,6 +93,10 @@ capabilities:
       - video
       - audio
       - native
+userSync:
+  redirect:
+    url: https://foo.com/sync?gdpr={%raw%}{{.GDPR}}{%endraw%}&consent={%raw%}{{.GDPRConsent}}{%endraw%}&us_privacy={%raw%}{{.USPrivacy}}{%endraw%}&redirect={%raw%}{{.RedirectURL}}{%endraw%}
+    userMacro: $UID
 ```
 
 Modify this template for your bid adapter:
@@ -100,6 +104,7 @@ Modify this template for your bid adapter:
 - Change the `gvlVendorID` from the sample value of `42` to the id of your bidding server as registered with the [GDPR Global Vendor List (GVL)](https://iabeurope.eu/vendor-list-tcf-v2-0/), or remove this line entirely if your bidding server is not registered with IAB Europe.
 - Change the `modifyingVastXmlAllowed` value to `false` if you'd like to opt-out of [video impression tracking](https://github.com/prebid/prebid-server/issues/1015), or remove this line entirely if your adapter doesn't support VAST video ads.
 - Remove the `capabilities` (app/site) and `mediaTypes` (banner/video/audio/native) combinations which your adapter does not support.
+- Follow the [User Sync Configuration](#user-sync-configuration) documentation below to configure the endpoints for your bid adapter, or remove the `userSync` section if not supported.
 
 <details markdown="1">
   <summary>Example: Website with banner ads only.</summary>
@@ -112,6 +117,10 @@ capabilities:
   site:
     mediaTypes:
       - banner
+userSync:
+  redirect:
+    url: https://foo.com/sync?gdpr={%raw%}{{.GDPR}}{%endraw%}&consent={%raw%}{{.GDPRConsent}}{%endraw%}&us_privacy={%raw%}{{.USPrivacy}}{%endraw%}&redirect={%raw%}{{.RedirectURL}}{%endraw%}
+    userMacro: $UID
 ```
 </details>
 
@@ -125,6 +134,10 @@ capabilities:
   site:
     mediaTypes:
       - banner
+userSync:
+  redirect:
+    url: https://foo.com/sync?gdpr={%raw%}{{.GDPR}}{%endraw%}&consent={%raw%}{{.GDPRConsent}}{%endraw%}&us_privacy={%raw%}{{.USPrivacy}}{%endraw%}&redirect={%raw%}{{.RedirectURL}}{%endraw%}
+    userMacro: $UID
 ```
 </details>
 
@@ -145,22 +158,72 @@ capabilities:
     mediaTypes:
       - banner
       - video
+userSync:
+  redirect:
+    url: https://foo.com/sync?gdpr={%raw%}{{.GDPR}}{%endraw%}&consent={%raw%}{{.GDPRConsent}}{%endraw%}&us_privacy={%raw%}{{.USPrivacy}}{%endraw%}&redirect={%raw%}{{.RedirectURL}}{%endraw%}
+    userMacro: $UID
 ```
 </details>
 <p></p>
 
+#### User Sync Configuration
+
+Prebid Server offers a federated [user sync](https://docs.prebid.org/prebid-server/developers/pbs-cookie-sync.html) process to store user ids from multiple bidders in a single cookie under the host's domain. You may add support for your bid adapter by configuring iframe and/or redirect endpoints.
+
+The Bidder Info template above demonstrates configuration of a `redirect` user sync. The `url` points to an endpoint on your bidding server which will honor the privacy policies, replace the `userMacro` in the redirect url with the user's tracking id, and respond with an HTTP 302 redirect to that url. You may also specify an `iframe` endpoint which will return an HTML document to be rendered in an `iframe` on the user's device and use JavaScript to perform the redirect. You may omit the `{%raw%}{{.GDPR}}{%endraw%}`, `{%raw%}{{.GDPRConsent}}{%endraw%}`, and/or `{%raw%}{{.USPrivacy}}{%endraw%}` macros if they are not applicable to your legal situation.
+
+If both `iframe` and `redirect` endpoints are provided, you must specify a `default` field with a value of either `iframe` or `redirect`, based on your preference.
+
+```yaml
+userSync:
+  default: iframe
+  iframe:
+    url: https://foo.com/iframe/sync?gdpr={%raw%}{{.GDPR}}{%endraw%}&consent={%raw%}{{.GDPRConsent}}{%endraw%}&us_privacy={%raw%}{{.USPrivacy}}{%endraw%}&redirect={%raw%}{{.RedirectURL}}{%endraw%}
+    userMacro: $UID
+  redirect:
+    url: https://foo.com/redirect/sync?gdpr={%raw%}{{.GDPR}}{%endraw%}&consent={%raw%}{{.GDPRConsent}}{%endraw%}&us_privacy={%raw%}{{.USPrivacy}}{%endraw%}&redirect={%raw%}{{.RedirectURL}}{%endraw%}
+    userMacro: $UID
+```
+
+If your bid adapter supports user sync and doesn't have a good default, you may optionally specify a `supports` array with the items `iframe` and/or `redirect` to inform Prebid Server hosts. Hosts will receive a warning on startup if a bid adapter supports user sync and isn't configured. Expect hosts to contact you at the maintainer email address in this file for instructions.
+
+```yaml
+userSync:
+  # foo supports user syncing, but requires configuration by the host. contact this
+  # bidder directly at the email address in this file to ask about enabling user sync.
+  supports:
+    - iframe
+    - redirect
+```
+
+Each user sync is assigned a case-sensitive `key`, defaulting to your bidder name. You may use a different `key` value, but we discourage doing so except for when multiple bidders share the same bidding server. You might encounter this use case for built-in aliases or for multiple bidders implementing different protocols for the same bidding server. Only one bid adapter may specify endpoints when using a shared key, or Prebid Server will fail to startup due to the ambiguity.
+
+```yaml
+foo.yaml
+--------
+userSync:
+  redirect:
+    url: https://foo.com/sync?gdpr={%raw%}{{.GDPR}}{%endraw%}&consent={%raw%}{{.GDPRConsent}}{%endraw%}&us_privacy={%raw%}{{.USPrivacy}}{%endraw%}&redirect={%raw%}{{.RedirectURL}}{%endraw%}
+    userMacro: $UID
+
+bar.yaml
+--------
+userSync:
+  key: foo
+```
+
 ### Bidder Parameters
 
-Your bid adapter might require extra information from the publisher to form a request to your bidding server. The bidder parameters JSON Schema codifies this information to allow Prebid Server to verify requests and to provide an API for third party configuration systems.
+Your bid adapter might require extra information from the publisher to form a request to your bidding server. The bidder parameters JSON Schema codifies this information to allow Prebid Server to verify requests and to provide an API for configuration systems.
 
 Publishers will provide extra information using an OpenRTB 2.5 Bid Request Extension, preferably at `request.imp[].ext.prebid.bidder.{bidder}` but also supported at `request.imp[].ext.{bidder}`. Prebid Server will validate the publisher information based on your schema and relocate the data to `request.imp[].ext.bidder`, regardless of your bidder name or the publisher's chosen location.
 
-We request that you do not duplicate information that is already present in the [OpenRTB 2.5 Bid Request specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf#page=13) or is already part of an established Prebid convention. For example, your bidder parameters should not include first party data, bid floors, schain, video parameters, referrer information, or privacy consent including COPPA, CCPA, and GDPR TCF. For video parameters in particular, you must prefer the OpenRTB 2.5 Bid Request standard of `request.imp[].video`.
+We request you do not duplicate information already present in the [OpenRTB 2.5 Bid Request specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf#page=13) or already part of an established Prebid convention. For example, your bidder parameters should not include first party data, bid floors, schain, video parameters, referrer information, or privacy consent including COPPA, CCPA, and GDPR TCF. For video parameters in particular, you must prefer the OpenRTB 2.5 Bid Request standard of `request.imp[].video`.
 
 {: .alert.alert-warning :}
-**ENDPOINT NOTE:** You may not use an endpoint domain as a bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a portion of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain.
+You may not use an endpoint domain as a bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a portion of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain.
 
-Create a file with the path `static/bidder-params/{bidder}.json` using [JSON Schema](https://spacetelescope.github.io/understanding-json-schema/) to define your bidder parameters. Prebid Server requires this file for every adapter, even if yours doesn't require bidder parameters (see the 'no parameters' example at the end of this section).
+Create a file with the path `static/bidder-params/{bidder}.json` and use [JSON Schema](https://spacetelescope.github.io/understanding-json-schema/) to define your bidder parameters. Prebid Server requires this file for every adapter, even if yours doesn't require bidder parameters (see the 'no parameters' example at the end of this section).
 
 Let's start with this example which defines one required `placementId` string parameter:
 
@@ -183,7 +246,9 @@ Let's start with this example which defines one required `placementId` string pa
 ```
 We encourage you to utilize the full features of [JSON Schema](https://spacetelescope.github.io/understanding-json-schema/) to narrowly define your bidder parameter data types. If you copy and paste these examples, please remember to change the  `title` and `description` to refer to your bidder name instead of our fictional Foo example.
 
-When choosing your parameter names, please consider aligning with the OpenRTB 2.5 standard by using lower case letters without camel casing or special characters. 
+When choosing your parameter names, please consider aligning with the OpenRTB 2.5 standard by using lower case letters without camel casing or special characters.
+
+Properties in [JSON Schema](https://spacetelescope.github.io/understanding-json-schema/) are case sensitive. If you choose to specify multiple properties differing only by case for compatibility, we ask that you include the word 'preferred' in one of the descriptions to give a hint to third party configuration systems.
 
 In addition to the examples listed below, please refer to [existing bidder parameter files](https://github.com/prebid/prebid-server/tree/master/static/bidder-params) for guidance.
 
@@ -234,7 +299,7 @@ In addition to the examples listed below, please refer to [existing bidder param
   "title": "Foo Adapter Params",
   "description": "A schema which validates params accepted by the Foo adapter",
   "type": "object",
-  
+
   "properties": {
     "token": {
       "type": "string",
@@ -280,18 +345,47 @@ In addition to the examples listed below, please refer to [existing bidder param
 }
 ```
 </details>
+
+<details markdown="1">
+  <summary>Example: Multiple properties differing only by case.</summary>
+
+```json
+{
+  "$schema": "http://json-schema.org/draft-04/schema#",
+  "title": "Foo Adapter Params",
+  "description": "A schema which validates params accepted by the Foo adapter",
+  "type": "object",
+
+  "properties": {
+    "partnerid": {
+      "type": "string",
+      "description": "Partner ID, preferred."
+    },
+    "partnerID": {
+      "secret": "string",
+      "description": "Partner ID"
+    }
+  },
+
+  "oneOf": [
+    { "required": ["partnerid"] },
+    { "required": ["partnerID"] }
+  ]
+}
+```
+</details>
 <p></p>
 
 ### Bidder Parameters Code
 
 {: .alert.alert-info :}
-You can skip this step if your adapter has no bidder parameters.
+You can skip this section if your adapter has no bidder parameters.
 
-If you've defined bidder parameters for your adapter, you also need to represent your bidder parameters in code. The core framework uses the JSON Schema file for validation, but your adapter code needs a data structure to support JSON unmarshalling / deserialization. These data structures are organized in a shared path using a standard naming convention, which also serves as documentation of all adapter parameters.
+If you defined bidder parameters for your adapter, you also need to represent your bidder parameters in code. The core framework uses the JSON Schema file for validation, but your adapter code needs a data structure to support JSON unmarshalling / deserialization. These data structures are organized in a shared path using a standard naming convention, which also serves as documentation of all adapter parameters.
 
 Create a file with the path `openrtb_ext/imp_{bidder}.go` containing an exported (must start with an upper case letter) data structure named `ImpExt{Bidder}`. All required and optional bidder parameters from the JSON Schema should be represented as fields.
 
-For example, this is what the bidder parameter code looks like for the example we used in the previous section:
+For example, this is what the bidder parameter code looks like for the Foo example we used in the previous section:
 
 ```go
 package openrtb_ext
@@ -301,7 +395,7 @@ type ImpExtFoo struct {
 }
 ```
 
-Please follow [Go's standard naming convention](https://golang.org/doc/effective_go.html) for the field names (particularly for acronyms) and use `` `json:...` `` attributes to specify the JSON name, matching exactly what you defined in the bidder parameters JSON Schema. Please keep in mind that JSON is case sensitive.
+Please follow [Go's standard naming convention](https://golang.org/doc/effective_go.html) for the field names (particularly for acronyms) and use `` `json:...` `` attributes to specify the JSON name, matching exactly what you defined in the bidder parameters JSON Schema.
 
 ### Adapter Code
 
@@ -326,7 +420,7 @@ import (
   "fmt"
   "net/http"
 
-  "github.com/mxmCherry/openrtb"
+  "github.com/mxmCherry/openrtb/v15/openrtb2"
   "github.com/prebid/prebid-server/adapters"
   "github.com/prebid/prebid-server/config"
   "github.com/prebid/prebid-server/errortypes"
@@ -345,7 +439,7 @@ func Builder(bidderName openrtb_ext.BidderName, config config.Adapter) (adapters
   return bidder, nil
 }
 
-func (a *adapter) MakeRequests(request *openrtb.BidRequest, requestInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
+func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) {
   requestJSON, err := json.Marshal(request)
   if err != nil {
     return nil, []error{err}
@@ -356,15 +450,15 @@ func (a *adapter) MakeRequests(request *openrtb.BidRequest, requestInfo *adapter
     Uri:     a.endpoint,
     Body:    requestJSON,
   }
-  
+
   return []*adapters.RequestData{requestData}, nil
 }
 
-func (a *adapter) MakeBids(request *openrtb.BidRequest, requestData *adapters.RequestData, responseData *adapters.ResponseData) (*adapters.BidderResponse, []error) {
+func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.RequestData, responseData *adapters.ResponseData) (*adapters.BidderResponse, []error) {
   if responseData.StatusCode == http.StatusNoContent {
     return nil, nil
   }
-  
+
   if responseData.StatusCode == http.StatusBadRequest {
     err := &errortypes.BadInput{
       Message: "Unexpected status code: 400. Bad request from publisher. Run with request.debug = 1 for more info.",
@@ -379,18 +473,17 @@ func (a *adapter) MakeBids(request *openrtb.BidRequest, requestData *adapters.Re
     return nil, []error{err}
   }
 
-  var response openrtb.BidResponse
+  var response openrtb2.BidResponse
   if err := json.Unmarshal(responseData.Body, &response); err != nil {
     return nil, []error{err}
   }
-  
+
   bidResponse := adapters.NewBidderResponseWithBidsCapacity(len(request.Imp))
   bidResponse.Currency = response.Cur
   for _, seatBid := range response.SeatBid {
-    for _, bid := range seatBid.Bid {
-      bid := bid // pin https://github.com/kyoh86/scopelint#whats-this
+    for i, bid := range seatBid.Bid {
       b := &adapters.TypedBid{
-        Bid:     &bid,
+        Bid:     &seatBid.Bid[i],
         BidType: getMediaTypeForBid(bid),
       }
       bidResponse.Bids = append(bidResponse.Bids, b)
@@ -409,16 +502,16 @@ The first argument, `bidderName`, is the name of the bidder being built. This ma
 
 The second argument, `config`, is all the configuration values set for your adapter. However, not all of this information is intended for use by the `Builder` method. The only two fields relevant here are `config.Endpoint` and `config.ExtraAdapterInfo`:
 - `config.Endpoint` is the base url of your bidding server and may be interpreted as either a literal address or as a templated macro to support dynamic domains or dynamic paths.
-- `config.ExtraAdapterInfo` may be used for any other values your adapter may need, such as an application token or publisher allow/deny list. You may interpret this string however you like, although JSON is a common choice.
+- `config.ExtraAdapterInfo` is an optional setting may be used for any other values your adapter may need, such as an application token or publisher allow/deny list. You may interpret this string however you like, although JSON is a common choice.
 
-The `Builder` method is expected to return an error if either the `config.Endpoint` or the `config.ExtraAdapterInfo` values are invalid or cannot be parsed. Errors will be surfaced to the host during application startup as a fatal error. 
+The `Builder` method is expected to return an error if either the `config.Endpoint` or the `config.ExtraAdapterInfo` values are invalid or cannot be parsed. Errors will be surfaced to the host during application startup as a fatal error.
 
 <details markdown="1">
   <summary>Example: Builder using endpoint macros.</summary>
 
 ```go
 type adapter struct {
-  endpointTemplate template.Template
+  endpointTemplate *template.Template
 }
 
 // Builder builds a new instance of the Foo adapter for the given bidder with the given config.
@@ -427,9 +520,9 @@ func Builder(bidderName openrtb_ext.BidderName, config config.Adapter) (adapters
   if err != nil {
     return nil, fmt.Errorf("unable to parse endpoint url template: %v", err)
   }
-  
+
   bidder := &adapter{
-    endpointTemplate: *template,
+    endpointTemplate: template,
   }
   return bidder, nil
 }
@@ -450,7 +543,7 @@ func Builder(bidderName openrtb_ext.BidderName, config config.Adapter) (adapters
   if err != nil {
     return nil, err
   }
-  
+
   bidder := &adapter{
     endpoint: config.Endpoint,
     token:    info.token,
@@ -484,9 +577,9 @@ func buildDefaultExtraInfo() extraInfo {
 
 The `MakeRequests` method is responsible for returning none, one, or many HTTP requests to be sent to your bidding server. Bid adapters are forbidden from directly initiating any form of network communication and must entirely rely upon the core framework. This allows the core framework to optimize outgoing connections using a managed pool and record networking metrics. The return type `adapters.RequestData` allows your adapter to specify the HTTP method, url, body, and headers.
 
-This method is called once by the core framework for bid requests which have at least one valid Impression for your adapter. Impressions not configured for your adapter will be removed and are not accessible. 
+This method is called once by the core framework for bid requests which have at least one valid Impression for your adapter. Impressions not configured for your adapter are not accessible.
 
-The first argument, `request`, is the OpenRTB 2.5 Bid Request object. Extension information is stored as `json.RawMessage` byte arrays and must be unmarshalled and/or marshalled to be read and/or mutated. It is *critical* to understand that the `request` object contains pointers to shared memory. If your adapter needs to alter any data referenced by a pointer then you *must* first make a shallow copy. The only exception is for `request.Imp` and its elements, as these are already shallow copies. The exact same instance of the `request` object is also passed to the `MakeBids` method, so please be careful when mutating. It's safe to assume that `request.Imp[]` always contains at least one element and that the `request.Imp[].ext.bidder` was successfully validated by your bidder parameter JSON Schema.
+The first argument, `request`, is the OpenRTB 2.5 Bid Request object. Extension information is stored as `json.RawMessage` byte arrays and must be unmarshalled and/or marshalled to be read and/or mutated. It is *critical* to understand that the `request` object contains pointers to shared memory. If your adapter needs to alter any data referenced by a pointer then you *must* first make a shallow copy. The only exception is for `request.Imp` and its elements, as these are already shallow copies. The exact same instance of the `request` object is also passed to the `MakeBids` method, so please be careful when mutating. It's safe to assume that `request.Imp[]` always contains at least one element and that the `request.Imp[].ext.bidder` was successfully validated per your bidder parameter JSON Schema.
 
 <details markdown="1">
   <summary>Example: Mutating banner shared memory (make a copy).</summary>
@@ -504,33 +597,37 @@ if request.Imp[i].W == nil && request.Imp[i].H == nil && len(request.Imp[i].Form
 </details>
 <p></p>
 
-The second argument, `requestInfo`, is for extra information and helper methods provided by the core framework. For now, this just includes `requestInfo.PbsEntryPoint` which is commonly used to determine if the request is for AMP or Long Form Video Ad Pods. This object will be expanded in the future to also include currency conversion and extension unmarshalling helper methods.
+The second argument, `requestInfo`, is for extra information and helper methods provided by the core framework. This includes:
+
+- `requestInfo.PbsEntryPoint` to access the entry point of the bid request, commonly used to determine if the request is for AMP or for a [Long Form Video Ad Pod](/dev-docs/modules/adpod.html).
+- `requestInfo.GlobalPrivacyControlHeader` to read the value of the `Sec-GPC` Global Privacy Control (GPC) header of the bid request.
+- `requestInfo.ConvertCurrency` a method to perform currency conversions.
 
-The `MakeRequests` method is expected to return a slice (similar to a C# `List` or a Java `ArrayList`) of `adapters.RequestData` objects representing the HTTP calls to be sent to your bidding server and a slice of type `error` for any issues encountered creating them. If there are no HTTP calls or if there are no errors, please return `nil` for both return values. Neither slices may contain `nil` elements.
+
+The `MakeRequests` method is expected to return a slice (similar to a C# `List` or a Java `ArrayList`) of `adapters.RequestData` objects representing the HTTP calls to be sent to your bidding server and a slice of type `error` for any issues encountered creating them. If there are no HTTP calls or if there are no errors, please return `nil` for both return values. Please do not add `nil` items in the slices.
 
 {: .alert.alert-info :}
 HTTP calls to your bidding server will automatically prefer GZIP compression. You should not specify it yourself using headers. You don't have to worry about decompressing the response in `MakeBids` either, as that will be taken care of automatically.
 
-An Impression may define multiple sizes and/or multiple ad formats. If your bidding server limits requests to a single ad placement, size, or format, then your adapter will need to split the Impression into multiple calls and merge the responses.
+##### Impression Splitting
 
-<details markdown="1">
-  <summary>Example: Impression splitting.</summary>
+An Impression may define multiple sizes and/or multiple ad formats. If your bidding server limits requests to a single ad placement, size, or format, then your adapter will need to split the Impression into multiple calls and merge the responses.
 
 ```go
-func (a *adapter) MakeRequests(request *openrtb.BidRequest, requestInfo *adapters.ExtraRequestInfo) (*adapters.RequestData, []error) {
+func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapters.ExtraRequestInfo) (*adapters.RequestData, []error) {
   var requests []*adapters.RequestData
   var errors []error
-  
+
   requestCopy := *request
   for _, imp := range request.Imp {
-    requestCopy.Imp = []openrtb.Imp{imp}
+    requestCopy.Imp = []openrtb2.Imp{imp}
 
     requestJSON, err := json.Marshal(request)
     if err != nil {
       errors = append(errors, err)
       continue
     }
-  
+
     requestData := &adapters.RequestData{
       Method: "POST",
       Uri:    a.endpoint,
@@ -541,12 +638,58 @@ func (a *adapter) MakeRequests(request *openrtb.BidRequest, requestInfo *adapter
   return requests, errors
 }
 ```
+
+##### Currency
+
+Prebid Server is a global product that is currency agnostic. Publishers may ask for bids in any currency. It's totally fine if your bidding endpoint only supports a single currency, but your adapter needs to deal with it. This section will describe how to do so.
+
+Here are 3 key points to consider:
+
+1. If your endpoint only bids in a particular currency, then your adapter must not blindly forward the openrtb to your endpoint. You should instead set $.cur to your server's required currency.
+2. Your adapter must label bid responses properly with the response currency. i.e. if you only bid in USD, then your adapter must set USD as the response currency. PBS will convert to the publisher's requested currency as needed. See the [currency feature](/prebid-server/features/pbs-currency.html) for more info.
+3. You should be aware that floors can be defined in any currency. If your bidding service supports floors, but only in a particular currency, then you must read use the `requestInfo.ConvertCurrency` function before sending $.imp[].bidfloor and $.imp[].bidfloorcur to your endpoint.
+
+<details markdown="1">
+  <summary>Example: Currency conversion needed for bid floor values in impressions.</summary>
+
+```go
+func (a *adapter) MakeRequests(request *openrtb2.BidRequest, requestInfo *adapters.ExtraRequestInfo) (*adapters.RequestData, []error) {
+
+  for _, imp := range request.Imp {
+    // Check if imp comes with bid floor amount defined in a foreign currency
+    if imp.BidFloor > 0 && imp.BidFloorCur != "" && strings.ToUpper(imp.BidFloorCur) != "USD" {
+
+      // Convert to US dollars
+      convertedValue, err := reqInfo.ConvertCurrency(imp.BidFloor, imp.BidFloorCur, "USD")
+      if err != nil {
+        return nil, []error{err}
+      }
+
+      // Update after conversion. All imp elements inside request.Imp are shallow copies
+      // therefore, their non-pointer values are not shared memory and are safe to modify.
+      imp.BidFloorCur = "USD"
+      imp.BidFloor = convertedValue
+    }
+  }
+
+  requestJSON, err := json.Marshal(request)
+  if err != nil {
+    return nil, []error{err}
+  }
+
+  requestData := &adapters.RequestData{
+    Method:  "POST",
+    Uri:     a.endpoint,
+    Body:    requestJSON,
+  }
+
+  return []*adapters.RequestData{requestData}, nil
+}
+```
 </details>
 <p></p>
 
-If your bidding server supports multiple currencies, please be sure to pass through the `request.cur` field. If your bidding server only bids in a single currency, such as USD or EUR, that's fine. Prebid Server will convert your bid to the request currency if you include it in the bid response, otherwise we assume USD and conversion will not occur.
-
-Please ensure you forward the bid floor (`request.imp[].bidfloor`) and bid floor currency (`request.imp[].bidfloorcur`) values to your bidding server for enforcement. You'll soon have access to currency conversion helper methods if your endpoint only supports floors in a single currency.
+##### Common Data
 
 There are a several values of a bid that publishers expect to be populated. Some are defined by the OpenRTB 2.5 specification and some are defined by Prebid conventions.
 
@@ -557,9 +700,10 @@ There are a several values of a bid that publishers expect to be populated. Some
 | COPPA | OpenRTB | `request.regs.ext.us_privacy`<br/> The publisher is specifying the Children's Online Privacy Protection flag.
 | Currency | OpenRTB |`request.cur` <br/> The publisher is specifying the desired bid currency. The Prebid Server default is USD.
 | [Debug](https://github.com/prebid/prebid-server/issues/745) | Prebid | `request.ext.prebid.debug` <br/> The publisher is requesting verbose debugging information from Prebid Server.
+| [Request-Defined currency conversion rates](https://docs.prebid.org/prebid-server/features/pbs-currency.html) | Prebid | `request.ext.prebid.currency` <br/> The publisher decides to prioritize its own custom currency conversion rates over Prebid Server's currency conversion rates. If a currency rate is not found in `request.ext.prebid.currency`, Prebid Server's rates will be used unless `usepbsrates` is set to `false`. If missing, `usepbsrates` defaults to true.
 | [First Party Data (FPD)](https://docs.prebid.org/prebid-server/features/pbs-fpd.html)| Prebid | `request.imp[].ext.context.data.*`, `request.app.ext.data.*`, `request.site.ext.data.*`, `request.user.ext.data.*` <br/> The publisher may provide first party data (e.g. keywords).
 | GDPR | OpenRTB |  `request.regs.ext.gdpr`, `request.user.ext.consent` <br/> The publisher is specifying the European General Data Protection Regulation flag and TCF consent string.
-| Site or App | OpenRTB | `request.site`, `request.app` <br/> The publisher will provide either the site or app, but not both, representing the client's device. 
+| Site or App | OpenRTB | `request.site`, `request.app` <br/> The publisher will provide either the site or app, but not both, representing the client's device.
 | Supply Chain | OpenRTB | `request.source.ext.schain` <br/> The publisher's declaration of all parties who are selling or reselling the bid request.
 | Test | OpenRTB | `request.test` <br/> The publisher is sending non-production traffic which also enables verbose debugging information from Prebid Server.
 | Video | OpenRTB | `request.imp[].video` <br/> The publisher is specifying video ad requirements or preferences.
@@ -571,18 +715,20 @@ For simplicity, adapters are expected to make net-price bids (e.g. "If this ad w
 
 The `MakeBids` method is responsible for parsing the bidding server's response and mapping it to the [OpenRTB 2.5 Bid Response object model](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf#page=32).
 
-This method is called for each response received from your bidding server within the bidding window (`request.tmax`). If there are no requests or if all requests time out, the `MakeBids` method will not be called.
+This method is called for each response received from your bidding server within the bidding time window (`request.tmax`). If there are no requests or if all requests time out, the `MakeBids` method will not be called.
 
-{: .alert.alert-info :}
+{: .alert.alert-warning :}
 It's *imperative* to include all required information in the response for your bid to be accepted. Please avoid common mistakes, such as not specifying the bid currency and not properly detecting the media type from the bidding server response.
 
 The first argument, `request`, is the exact same OpenRTB 2.5 Bid Request object provided to (and potentially mutated by) the `MakeRequests` method. The information in the `request` may be useful when detecting the media type.
 
 The second argument, `requestData`, is the exact same `adapters.RequestData` object returned by the `MakeRequests` method. It's rare for adapters to make use of this information, but it's provided for potential edge cases.
 
-The third argument, `responseData`, is the HTTP response received from your bidding server and contains the status code, body, and headers. If your bidding server replies with a GZIP encoded body, it will be automatically decompressed. 
+The third argument, `responseData`, is the HTTP response received from your bidding server and contains the status code, body, and headers. If your bidding server replies with a GZIP encoded body, it will be automatically decompressed.
 
-The `MakeBids` method is expected to return an `adapters.BidderResponse` object with one or more bids mapped from your bidding server's response. This may be as simple as decorating an OpenRTB 2.5 Bid Response with a some Prebid Server metadata (such as the media type) or more complicated mapping logic depending on your server's response format.
+The `MakeBids` method is expected to return an `adapters.BidderResponse` object with one or more bids mapped from your bidding server's response. This may be as simple as decorating an OpenRTB 2.5 Bid Response with some Prebid Server metadata (such as the media type) or more complicated mapping logic depending on your server's response format.
+
+##### Object Model
 
 Please review the entire [OpenRTB 2.5 Bid Response](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf#page=32) documentation to fully understand the response object model and expectations. We've summarized some common fields below. Data which is listed as required is enforced by the core framework and cannot be omitted.
 
@@ -591,12 +737,12 @@ Please review the entire [OpenRTB 2.5 Bid Response](https://www.iab.com/wp-conte
 | - | - | -
 | `.Currency` | Required | [3-letter ISO 4217 code](https://www.iso.org/iso-4217-currency-codes.html) defining the currency of the bid. The Prebid Server default is USD.
 | `.Bids[].BidType` | Required | Prebid Server defined value identifying the media type as `banner`, `video`, `audio`, or `native`. Should be mapped from the bidding server response.
-| `.Bids[].Bid.ADomain` | Optional | Advertiser domain for block list checking.
-| `.Bids[].Bid.AdM` | Optional | Ad markup to serve if the bid wins. May be HTML, Native, or VAST/VMAP formats. You should resolve any AUCTION_PRICE macros.
 | `.Bids[].Bid.CrID` | Required | Unique id of the creative.
 | `.Bids[].Bid.ID` | Required | Bidder generated id to assist with logging and tracking.
 | `.Bids[].Bid.ImpID` | Required | ID of the corresponding bid request Impression. Prebid Server validates the id is actually found in the bid request.
 | `.Bids[].Bid.Price` | Required | Net price CPM of the bid, not gross price. Publishers can correct for gross price bids by setting Bid Adjustments to account for fees. We recommend the most granular price a bidder can provide.
+| `.Bids[].Bid.ADomain` | Optional | Advertiser domain for block list checking.
+| `.Bids[].Bid.AdM` | Optional | Ad markup to serve if the bid wins. May be HTML, Native, or VAST/VMAP formats. You should resolve any AUCTION_PRICE macros.
 | `.Bids[].Bid.W` | Optional | Width of the creative in pixels.
 | `.Bids[].Bid.H` | Optional | Height of the creative in pixels.
 | `.Bids[].Bid.Ext` | Optional | Embedded JSON containing Prebid metadata (see below) or custom information.
@@ -604,22 +750,25 @@ Please review the entire [OpenRTB 2.5 Bid Response](https://www.iab.com/wp-conte
 {: .alert.alert-info :}
 We recommend resolving creative OpenRTB macros in your adapter. Otherwise, AUCTION_PRICE will eventually get resolved by the [Prebid Universal Creative](https://github.com/prebid/prebid-universal-creative), but by then the bid price will be in the ad server currency and quantized by the price granularity.
 
-If you'd like to support Long Form Video Ad Pods, then you'll need to provide the followings information:
+If you'd like to support [Long Form Video Ad Pods](/dev-docs/modules/adpod.html)s, then you'll need to provide the followings information:
 
 {: .table .table-bordered .table-striped }
 | BidderResponse Path | Description
 | - | -
-| `.Bids[].BidVideo.PrimaryCategory` | Category for the bid. Should be able to be translated to the primary ad server format.
-| `.Bids[].Bid.Cat` | Category for the bid. Should be able to be translated to the primary ad server format.
+| `.Bids[].BidVideo.PrimaryCategory` | Category for the bid in the taxonomy used by the ad server. Will be passed through without translation.
+| `.Bids[].Bid.Cat` | IAB category for the bid which may be translated to the taxonomy used by the ad server.
 | `.Bids[].BidVideo.Duration` | Length of the video in integer seconds.
 | `.Bids[].DealPriority` | Deal tier integer value. Defaults to 0.
 
 {: .alert.alert-info :}
 Either `.Bids[].BidVideo.PrimaryCategory` or `.Bids[].Bid.Cat` should be provided.
-Prebid has historically struggled with sharing granular bid response data with publishers, analytics, and reporting systems. To address this, we've introduced a standard object model. We encourage adapters to provide as much information as possible in the bid response. 
+
+##### Metadata
+
+Prebid has introduced a standard object model for sharing granular bid response data with publishers, analytics, and reporting systems. We encourage adapters to provide as much information as possible in the bid response.
 
 {: .alert.alert-danger :}
-Bid metadata will be *required* in Prebid.js 5.X+ release, specifically for AdvertiserDomains and MediaType. We recommend making sure your adapter sets these values or Prebid.js may throw out the bid.
+Bid metadata will be *required* in Prebid.js 5.X+ release, specifically for bid.ADomain and MediaType. We recommend making sure your adapter sets these values or Prebid.js may throw out the bid.
 
 {: .table .table-bordered .table-striped }
 | Path | Description
@@ -630,13 +779,12 @@ Bid metadata will be *required* in Prebid.js 5.X+ release, specifically for Adve
 | `.AgencyName` | Bidder-specific agency name.
 | `.AdvertiserID` | Bidder-specific advertiser id.
 | `.AdvertiserName` | Bidder-specific advertiser name.
-| `.AdvertiserDomains` | Advertiser domains for the landing page(s). Should match `.Bids[].Bid.ADomain`. 
 | `.BrandID` | Bidder-specific brand id for advertisers with multiple brands.
 | `.BrandName` | Bidder-specific brand name.
-| `.dchain` | Demand Chain Object. 
+| `.DChain` | Demand chain object.
 | `.PrimaryCategoryID` | Primary IAB category id.
 | `.SecondaryCategoryIDs` | Secondary IAB category ids.
-| `.MediaType` | Either `banner`, `audio`, `video`, or `native`. Should match `.Bids[].BidType`.
+| `.MediaType` | Either `banner`, `audio`, `video`, or `native`. This is used in the scenario where a bidder responds with a mediatype different than the stated type. e.g. native when the impression is for a banner. One use case is to help publishers determine whether the creative should be wrapped in a safeframe.
 
 <p></p>
 
@@ -644,83 +792,46 @@ Bid metadata will be *required* in Prebid.js 5.X+ release, specifically for Adve
   <summary>Example: Setting metadata.</summary>
 
 ```go
-func (a *adapter) MakeBids(request *openrtb.BidRequest, requestData *adapters.RequestData, responseData *adapters.ResponseData) (*adapters.BidderResponse, []error) {
+func (a *adapter) MakeBids(request *openrtb2.BidRequest, requestData *adapters.RequestData, responseData *adapters.ResponseData) (*adapters.BidderResponse, []error) {
   ...
   for _, seatBid := range response.SeatBid {
-    for _, bid := range seatBid.Bid {
-      bid := bid // pin https://github.com/kyoh86/scopelint#whats-this
+    for i, bid := range seatBid.Bid {
       b := &adapters.TypedBid{
-        Bid:     &bid,
+        Bid:     &seatBid.Bid[i],
         BidType: getMediaTypeForBid(bid),
-      }
-
-      if meta, err := buildMeta(b); err != nil {
-        errs = append(errs, metaErr)
-      } else {
-        b.Bid.Ext = meta
-        bidResponse.Bids = append(bidResponse.Bids, b)
+        BidMeta: getBidMeta(bid),
       }
   }
   ...
 }
 
-func buildMeta(bid *adapters.TypedBid) (json.RawMessage, error) {
-  metaExt := openrtb_ext.ExtBidPrebid {
-    Meta: &openrtb_ext.ExtBidPrebidMeta {
-      NetworkID:            1,
-      NetworkName:          "Some Network Name",
-      AgencyID:             2,
-      AgencyName:           "Some Agency Name",
-      AdvertiserID:         3,
-      AdvertiserName:       "Some Advertiser Name",
-      AdvertiserDomains:    bid.ADomain,
-      dchain:               bid.ext.dchain,      
-      BrandID:              4,
-      BrandName:            "Some Brand Name",
-      PrimaryCategoryID:    "IAB-1",
-      SecondaryCategoryIDs: []string{"IAB-2", "IAB-3"},
-      MediaType:            b.BidType,
-    }
+func getBidMeta(bid *adapters.TypedBid) *openrtb_ext.ExtBidPrebidMeta {
+  // Not all fields are required. This example includes all fields for
+  // demonstration purposes.
+  return &openrtb_ext.ExtBidPrebidMeta {
+    NetworkID:            1,
+    NetworkName:          "Some Network Name",
+    AgencyID:             2,
+    AgencyName:           "Some Agency Name",
+    AdvertiserID:         3,
+    AdvertiserName:       "Some Advertiser Name",
+    AdvertiserDomains:    []string{"Some Domain"},
+    DemandSource:         "Some Demand Source",
+    DChain:               json.RawMessage(`{Some Demand Chain JSON}`),
+    BrandID:              4,
+    BrandName:            "Some Brand Name",
+    PrimaryCategoryID:    "IAB-1",
+    SecondaryCategoryIDs: []string{"IAB-2", "IAB-3"},
+    MediaType:            "banner",
   }
-  return json.Marshal(meta)
 }
 ```
 </details>
 <p></p>
 
-### Create A User Syncer (Optional)
-
-Prebid Server offers a federated [user sync solution](https://docs.prebid.org/prebid-server/developers/pbs-cookie-sync.html) to store user ids in a single cookie under the host's domain. You may add support with a relatively small amount of code if your bidding server supports this protocol.
-
-Create a file with the path `adatpers/{bidder}/usersync.go` using the following template:
-
-```go
-package {bidder}
-
-import (
-  "text/template"
-  
-  "github.com/prebid/prebid-server/adapters"
-  "github.com/prebid/prebid-server/usersync"
-)
-
-func NewSyncer(template *template.Template) usersync.Usersyncer {
-  return adapters.NewSyncer("{bidder}", template, adapters.SyncTypeRedirect)
-}
-```
-
-The heavy lifting is handled by the `adapters.NewSyncer` method. You just need to provide a few arguments:
-
-{: .table .table-bordered .table-striped }
-| Argument | Description
-| - | -
-| `familyName` | Name used for storing your user sync id within the federated cookie. Please keep this the same as your bidder name.
-| `urlTemplate` | Pass through the `template` argument.
-| `syncType` | Type of user sync supported by your bidding server. The valid options are `SyncTypeRedirect` and `SyncTypeIframe`.
-
 ### Register With The Core
 
-Prebid Server does not use reflection or any other automagic technology to recognize your new bid adapter. You must manually register it with the core framework.
+Prebid Server does not use reflection or any other automated technology to recognize your new bid adapter. You must manually register it with the core framework.
 
 {: .alert.alert-info :}
 You will need to add an `import` statement for your bid adapter package in these files. Modern code editors such as Visual Studio Code and JetBrain's GoLand will automatically do that for you.
@@ -745,7 +856,7 @@ const (
 func CoreBidderNames() []BidderName {
   return []BidderName{
     ...
-     Bidder{Bidder},
+    Bidder{Bidder},
     ...
   }
 }
@@ -763,20 +874,9 @@ func newAdapterBuilders() map[openrtb_ext.BidderName]adapters.Builder {
 }
 ```
 
-If you have a user syncer, edit the file `usersync/usersyncers/syncer.go` to include it in the syncer map.
-
-```go
-func NewSyncerMap(cfg *config.Configuration) map[openrtb_ext.BidderName]usersync.Usersyncer {
-  syncers := make(map[openrtb_ext.BidderName]usersync.Usersyncer, len(cfg.Adapters))
-  ...
-  insertIntoMap(cfg, syncers, openrtb_ext.Bidder{Bidder}, {bidder}.NewSyncer)
-  ...
-}
-```
-
 ### Set Adapter Defaults
 
-Lastly, you need to provide default settings for your bid adapter. You can decide if you'd like your bid adapter to be enabled out of the box, and if so, you'll need to provide a default endpoint and default extra adapter info if applicable. If your bid adapter requires host specific information to function properly, such as a security token or host account, then it's best to leave the adapter disabled.
+You need to provide default settings for your bid adapter. You can decide if you'd like your bid adapter to be enabled out of the box, and if so, you'll need to provide a default endpoint and default extra adapter info (if applicable). If your bid adapter requires host specific information to function properly, such as a security token or host account, then it's best to leave the adapter disabled.
 
 {: .alert.alert-warning :}
 **HOST SPECIFIC INFO:** The default endpoint must not be specific to any particular host, such as Xandr/AppNexus. We may ask you about suspicious looking ids during the review process. Please reach out to individual hosts if you need to set specialized configuration.
@@ -789,7 +889,7 @@ Edit the file `config/config.go` to register your default endpoint within the `S
 func SetupViper(v *viper.Viper, filename string) {
   ...
   v.SetDefault("adapters.{bidder}.endpoint", "https://your.url/any/path")
-  v.SetDefault("adapters.{bidder}.extra_info", `{"your": "extra info"}`) 
+  v.SetDefault("adapters.{bidder}.extra_info", `{"your": "extra info"}`)
   ...
 }
 ```
@@ -806,76 +906,9 @@ func SetupViper(v *viper.Viper, filename string) {
 }
 ```
 
-### Set User Syncer Defaults
-
-If you implemented a user syncer, you'll need to provide a default endpoint. Edit the file `config/config.go` to alphabetically register your user syncer in the `setDerivedDefaults` method:
-
-```go
-func (cfg *Configuration) setDerivedDefaults() {
-  ...
-  setDefaultUsersync(cfg.Adapters, openrtb_ext.Bidder{Bidder}, "https://your.url/sync?r="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3D{bidder}%26gdpr%3D{%raw%}{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}{%endraw%}%26uid%3D%5BUUID%5D")
-  ...
-}
-```
-
-If you don't have a good default, please add a comment instead.
-
-```go
-func (cfg *Configuration) setDerivedDefaults() {
-  ...
-  // openrtb_ext.Bidder{Bidder} doesn't have a good default.
-  ...
-}
-```
-
-
-Yes, you're right. That url value is quite complicated. You can find further details in our [user sync documentation](https://docs.prebid.org/prebid-server/developers/pbs-cookie-sync.html).
-
-The user sync endpoint is composed of two main parts, the url of your user syncer and a redirect back to Prebid Server. The url of your user syncer is responsible for reading the user id from the client's cookie and redirecting to Prebid Server with a user id macro resolved.
-
-The url of your user syncer can make use of the following privacy policy macros which will be resolved by Prebid Server before sending the url to your server:
-- `{%raw%}{{.USPrivacy}}{%endraw%}`: Client's CCPA consent string.
-- `{%raw%}{{.GDPR}}{%endraw%}`: Client's GDPR TCF enforcement flag.
-- `{%raw%}{{.GDPRConsent}}{%endraw%}`: Client's GDPR TCF consent string.
-
-<details markdown="1">
-  <summary>Example: Bidding server url with no macros.</summary>
-
-```go
-"https://your.url/sync?r="
-```
-</details>
-
-<details markdown="1">
-  <summary>Example: Bidding server url with CCPA privacy consent.</summary>
-
-```go
-"https://your.url/sync?usp={%raw%}{{.USPrivacy}}{%endraw%}&r="
-```
-</details>
-<p></p>
-
-The redirect url for Prebid Server must follow this format:
-```
-{host}/setuid?bidder={bidder}&gdpr={%raw%}{{.GDPR}}&gdpr_consent={{.GDPRConsent}}{%endraw%}&uid=[UUID]
-```
-
-{: .table .table-bordered .table-striped }
-| Token | Description
-| - | -
-| `{host}` | Placeholder for the Prebid Server host url. In code, you would substitute it with `url.QueryEscape(externalURL)`. 
-| `{bidder}` | Placeholder for the name of your bid adapter.
-| `[UUID]` | Macro defined by your user sync server which will be replaced with the user's id.
-
-The final value of the redirect url is encoded for safe use within a query string:
-
-```
-{host}%2Fsetuid%3Fbidder%3D{bidder}%26gdpr%3D{%raw%}{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}{%endraw%}%26uid%3D%5BUUID%5D
-```
-
 ## Test Your Adapter
 
-This chapter will guide you through the creation of automated unit tests to cover your bid adapter code, bidder parameters JSON Schema, and user sync code. We use GitHub Action Workflows to ensure the code you submit passes validation. You can run the same validation locally with this command:
+This section will guide you through the creation of automated unit tests to cover your bid adapter code and bidder parameters JSON Schema. We use GitHub Action Workflows to ensure the code you submit passes validation. You can run the same validation locally with this command:
 
 ```bash
 ./validate.sh --nofmt --cov --race 10
@@ -883,7 +916,7 @@ This chapter will guide you through the creation of automated unit tests to cove
 
 ### Adapter Code Tests
 
-Bid requests and server responses can be quite verbose. To avoid large blobs of text embedded within test code, we've created a framework for bid adapters which use a JSON body and/or a url. If your bidding server uses another payload format, such as XML, you're on your own.
+Bid requests and server responses can be quite verbose. To avoid large blobs of text embedded within test code, we've created a framework for bid adapters which use a JSON body and/or a url to send a bid request. We require the use of our test framework as it includes checks to ensure no changes are made to shared memory.
 
 We strive for as much test coverage as possible, but recognize that some code paths are impractical to simulate and rarely occur. You do not need to test the error conditions for `json.Marshal` calls, for template parse errors within `MakeRequests` or `MakeBids`, or for `url.Parse` calls. Following this guidance usually results in a coverage rate of around 90% - 95%, although we don't enforce a specific threshold.
 
@@ -894,7 +927,7 @@ package {bidder}
 
 import (
   "testing"
-  
+
   "github.com/prebid/prebid-server/adapters/adapterstest"
   "github.com/prebid/prebid-server/config"
   "github.com/prebid/prebid-server/openrtb_ext"
@@ -903,11 +936,11 @@ import (
 func TestJsonSamples(t *testing.T) {
   bidder, buildErr := Builder(openrtb_ext.Bidder{Bidder}, config.Adapter{
     Endpoint: "http://whatever.url"})
-  
+
   if buildErr != nil {
     t.Fatalf("Builder returned unexpected error %v", buildErr)
   }
-  
+
   adapterstest.RunJSONBidderTest(t, "{bidder}test", bidder)
 }
 ```
@@ -962,7 +995,7 @@ The format of a JSON test is as follows:
 
 The `mockBidRequest`, `httpCalls`, and `expectedBidResponses` fields are required. The `expectedMakeRequestsErrors` and `expectedMakeBidsErrors` may be omitted if there are no expected errors. We provide a `literal` and `regex` mode for testing error values. We often use the `regex` mode to handle error messages produced by the core Go framework which changed between recent releases.
 
-To make everyone's life easier, please use a JSON 'prettifier' to apply standard formatting to your test files. We recommend the use of Visual Studio Code's [Beautify](https://marketplace.visualstudio.com/items?itemName=HookyQR.beautify) extension.
+Please use a JSON 'prettifier' to apply standard formatting to your test files. We recommend the use of Visual Studio Code's [Beautify](https://marketplace.visualstudio.com/items?itemName=HookyQR.beautify) extension.
 
 ### Builder Tests
 
@@ -974,7 +1007,7 @@ If your adapter supports template parsing, we recommend adding this failure test
 func TestEndpointTemplateMalformed(t *testing.T) {
   _, buildErr := Builder(openrtb_ext.Bidder{Bidder}, config.Adapter{
     Endpoint: "{%raw%}{{Malformed}}{%endraw%}"})
-    
+
   assert.Error(t, buildErr)
 }
 ```
@@ -987,7 +1020,7 @@ func TestBadConfig(t *testing.T) {
     Endpoint:         `http://it.doesnt.matter/bid`,
     ExtraAdapterInfo: `{foo:42}`,
   })
-  
+
   assert.Error(t, buildErr)
 }
 
@@ -996,27 +1029,14 @@ func TestEmptyConfig(t *testing.T) {
     Endpoint:         `http://it.doesnt.matter/bid`,
     ExtraAdapterInfo: ``,
   })
-  
+
   bidder{Bidder} := bidder.(*adapter)
-  
+
   assert.NoError(t, buildErr)
   assert.Empty(t, bidder{Bidder}.extraInfo.SomeInfo)
 }
 ```
 
-### Adapter Race Condition Tests
-
-You must define race condition tests for each media type supported by your bid adapter. We don't expect bid adapters to run concurrent code. Rather, these tests attempt to verify your bid adapter doesn't modify shared memory. We use Go's [race detector](https://golang.org/doc/articles/race_detector.html) which is a great line of defense, but it may produce false negatives. It will not produce false positives, so please investigate further if these tests ever fail.
-
-Create a file with the path `adapters/{bidder}/{bidder}test/params/race/{mediaType}.json` for each `banner`, `video`, `audio`, and `native` media type supported by your adapter. Include all required and optional bidder parameters defined by your JSON Schema.
-
-Here's an example file using the same example JSON Schema from other chapters:
-```json
-{
-  "placementId": "Some Placement"
-}
-```
-
 ### Bidder Parameter Tests
 
 The bidder parameter JSON Schema files are considered a form of code and must be tested. Create a file with the path `adapters/{bidder}/params_test.go` using the following template:
@@ -1027,7 +1047,7 @@ package {bidder}
 import (
   "encoding/json"
   "testing"
-  
+
   "github.com/prebid/prebid-server/openrtb_ext"
 )
 
@@ -1036,7 +1056,7 @@ func TestValidParams(t *testing.T) {
   if err != nil {
     t.Fatalf("Failed to fetch the json schema. %v", err)
   }
-  
+
   for _, p := range validParams {
     if err := validator.Validate(openrtb_ext.Bidder{Bidder}, json.RawMessage(p)); err != nil {
       t.Errorf("Schema rejected valid params: %s", p)
@@ -1049,7 +1069,7 @@ func TestInvalidParams(t *testing.T) {
   if err != nil {
     t.Fatalf("Failed to fetch the json schema. %v", err)
   }
-  
+
   for _, p := range invalidParams {
     if err := validator.Validate(openrtb_ext.Bidder{Bidder}, json.RawMessage(p)); err == nil {
       t.Errorf("Schema allowed invalid params: %s", p)
@@ -1068,66 +1088,11 @@ var invalidParams = []string{
 ```
 Please include tests for required fields, optional fields, conditional fields such as `oneOf`, regex filters, and data type mismatches. For example, if the field is defined as a string please include one invalid case for the wrong data type such as an integer in this example.
 
-You don't have to go crazy with combinatorials. We're looking for just enough test cases to build confidence.
-
-### User Syncer Tests
-
-{: .alert.alert-info :}
-Please skip to the end of this section if your adapter doesn't define a user syncer.
-
-We ask that you include a user syncer test to verify the basic mechanics of macro substitution. The `syncURL` should be the same value used in the `setDefaultUsersync` call with the `url.QueryEscape(externalURL)` code replaced with a simple hardcoded value such as `"host"`. Please keep the privacy policy values simple, as we're only testing substitution.
-
-Create a file with the path `adapters/{bidder}/usersync_test.go` using the following template:
-
-```go
-package {bidder}
-
-import (
-  "testing"
-  "text/template"
-  
-  "github.com/prebid/prebid-server/privacy"
-  "github.com/prebid/prebid-server/privacy/ccpa"
-  "github.com/prebid/prebid-server/privacy/gdpr"
-  "github.com/stretchr/testify/assert"
-)
-
-func TestSyncer(t *testing.T) {
-  syncURL := "<Copy From Default Config>"
-  syncURLTemplate := template.Must(
-    template.New("sync-template").Parse(syncURL),
-  )
-  
-  syncer := NewSyncer(syncURLTemplate)
-  syncInfo, err := syncer.GetUsersyncInfo(privacy.Policies{
-    GDPR: gdpr.Policy{
-      Signal:  "A",
-      Consent: "B",
-    },
-    CCPA: ccpa.Policy{
-      Consent: "C",
-    },
-  })
-  
-  assert.NoError(t, err)
-  assert.Equal(t, "<syncURL With Macros Resolved>", syncInfo.URL)
-  assert.Equal(t, "redirect", syncInfo.Type)
-}
-```
-
-If you *DON'T* have a user syncer, edit the file `usersync/usersyncers/syncer_test.go` to exclude your bid adapter from user sync tests:
-
-```go
-adaptersWithoutSyncers := map[openrtb_ext.BidderName]bool{
-  ...
-  openrtb_ext.Bidder{Bidder}: true,
-  ...
-}
-```
+There is no need to provide a combinatorial for every edge case possibility. We're looking for just enough test cases to build confidence.
 
 ### Manual End To End Tests
 
-We'll verify your adapter works correctly on a technical level during the code review, but you'll need to perform separate end-to-end testing:
+We'll verify your adapter works correctly on a technical level during the code review, but you'll need to perform manual end-to-end testing:
 
 1. Build the project and start your server:
    ```bash
@@ -1171,13 +1136,15 @@ We'll verify your adapter works correctly on a technical level during the code r
     }'
    ```
 
-If your bid adapters defines a user syncer, please perform end-to-end testing of the user sync process:
+### User Sync Testing
+
+If your bid adapter defines one or more user sync endpoints, you'll need to perform manual end-to-end testing of each endpoint using the following process:
 
-1.  [Save a User ID](https://docs.prebid.org/prebid-server/endpoints/pbs-endpoint-setuid.html) using the `familyName` of your user syncer. This is likely the same as your bidder name.
+1.  [Save a User ID](https://docs.prebid.org/prebid-server/endpoints/pbs-endpoint-setuid.html) using the `key` of your user sync endpoint. This should default to your bidder name and is case sensitive.
 
 1. Run a test auction (see the curl example above) and verify in the debug response that the outgoing `request.ext.debug.httpcalls` calls includes the User ID you saved in step 1.
 
-It may be a bit tricky to track down the root cause of user sync errors. If you get stuck, please [submit a GitHub issue](https://github.com/prebid/prebid-server/issues/new) and we'll provide guidance.
+If you are having issues finding the root cause of user sync errors, please [submit a GitHub issue](https://github.com/prebid/prebid-server/issues/new) and we'll provide guidance.
 
 ## User Documentation
 
@@ -1201,7 +1168,9 @@ dchain_supported: true/false
 userId: <list of supported vendors>
 media_types: banner, video, audio, native
 safeframes_ok: true/false
-bidder_supports_deals: true/false
+deals_supported: true/false
+floors_supported: true/false
+fpd_supported: true/false
 pbjs: true/false
 pbs: true/false
 pbs_app_supported: true/false
@@ -1231,7 +1200,9 @@ Notes on the metadata fields:
 - If you support adding a demand chain on the bid response, add `dchain_supported: true`. Default is false.
 - If your bidder doesn't work well with safeframed creatives, add `safeframes_ok: false`. This will alert publishers to not use safeframed creatives when creating the ad server entries for your bidder. No default.
 - If your bidder supports mobile apps, set `pbs_app_supported: true`. No default value.
-- If your bidder supports deals, set `bidder_supports_deals: true`. No default value.
+- If your bidder supports deals, set `deals_supported: true`. No default value.
+- If your bidder supports floors, set `floors_supported: true`. No default value.
+- If your bidder supports first party data, set `fpd_supported: true`. No default value.
 - If you're a member of Prebid.org, add `prebid_member: true`. Default is false.
 
 
@@ -1248,13 +1219,6 @@ Notes on the metadata fields:
   - `adapters/{bidder}/{bidder}_test.go`
   - `adapters/{bidder}/{bidder}test/exemplary/*.json`
   - `adapters/{bidder}/{bidder}test/supplemental/*.json`
-  - `adapters/{bidder}/{bidder}test/params/race/{mediaType}.json` 
-- User Syncer - If You Have One
-  - `adapters/{bidder}/usersync.go`
-  - `adapters/{bidder}/usersync_test.go`
-  - `usersync/usersyncers/syncer.go`
-- User Syncer - If You Don't
-  - `usersync/usersyncers/syncer_test.go`
 - Register With The Core
   - `openrtb_ext/bidders.go`
   - `exchange/adapter_builders.go`
@@ -1263,7 +1227,7 @@ Notes on the metadata fields:
 
 ## Contribute
 
-Whew! You're almost done. Thank you for taking the time to develop a Prebid Server bid adapter. When you're ready, [contribute](https://github.com/prebid/prebid-server/blob/master/docs/developers/contributing.md) your new bid adapter by opening a PR to the [PBS-Go GitHub repository](https://github.com/prebid/prebid-server) with the name "New Adapter: {Bidder}".
+Thank you for taking the time to develop a Prebid Server bid adapter. When you're ready, [contribute](https://github.com/prebid/prebid-server/blob/master/docs/developers/contributing.md) your new bid adapter by opening a PR to the [PBS-Go GitHub repository](https://github.com/prebid/prebid-server) with the name "New Adapter: {Bidder}".
 
 {: .alert.alert-warning :}
 You don't need to ask permission or open a GitHub issue before submitting an adapter.
diff --git a/prebid-server/developers/add-new-bidder-java.md b/prebid-server/developers/add-new-bidder-java.md
index 692954b274..039b678c8e 100644
--- a/prebid-server/developers/add-new-bidder-java.md
+++ b/prebid-server/developers/add-new-bidder-java.md
@@ -78,13 +78,7 @@ Create a file with the path `static/bidder-info/{bidder}.yaml` and begin with th
 ```yaml
 adapters:
   yourBidderCode:
-    enabled: false
     endpoint: http://possible.endpoint
-    pbs-enforces-gdpr: true
-    pbs-enforces-ccpa: true
-    modifying-vast-xml-allowed: true
-    deprecated-names:
-    aliases:
     meta-info:
       maintainer-email: maintainer@email.com
       app-media-types:
@@ -109,8 +103,8 @@ adapters:
 
 Modify this template for your bid adapter:
 - Change the maintainer email address to a group distribution list on your ad server's domain. A distribution list is preferred over an individual mailbox to allow for robustness, as roles and team members naturally change.
-- Change the `modifyingVastXmlAllowed` value to `true` if you'd like to opt-in for video impression tracking.
-- Change the `enabled` value to `true` if you'd like to make your bid adapter enabled.
+- Change the `modifying-vast-xml-allowed` value to `false` if you'd like to opt out of video impression tracking. It defaults to `true`.
+- Change the `pbs-enforces-ccpa` to `false` if you'd like to disable ccpa enforcement. Defaults to `true`.
 - Change the `vendor-id` value to id of your bidding server as registered with the [GDPR Global Vendor List (GVL)](https://iabeurope.eu/vendor-list-tcf-v2-0/). Leave this as `0` if you are not registered with IAB Europe.
 - Remove the `capabilities` (app/site) and `mediaTypes` (banner/video/audio/native) combinations which your adapter does not support.
 - Change the `cookie-family-name` to the name which will be used for storing your user sync id within the federated cookie. Please keep this the same as your bidder name.
@@ -124,6 +118,25 @@ The url of your user syncer can make use of the following privacy policy macros
 
 - Change the `usersync:type` value to `redirect` or `iframe` specific to your bidder.
 
+### Default bidder configuration
+
+Prebid Server has default configuration for common bidder properties, which can be overriden by bidders in their
+configurations.
+
+Default configuration:
+
+```yaml
+adapter-defaults:
+  enabled: false
+  pbs-enforces-ccpa: true
+  modifying-vast-xml-allowed: true
+```
+
+There are also some default properties which can't be overridden in adapter-defaults, but rather in particular adapter's config:
+- `aliases`: Defaults to empty
+- `deprecated-names`: Defaults to empty
+- `extra-info`: Defaults to empty
+
 ### Create bidder alias
 If you want to add bidder that is an alias of existing bidder, you need just to update configuration of parent bidder:
 
@@ -131,12 +144,7 @@ Example of adding bidder alias:
 ```yaml
 adapters:
   yourBidderCode:
-    enabled: false
-    endpoint: http://possible.endpoint
-    pbs-enforces-gdpr: true
-    pbs-enforces-ccpa: true
-    modifying-vast-xml-allowed: true
-    deprecated-names:
+    ...
     aliases: 
       yourBidderAlias:
         endpoint: http://possible.alias/endpoint
@@ -148,26 +156,6 @@ adapters:
           - video
         usersync:
           cookie-family-name: yourBidderCode
-    meta-info:
-      maintainer-email: maintainer@email.com
-      app-media-types:
-        - banner
-        - video
-        - audio
-        - native
-      site-media-types:
-        - banner
-        - video
-        - audio
-        - native
-      supported-vendors:
-      vendor-id: your_vendor_id
-    usersync:
-      url: your_bid_adapter_usersync_url
-      redirect-url: /setuid?bidder=yourBidderCode&gdpr={%raw%}{{gdpr}}{%endraw%}&gdpr_consent={%raw%}{{gdpr_consent}}{%endraw%}&us_privacy={%raw%}{{us_privacy}}{%endraw%}
-      cookie-family-name: yourBidderCode
-      type: redirect
-      support-cors: false
 ```
 
 Aliases are configured by adding child configuration object at `adapters.yourBidderCode.aliases.yourBidderAlias`
@@ -563,7 +551,7 @@ Please review the entire [OpenRTB 2.5 Bid Response](https://www.iab.com/wp-conte
 | `.Bids[].Bid.Price` | Required | Net price CPM of the bid, not gross price. Publishers can correct for gross price bids by setting Bid Adjustments to account for fees. We recommend the most granular price a bidder can provide.
 | `.Bids[].Bid.W` | Optional | Width of the creative in pixels.
 | `.Bids[].Bid.H` | Optional | Height of the creative in pixels.
-| `.Bids[].Bid.Ext` | Optional | Embedded JSON containing Prebid metadata (see below) or custom information.
+| `.Bids[].Bid.Ext.Prebid.Meta` | Optional | Embedded JSON containing Prebid metadata (see below) or custom information.
 
 {: .alert.alert-info :}
 We recommend resolving creative OpenRTB macros in your adapter. Otherwise, AUCTION_PRICE will eventually get resolved by the [Prebid Universal Creative](https://github.com/prebid/prebid-universal-creative), but by then the bid price will be in the ad server currency and quantized by the price granularity.
@@ -584,7 +572,7 @@ Either `.Bids[].BidVideo.PrimaryCategory` or `.Bids[].Bid.Cat` should be provide
 Prebid has historically struggled with sharing granular bid response data with publishers, analytics, and reporting systems. To address this, we've introduced a standard object model. We encourage adapters to provide as much information as possible in the bid response.
 
 {: .alert.alert-danger :}
-Bid metadata will be *required* in Prebid.js 5.x+ release, specifically for AdvertiserDomains and MediaType. We recommend making sure your adapter sets these values or Prebid.js may throw out the bid.
+Bid metadata will be *required* in Prebid.js 5.X+ release, specifically for bid.ADomain and MediaType. We recommend making sure your adapter sets these values or Prebid.js may throw out the bid.
 
 {: .table .table-bordered .table-striped }
 | Path | Description |
@@ -595,13 +583,12 @@ Bid metadata will be *required* in Prebid.js 5.x+ release, specifically for Adve
 | `.AgencyName` | Bidder-specific agency name |
 | `.AdvertiserID` | Bidder-specific advertiser id |
 | `.AdvertiserName` | Bidder-specific advertiser name |
-| `.AdvertiserDomains` | Advertiser domains for the landing page(s). Should match `.Bids[].Bid.ADomain` |
 | `.BrandID` | Bidder-specific brand id for advertisers with multiple brands |
 | `.BrandName` | Bidder-specific brand name |
 | `.dchain` | Demand Chain Object
 | `.PrimaryCategoryID` | Primary IAB category id |
 | `.SecondaryCategoryIDs` | Secondary IAB category ids |
-| `.MediaType` | Either `banner`, `audio`, `video`, or `native`. Should match `.Bids[].BidType` |
+| `.MediaType` | Either `banner`, `audio`, `video`, or `native`. This is used in the scenario where a bidder responds with a mediatype different than the stated type. e.g. native when the impression is for a banner. One use case is to help publishers determine whether the creative should be wrapped in a safeframe. |
 
 <p></p>
 
@@ -696,7 +683,16 @@ public class {bidder}Configuration {
 }
 ```
 
-### Converting Floor Prices (optional)
+### Currency
+
+Prebid Server is a global product that is currency agnostic. Publishers may ask for bids in any currency. It's totally fine if your bidding endpoint only supports a single currency, but your adapter needs to deal with it. This section will describe how to do so.
+
+Here are 3 key points to consider:
+
+1. If your endpoint only bids in a particular currency, then your adapter must not blindly forward the openrtb to your endpoint. You should instead set $.cur to your server's required currency.
+2. Your adapter must label bid responses properly with the response currency. i.e. if you only bid in USD, then your adapter must set USD as the response currency. PBS will convert to the publisher's requested currency as needed. See the [currency feature](/prebid-server/features/pbs-currency.html) for more info.
+3. You should be aware that floors can be defined in any currency. If your bidding service supports floors, but only in a particular currency, then you must read use the CurrencyConversionService before sending $.imp[].bidfloor and $.imp[].bidfloorcur to your endpoint.
+
 If you need to convert floor prices from one currency into something your endpoint expects, you can use the convertCurrency function from CurrencyConversionService component.
 
 1) Inject CurrencyConversionService to your {bidder}Configuration class and pass it to your bidder constructor.
@@ -808,7 +804,6 @@ Go to `test-application.properties` file and add folowing properties
 ```yaml
 adapters.{bidder}.enabled=true
 adapters.{bidder}.endpoint=http://localhost:8090/{bidder}-exchange
-adapters.{bidder}.pbs-enforces-gdpr=true
 adapters.{bidder}.usersync.url=//{bidder}-usersync
 ```
 
@@ -1182,7 +1177,9 @@ dchain_supported: true/false
 userId: <list of supported vendors>
 media_types: banner, video, audio, native
 safeframes_ok: true/false
-bidder_supports_deals: true/false
+deals_supported: true/false
+floors_supported: true/false
+fpd_supported: true/false
 pbjs: true/false
 pbs: true/false
 pbs_app_supported: true/false
@@ -1212,7 +1209,9 @@ Notes on the metadata fields:
 - If you support adding a demand chain on the bid response, add `dchain_supported: true`. Default is false.
 - If your bidder doesn't work well with safeframed creatives, add `safeframes_ok: false`. This will alert publishers to not use safeframed creatives when creating the ad server entries for your bidder. No default.
 - If your bidder supports mobile apps, set `pbs_app_supported`: true. No default value.
-- If your bidder supports deals, set `bidder_supports_deals: true`. No default value.
+- If your bidder supports deals, set `deals_supported: true`. No default value.
+- If your bidder supports floors, set `floors_supported: true`. No default value.
+- If your bidder supports first party data, set `fpd_supported: true`. No default value.
 - If you're a member of Prebid.org, add `prebid_member: true`. Default is false.
 
 
diff --git a/prebid-server/developers/module-atags.md b/prebid-server/developers/module-atags.md
new file mode 100644
index 0000000000..483e68af3d
--- /dev/null
+++ b/prebid-server/developers/module-atags.md
@@ -0,0 +1,233 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Prebid Server | Developers | Module Analytics Tags Conventions
+sidebar_entry: /prebid-server/developers/add-a-module.html
+---
+
+# Prebid Server - Module Analytics Tags Conventions
+{: .no_toc}
+
+* TOC
+{:toc }
+
+## Overview
+
+Analytics Tags (aka ‘ATags’) are a log mechanism provided by PBS-core to allow modules
+to inform analytics adapters about what happened in the request.
+Use of the Analytics Tag structure is completely optional. It's meant
+to be used when there are application or reporting reasons for sharing module results.
+See the [Prebid Server module overview](/prebid-server/developers/add-a-module.html) for background information.
+
+This document defines a convention aimed at allowing module developers to create
+consistent ATags that can be easily read by analytics adapters.
+
+![Prebid Server ATags](/assets/images/prebid-server/module-atags.png){:class="pb-xlg-img"}
+
+1. Modules may return a data structure containing ATags to PBS-Core.
+2. PBS-Core adds any ATags to the 'invocation context' data structure.
+3. Analytics modules have access to the invocation context.
+
+## Analytics Tag Conventions
+
+The general idea is that ATags are a list of module-specific "activities" that have these attributes:
+- activity name: should be unique within the context of this module. e.g. 'enrich-request'
+- an overall status
+- an array of specific results within the activity
+- within the results:
+  - status of each result
+  - scope of the result
+  - module-specific values for the result
+
+Here's an example from the [ORTB2 Blocking module](/prebid-server/pbs-modules/ortb2-blocking.html):
+
+```
+[{
+   // scenario: response from bidderA blocked on badv for imp=1
+   activities: [{
+    name: "enforce-blocking",
+    status: "success", // no errors from the module
+    results: [{
+        status: "success-block",
+        values: { // these are module-specific details about the result
+                  "attributes": ["badv"],
+                  "adomain": ["bad.com"]
+        },
+        appliedto: {
+          "bidder": "bidderA",
+           impids: ["1"]
+        }
+    },{
+        status: "success-allow",
+        // no details needed when the response isn't blocked
+        appliedto: {
+          "bidder": "bidderA",
+          "impids": ["2","3","4"]
+        }
+    }]
+ }]
+```
+
+The following table contains the field conventions.
+
+{: .table .table-bordered .table-striped }
+| ATag Attr | Required? | Description | Type |
+|---+---+---+---|
+| activities | yes | One or more activities carried out by the module. | array of objects |
+| activities .name | yes | Name of the activity. Must be documented and unique within the module. | string |
+| activities .status | yes | Did the module operate successfully? Values are "error" or "success". | string |
+| activities. results | no | Service-dependent details for what the service actually did. | array of objects |
+| activities. results. status | no | Detailed status for this specific action. Values: "error", "success-allow", "success-block", "success-modify" | string |
+| activities. results. values | no | service-specific details | object |
+| activities. results .appliedto | no | Which object(s) the service examined or modified. | object |
+| activities. results. appliedto. impids | no | The service examined these specific impression objects or bid responses corresponding to imp objects | array of strings |
+| activities. results. appliedto. bidders | no | The service examined these specific bidders within the request or response. | array of strings |
+| activities. results. appliedto. bidder | no | The service examined this specific bidder (singular) within the request or response. | string |
+| activities. results. appliedto. request | no | The service examined the entire openrtb request object. This is in case the module updated something not adunit-specific. | boolean |
+| activities. results. appliedto. response | no | The service examined the entire openrtb response object. This is in case the module updated something not adunit-specific. | boolean |
+
+
+## Designing Analytics Tags
+
+ATags are for reporting. Start by considering what the module's doing that consumers might want to display. Each processing stage the module operates in may be
+reported as a separate activity, or perhaps everything the module does is lumped
+as one activity.
+
+Once the activities are defined, determine what reportable metric would be useful. Examples:
+
+- percentage of impressions enriched
+- percentage of imps where a specific bidder was removed due to optimization
+- A/B testing data
+- percentage and value of bid responses that were rejected due to creative validations
+
+{: .alert.alert-info :}
+**Case study:** for the ORTB2 Blocking module, the requirement was to be able
+to report on what percentage of responses from each bidder were being thrown
+away due to blocking rules. This could have been done by defining a separate 'activity' for each of the 4 types of enforcement, but it was decided
+to just have one kind of activity ('enforce-blocking') and get the specific
+details as part of the 'value'. There was no requirement to report on the 
+outbound part of what the module does, so no ATags are created for that part
+of the functionality.
+
+Once you know what reports are desired, figure out which activity 'results'
+are needed to generate those numbers.
+
+{: .alert.alert-info :}
+For the ORTB2 Blocking module, the numbers needed are how often a given
+bidder has a response compared to how often their responses are rejected.
+So overall the block rate is: successBlock divided by (successBlock + successAllow).
+
+## Document the Analytics Tags Produced
+
+Be sure to detail the results in your module documentation so that analytics adapters are
+aware of what they can look for.
+
+Let them know:
+- which activities your module supports
+- what kind of results to expect
+- whether the results objects have module-specific `values`
+
+## Parsing the Invocation Context
+
+If you're an analytics adapter, you will be given the entire PBS 'invocation context', which contains a wealth of information about the auction.
+
+In short, to get analytics tags, you'll need to parse this data structure:
+
+- Loop through stages[]
+  - If the stage has relevant info, loop through outcomes[]
+    - Outcomes.entity is a label describing the contents
+    - Loop through groups[]
+      - Loop through invocationresults[]
+        - if `hookid.modulecode` is relevant for your analytics, grab `analyticstags`
+
+Here's an example of the data structured as JSON, though the details
+of the actual object will differ in PBS-Java and PBS-Go.
+```
+          "stages": [
+            {
+              "stage": "raw-auction-request",
+              "outcomes": [
+                {
+                  "entity": "bidrequest",
+                  "executiontimemillis": 246,
+                  "groups": [
+                    {
+                      "executiontimemillis": 190,
+                      "invocationresults": [
+                        {
+                          "hookid": {
+                            "modulecode": "MODULE1",
+                            "hookimplcode": "HOOK_A"
+                          },
+                          "executiontimemillis": 123,
+                          "status": "success",
+                          "action": "update",
+                          "debugmessages": [
+                            "debug message"
+                          ],
+                         "analyticstags": {
+                            "activities": [
+                              {
+                                "name": "device-id",
+                                "status": "success",
+                                "results": [
+                                  {
+                                    "status": "success",
+                                    "values": {
+                                      "some-field": "some-value"
+                                    },
+                                    "appliedto": {
+                                      "impids": [ "impId1" ]
+                                    }
+                                  }
+                                ]
+                              }
+                            ]
+                          }
+                        },
+                        {
+                          "hookid": {
+                            "modulecode": "MODULE1",
+                            "hookimplcode": "HOOK_B"
+                          },
+                          "status": "success",
+                          "message": "inventory has no value",
+                          "action": "reject"
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "stage": "bidder-request",
+              "outcomes": [
+                {
+                  "entity": "pubmatic", // entity is biddercode for some stages
+                  "executiontimemillis": 246,
+                  "groups": [
+                    "invocationresults": {
+                      "hookid": { ... }
+                      "analyticstags": [{
+			...
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "entity": "adform",
+                  "executiontimemillis": 246,
+                  "groups": [...]
+                }
+              ]
+            }
+          ]
+```
+
+See the implementation guide for your platform for specific syntax.
+
+## Further Reading
+
+- [PBS Module Overview](/prebid-server/developers/add-a-module.html)
+- [PBS Module Implementation](/prebid-server/developers/add-a-module.html)
diff --git a/prebid-server/developers/pbs-cookie-sync.md b/prebid-server/developers/pbs-cookie-sync.md
index 5469f89994..dc739375db 100644
--- a/prebid-server/developers/pbs-cookie-sync.md
+++ b/prebid-server/developers/pbs-cookie-sync.md
@@ -50,9 +50,9 @@ POST https://prebid-server.example.com/cookie_sync
 
 3) When it receives the response, Prebid.js loops through each element of `bidder_status[]`, dropping a pixel for each `bidder_status[].usersync.url`.
 
-4) The bidder-specific endpoints read the users's cookie for the bidder's domain and respond with a redirect back to Prebid Server's [`/setuid` endpoint](/prebid-server/endpoints/pbs-endpoint-setuid.html)
+4) The bidder-specific endpoints read the users' cookie for the bidder's domain and respond with a redirect back to Prebid Server's [`/setuid` endpoint](/prebid-server/endpoints/pbs-endpoint-setuid.html)
 
-5) When the browser receives this redirect, it contacts Prebid Server, which will once again check the privacy settings and will update the `uids` cookie if allowed.
+5) When the browser receives this redirect, it contacts Prebid Server, which will once again check the privacy settings and if allowed,  update the `uids` cookie.
 
 ### Setting the uids cookie from AMP
 
@@ -60,7 +60,8 @@ Cookie sync for AMP works in a way quite similar to Prebid.js.
 
 1) The Prebid Server hosting company places a modified version of the `load-cookie` script onto a CDN. This script is part of the [Prebid Universal Creative](https://github.com/prebid/prebid-universal-creative/blob/master/src/cookieSync.js) repo.
 
-Note that the only two values currently valid for 'endpoint' are 'appnexus' and 'rubicon' -- other host companies should update their copy to include their endpoint.
+{: .alert.alert-warning :}
+The only two values currently valid for 'endpoint' are 'appnexus' and 'rubicon' -- other host companies should update their copy to include their endpoint.
 
 See [the AMP implementation guide](/dev-docs/show-prebid-ads-on-amp-pages.html#user-sync) for more information.
 
@@ -76,21 +77,19 @@ See [the AMP implementation guide](/dev-docs/show-prebid-ads-on-amp-pages.html#u
 </amp-iframe>
 ```
 
-Note: if the publisher has an AMP Consent Management Platform, they should use `load-cookie-with-consent.html`.
+{: .alert.alert-info :}
+If the publisher has an AMP Consent Management Platform, they should use `load-cookie-with-consent.html`.
 
 3) At runtime, the `load-cookie` script just calls the Prebid Server /cookie_sync endpoint. The rest works the same as described for Prebid.js above.
 
 
 ## Bidder Instructions for Building a Sync Endpoint
 
-Building a sync endpoint is optional -- mobile-only bidders don't benefit from
-ID syncing. But for browser-based bidding, ID syncing can help improve buyer bid rate. There are two main options a bidder can choose to support:
+Building a sync endpoint is optional -- there is no benefit from ID syncing for mobile-only bidders. For browser-based bidding, ID syncing can help improve buyer bid rate. There are two main options a bidder can choose to support:
 
 - redirect: the client will drop an IMG tag into the page, then call the bidder's URL which needs to redirect to the Prebid Server /setuid endpoint.
 - iframe: the client will drop an IFRAME tag into the page, then call the bidder's URL which responds with HTML and Javascript that calls the Prebid Server /setuid endpoint at some point.
 
-PBS-Java allows bidders to support both options.
-
 Bidders must implement an endpoint under their domain which accepts an encoded URI for redirects. This URL should be able to accept privacy parameters:
 
 - gdpr: if 0, declares this request isn't in GDPR scope. If 1, declares it is in scope. Otherwise indeterminate.
@@ -99,20 +98,24 @@ Bidders must implement an endpoint under their domain which accepts an encoded U
 
 The specific attributes can differ for your endpoint. For instance, you could choose to receive gdprConsent rather than gdpr_consent.
 
-Here's an example that shows the privacy macros as coded into PBS-Go:
+Here's an example that shows the privacy macros as configured in PBS-Go:
 ```
-GET some-bidder-domain.com/usersync-url?gdpr={%raw%}{{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}{%endraw%}&redirectUri=prebid-server.example.com%2Fsetuid%3Fbidder%3Dsomebidder%26uid%3DYOURMACRO
+userSync:
+  redirect:
+    url: https://some-bidder-domain.com/usersync-url?gdpr={%raw%}{{.GDPR}}{%endraw%}&consent={%raw%}{{.GDPRConsent}}{%endraw%}&us_privacy={%raw%}{{.USPrivacy}}{%endraw%}&redirect={%raw%}{{.RedirectURL}}{%endraw%}
+    userMacro: YOURMACRO
 ```
+
 PBS-Java uses slightly different macros in the bidder config:
 ```
-    usersync:
-      url: https://some-bidder-domain.com/usersync-url?gdpr={%raw%}{{gdpr}}&gdpr_consent={{gdpr_consent}}&us_privacy={{us_privacy}}{%endraw%}&redirectUri=
-      redirect-url: /setuid?bidder=acuityads&gdpr={{gdpr}}&gdpr_consent={{gdpr_consent}}&us_privacy={{us_privacy}}&uid=YOURMACRO
+usersync:
+  url: https://some-bidder-domain.com/usersync-url?gdpr={%raw%}{{gdpr}}&gdpr_consent={{gdpr_consent}}&us_privacy={{us_privacy}}{%endraw%}&redirectUri=
+  redirect-url: /setuid?bidder=acuityads&gdpr={%raw%}{{gdpr}}{%endraw%}&gdpr_consent={%raw%}{{gdpr_consent}}{%endraw%}&us_privacy={%raw%}{{us_privacy}}{%endraw%}&uid=YOURMACRO
 ```
-In either case, the {%raw%}{{}}{%endraw%} macros are resolved by PBS.
+In either case, the {%raw%}{{...}}{%endraw%} macros are resolved by PBS.
 
-{: .alert.alert-info :}
-Important: The "YOURMACRO" string here needs to be whatever your sync endpoint will recognize and resolve to the user's ID from your domain. Some examples of macros that bidders use: $UID, ${UID}, $$visitor_cookie$$, ${DI_USER_ID}, etc. Every bidder has their own value here.
+{: .alert.alert-warning :}
+The "YOURMACRO" string here needs to be whatever your sync endpoint will recognize and resolve to the user's ID from your domain. Some examples of macros that bidders use: $UID, ${UID}, $$visitor_cookie$$, ${DI_USER_ID}, etc. Every bidder has their own value here.
 
 Here's how this all comes together:
 
diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md
index cf36b98875..c984822090 100644
--- a/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md
+++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md
@@ -6,10 +6,14 @@ title: Prebid Server | Endpoints | OpenRTB2 | AMP
 ---
 
 # Prebid Server | Endpoints | /openrtb2/amp
+{:.no_toc}
+
+* TOC
+{:toc}
 
 This document describes the behavior of the Prebid Server AMP endpoint in detail.
 For a more general reference, see the [Prebid AMP Implementation Guide
-]({{site.baseurl}}/dev-docs/show-prebid-ads-on-amp-pages.html).
+](/dev-docs/show-prebid-ads-on-amp-pages.html).
 
 ## GET /openrtb2/amp
 
@@ -19,24 +23,28 @@ For a more general reference, see the [Prebid AMP Implementation Guide
 | Param | Scope | Type | Description |
 | --- | --- | --- | --- |
 | tag_id | Required | `String` |  The `tag_id` ID must reference a [Stored BidRequest]({{site.baseurl}}/prebid-server/features/pbs-storedreqs.html). For a thorough description of bid request JSON, see the [/openrtb2/auction](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html) docs. |
-| w | recommended | `String` | Comes from the amp-ad.width attribute. The stored request may contain width already, but this parameter reflects what's actually in the page. It replaces imp.banner.format[0].w |
-| h | recommended | `String` | Comes from the amp-ad.height attribute. The stored request may contain height already, but this parameter reflects what's actually in the page. It replaces imp.banner.format[0].h |
+| w | recommended | `String` | Comes from the amp-ad.width attribute. The stored request may contain width already, but this parameter reflects what's actually in the page. It's used to help determine imp.banner.format[0].w. See [resolving sizes](#resolving-sizes). |
+| h | recommended | `String` | Comes from the amp-ad.height attribute. The stored request may contain height already, but this parameter reflects what's actually in the page. It's used to help determine imp.banner.format[0].h. See [resolving sizes](#resolving-sizes). |
 | ms | optional | `String` | Comes from the amp-ad.data-multi-size attribute. e.g. "970x90, 728x90". Sizes are parsed and added to imp.banner.format |
-| oh | optional | `String` | Comes from the amp-ad.data-override-height attribute. See below for details on size calculation. |
-| ow | optional | `String` | Comes from the amp-ad.data-override-width attribute. See below for details on size calculation. |
+| oh | optional | `String` | Comes from the amp-ad.data-override-height attribute. See [resolving sizes](#resolving-sizes). |
+| ow | optional | `String` | Comes from the amp-ad.data-override-width attribute. See [resolving sizes](#resolving-sizes). |
 | curl | optional | `String` | Added to OpenRTB request as site.page |
 | slot | optional | `String` | Added to OpenRTB request as imp[0].tagid |
 | timeout | optional | `String` | Added to OpenRTB request as tmax |
-| targeting | optional | `String` | First Party Data (PBS-Java only) |
+| targeting | optional | `String` | First Party Data |
 | gdpr_consent | optional | `String` | Consent string passed from CMP. Note this is used for both GDPR and CCPA. |
+| consent_type | optional | `String` | If "1", request is TCFv1 and GDPR fields are ignored. If "2", the 'gdpr_consent' field is interpreted as TCFv2. If "3", the 'gdpr_consent' field is interpreted as us_privacy. |
+| gdpr_applies | optional | `String` | Takes the values "true", "false" or empty. This is used as the value of regs.ext.gdpr. If "true", regs.ext.gdpr:1, if "false", regs.ext.gdpr:0. |
+| addtl_consent | optional | `String` | GAM "additional consent". If present, this value is copied to user.ext.ConsentedProvidersSettings.consented_providers |
 | account | optional | `String` | Can be used to pass the Prebid-Server specific account ID. This is useful if `tag_id` parameters aren't unique across accounts. |
-| debug | optional | `integer` | If 1, returns additional debug info. |
+| debug | optional | `integer` | If 1, sets ext.prebid.debug to true to obtain additional debug info. |
 
 To be compatible with AMP, this endpoint behaves different from normal `/openrtb2/auction` requests.
 
-1. The Stored `request.imp` data must have exactly one element.
-2. `request.imp[0].secure` will be always be set to `1`, because AMP requires all content to be `https`.
-3. AMP query params will overwrite parts of your Stored Request. For details, see the [Query Parameters](#query_params) section.
+1. The 'tag_id' parameter points to a stored request.
+2. The stored request must have exactly one `imp` element.
+3. The request `imp[0].secure` will be always be set to `1`, because AMP requires all content to be `https`.
+4. AMP query params will overwrite parts of your Stored Request. See the table above.
 
 ### Request
 
@@ -63,20 +71,22 @@ An example Stored Request is given below:
             }
         }
     },
-    "imp": [
-        {
-            "id": "some-impression-id",
-            "banner": {}, // The sizes are defined by your AMP tag query params settings
-            "ext": {
-                "appnexus": {
+    "imp": [{
+      "id": "some-impression-id",
+      "banner": {}, // The sizes are defined by your AMP tag query params settings
+      "ext": {
+        "prebid": {
+            "bidder": {
+                "bidderA": {
                     // Insert parameters here
                 },
-                "rubicon": {
+                "bidderB": {
                     // Insert parameters here
                 }
             }
-        }
-    ]
+         }
+      }
+    }]
 }
 ```
 
@@ -90,77 +100,38 @@ Note that other ext.prebid extensions can be specified in the stored request suc
 
 (Currently only supported in PBS-Java)
 
-You can send first party data into an AMP request by encoding a JSON
-targeting block like this:
+The nature of AMP is that user-level FPD is difficult or impossible. All of the pages are cached on a CDN and page javascript that can modify RTC calls is severely limited.
 
-```
-GET /openrtb2/amp?tag_id=7470-Eater_AMP_ROS_ATF&w=300&h=250&ow=&oh=&ms=&slot=%2F172968584%2Feater%2Fgoogle%2Famp_med_rec_02&targeting=%7B%22site%22%3A%7B%22keywords%22%3A%22article%2C%20las%20vegas%22%2C%22cat%22%3A%7B%22blah%22%3A%221%22%7D%2C%22other-attribute%22%3A%22other-value%22%2C%22ext%22%3A%7B%22data%22%3A%7B%22entry_group%22%3A%5B%22front-page%22%2C%22featured-stories%22%5D%2C%22page_type%22%3A%22AMP%22%7D%7D%7D%2C%22user%22%3A%7B%22gender%22%3A%22m%22%7D%2C%22bidders%22%3A%5B%22rubicon%22%2C%22appnexus%22%5D%2C%22keywords%22%3A%22las%20vegas%20hospitality%20employees%22%2C%22foo%22%3A%7B%22bar%22%3A%22baz%22%7D%7D...
-```
+Contextual First Party Data must be defined in the stored request entries.
 
-Prebid Server will expand the targeting value and merge the data into
-the resulting OpenRTB JSON for the appropriate bidders.
+The only field that PBS supports in the AMP call that can be considered FPD is the 'targeting' block. These are key-value pairs that are sent to the ad server. They are also copied to the ORTB JSON in imp[].ext.data.
 
-For example, if this AMP targeting is provided:
+For example, if the AMP JSON targeting provided is:
 ```
-{
-    "site": {
-      "keywords": "article, las vegas", // (1)
-      "cat": { "blah": "1" }, // invalid data type, will be dropped
-      "other-attribute": "other-value", // not openrtb2, remove
-      "ext": {
-        "data": {
-          "entry_group": ["front-page","featured-stories"], // (4)
-          "page_type": "AMP" // (5)
-        } 
-     }
-    },
-    "user": {
-      "gender": "m", // (2)
-    },
-    "bidders": ["rubicon","appnexus"], // (3)
-    "keywords": "las vegas hospitality employees", // (6)
-    "foo": { // (7)
-      "bar": "baz"
-    }
-}
+  <amp-ad width="300" height="50"
+    type="doubleclick"
+    data-slot="/1111/amp_test"
+    rtc-config='{"vendors": {"prebidrubicon": {"REQUEST_ID": "1001-my-test"}}}'
+    json='{ "targeting": {"attr1": "val1", "attr2": "val2"}}' >
+  </amp-ad>
+```
+The AMP URL would be something like this:
 ```
-The numbered elements from the raw targeting data above are merged into the resulting OpenRTB like this:
+GET /openrtb2/amp?tag_id=1001-my-test&w=300&h=250&ow=&oh=&ms=&slot=%2F1111%2Famp_test&targeting=%7B%22attr1%22%3A%22val1%22%2C%22attr2%22%3A%22val2%22%7D&...
+```
+And the resulting OpenRTB would merge these targeting values as FPD on imp.ext.data:
 ```
 {
-  "imp": [...],
-  "site": {
-    "publisher": { … },
-    "keywords": "article, las vegas" // (1)
-    "ext":{
-      "data": {
-        "entry_group": ["front-page","featured-stories"], // (4)
-        "page_type": "AMP" // (5)
-      }
-    }
-  },
-  "user": {
-    "gender": "m" // (2)
-  },
-  "ext": {
-    "prebid": {
-      "data": {
-        "bidders": ["rubicon",appnexus"], // (3)
-      }
-    }
-  },
-  "imp": [
+  "imp": [{
     ...
     "ext": {
-       "context": {
-         "data": {
-           "keywords": "las vegas hospitality employees", // (6)
-           "foo": { // (7)
-             "bar": "baz"
-           }
-         }
-       }
+      "data": {
+        "attr1": "val1",
+        "attr2": "val2"
+      }
     }
-  ]
+  }],
+  ...
 }
 ```
 
@@ -228,41 +199,7 @@ The following errors can occur when loading a stored OpenRTB request for an inco
 |  Checking stored request for match against tag_id. | 999  | No AMP config found for tag_id `%s`.  | Error is returned.  |
 |  Checking if imp exists. | 999  | Data for tag_id=`'%s'` does not define the required imp array.  | Error is returned.  |
 |  Checking if imp count is greater than one. | 999  | Data for tag_id `'%s'` includes `%d` imp elements. Only one is allowed.  | Error is returned.  |
-|  Checking if request.app exists. | 999  | `request.app` must not exist in AMP stored requests.  | Error is returned.  |
-
-
-<a name="query_params"></a>
-### Query Parameter Details
-
-   - A configuration option `amp_timeout_adjustment_ms` may be set to account for estimated latency so that Prebid Server can handle timeouts from adapters and respond to the AMP RTC request before it times out.
-
-Ensure that the amp-ad component was imported in the header.
-
-```html
-<script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.js"></script>
- ```
-
-This script provides code libraries that will convert the `<amp-ad>` properties to the endpoint query parameters. In the most basic usage pass `width` and `height` as well as `type` and a `rtc-config`.  The `type` value is the ad network you will be using. The `rtc-config` is used to pass JSON configuration to the Prebid Server, which handles the communication with [AMP RTC](https://medium.com/ampfuel/better-than-header-bidding-amp-rtc-fc54e80f3999). Vendors is an object that defines any vendors that will be receiving the RTC callout. In this example, the required parameter `tag_id` will receive the `PLACEMENT_ID` (or `REQUEST_ID`) value.
-
-```html
-<amp-ad  
-    width="300"
-    height="250"
-    rtc-config='{"vendors": {"prebidappnexus": {"PLACEMENT_ID": "ef8299d0-cc32-46cf-abcd-41cebe8b4b85"}}, "timeoutMillis": 500}'
-</amp-ad>
-```
-Here's a simplified URL:
-
-```
-/openrtb2/amp?tag_id='ef8299d0-cc32-46cf-abcd-41cebe8b4b85'&w=300&h=250&timeout=500
-```
-
-Some endpoint parameters will override parts of the Stored Request.
-
-1. `ow`, `oh`, `w`, `h`, and/or `ms` will be used to set `request.imp[0].banner.format` if `request.imp[0].banner` is present.
-2. `curl` will be used to set `request.site.page`
-3. `timeout` will generally be used to set `request.tmax`. However, the Prebid Server host can [configure](https://github.com/prebid/prebid-server/blob/master/docs/developers/configuration.md) their deploy to reduce this timeout for technical reasons.
-4. `debug` will be used to set `request.test`, causing the `response.debug` to have extra debugging info in it.
+|  Checking if app exists. | 999  | The `app` object must not exist in AMP stored requests.  | Error is returned.  |
 
 ### Resolving Sizes
 
@@ -271,15 +208,23 @@ track the logic used by `doubleclick` when resolving sizes used to fetch ads fro
 
 Specifically:
 
-1. If `ow` and `oh` exist, `request.imp[0].banner.format` will be a single element with `w: ow` and `h: oh`
-2. If `ow` and `h` exist, `request.imp[0].banner.format` will be a single element with `w: ow` and `h: h`
-3. If `oh` and `w` exist, `request.imp[0].banner.format` will be a single element with `w: w` and `h: oh`
-4. If `ms` exists, `request.imp[0].banner.format` will contain an element for every size it uses.
-5. If `w` and `h` exist, `request.imp[0].banner.format` will be a single element with `w: w` and `h: h`
-6. If `w` _or_ `h` exist, it will be used to override _one_ of the dimensions inside each element of `request.imp[0].banner.format`
-7. If none of these exist then the Stored Request values for `request.imp[0].banner.format` will be used without modification.
+1. If `ow` and `oh` exist, `imp[0].banner.format` will be a single element with `w: ow` and `h: oh`
+2. If `ow` and `h` exist, `imp[0].banner.format` will be a single element with `w: ow` and `h: h`
+3. If `oh` and `w` exist, `imp[0].banner.format` will be a single element with `w: w` and `h: oh`
+4. If `ms` exists, `imp[0].banner.format` will contain an element for every size it uses.
+5. If `w` and `h` exist, `imp[0].banner.format` will be a single element with `w: w` and `h: h`
+6. If `w` _or_ `h` exist, it will be used to override _one_ of the dimensions inside each element of `imp[0].banner.format`
+7. If none of these exist then the Stored Request values for `imp[0].banner.format` will be used without modification.
+
+## Configuration Options
+
+- settings.generate-storedrequest-bidrequest-id: replace the stored request `id` with a UUID (PBS-Java only)
+- amp.default-timeout-ms: default operation timeout for AMP requests
+- amp.timeout-adjustment-ms: reduces timeout value passed in AMP request. Can be used to account for estimated latency so that Prebid Server can respond to the AMP RTC request before it times out.
+- amp.max-timeout-ms: maximum operation timeout for AMP requests
 
 ## Further Reading
 - [Prebid and AMP](/formats/amp.html)
 - [Prebid Server AMP Use Case Overview](/prebid-server/use-cases/pbs-amp.html)
 - [Prebid Server First Party Data](/prebid-server/features/pbs-fpd.html)
+- [Stored Requests](/prebid-server/features/pbs-storedreqs.html)
diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md
index 079e38ee65..007d721f2b 100644
--- a/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md
+++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.md
@@ -211,10 +211,10 @@ It's also possible to define different bid adjustment factors by mediatype, whic
     "prebid": {
       "bidadjustmentfactors": {
         "bidderA": 0.9,
-        "bidderB": 0.8
+        "bidderB": 0.8,
         "mediatypes": {
           "banner": {
-            "bidderA": 0.8,
+            "bidderA": 0.8
           },
           "video-outstream": {
             "bidderC": 0.9
@@ -222,7 +222,7 @@ It's also possible to define different bid adjustment factors by mediatype, whic
           "video": {
             "bidderB": 0.85
           }
-       }
+        }
       }
     }
   }
@@ -268,7 +268,8 @@ to set these params on the response at `response.seatbid[i].bid[j].ext.prebid.ta
           "precision": 2,
           "ranges": [{
             "max": 20.00,
-            "increment": 0.10 // This is equivalent to the deprecated "pricegranularity": "medium"
+            "increment": 0.10 // This is equivalent to the deprecated
+                              // "pricegranularity": "medium"
           }]
         },
         "includewinners": true,     // Optional param defaulting to false
@@ -423,9 +424,9 @@ This prevents breaking API changes as new Bidders are added to the project.
 For example, if the Request defines an alias like this:
 
 ```
-  "aliases": {
-    "appnexus": "rubicon"
-  }
+"aliases": {
+  "appnexus": "rubicon"
+}
 ```
 
 then any `imp.ext.appnexus` params will actually go to the **rubicon** adapter.
@@ -438,13 +439,16 @@ For environments that have turned on [GDPR enforcement](/prebid-server/features/
 To do this, just set `ext.prebid.aliasgvlids` alongside ext.prebid.aliases:
 
 ```
-"ext":
+"ext": {
   "prebid": {
-      "aliases": { "newAlias": "originalBidderCode" },
-      "aliasgvlids": { "newAlias": 11111 }
+    "aliases": {
+      "newAlias": "originalBidderCode"
+    },
+    "aliasgvlids": {
+      "newAlias": 11111
     }
   }
-});
+}
 ```
 
 ##### Stored Requests
@@ -526,12 +530,10 @@ Example:
 {
   "imp": [{
     ...
-    "banner": {
-      ...
-    }
+    "banner": { ... },
     "instl": 1,
     ...
-  }]
+  }],
   "device": {
     ...
     "h": 640,
@@ -556,20 +558,20 @@ PBS with interstitial support will come preconfigured with a list of common ad s
 To set the desired 'ad server currency', use the standard OpenRTB `cur` attribute. Note that Prebid Server only looks at the first currency in the array.
 
 ```
-    "cur": ["USD"]
+"cur": ["USD"]
 ```
 
 If you want or need to define currency conversion rates (e.g. for currencies that your Prebid Server doesn't support),
-define ext.prebid.currency.rates. (Currently supported in PBS-Java only)
+define ext.prebid.currency.rates.
 
 ```
 "ext": {
   "prebid": {
-	  "currency": {
-		  "rates": {
-			  "USD": { "UAH": 24.47, "ETB": 32.04 }
-		  }
-	  }
+    "currency": {
+      "rates": {
+        "USD": { "UAH": 24.47, "ETB": 32.04 }
+      }
+    }
   }
 }
 ```
@@ -585,9 +587,9 @@ Basic supply chains are passed to Prebid Server on `source.ext.schain` and passe
 Bidder-specific schains:
 
 ```
-ext.prebid.schains: [
-   { bidders: ["bidderA"], schain: { SCHAIN OBJECT 1}},
-   { bidders: ["*"], schain: { SCHAIN OBJECT 2}}
+"ext.prebid.schains": [
+   { "bidders": ["bidderA"], "schain": { SCHAIN OBJECT 1}},
+   { "bidders": ["*"], "schain": { SCHAIN OBJECT 2}}
 ]
 ```
 In this scenario, Prebid Server sends the first schain object to `bidderA` and the second schain object to everyone else.
@@ -600,24 +602,23 @@ Prebid Server adapters can support the [Prebid.js User ID modules](/dev-docs/mod
 
 ```
 {
-    "user": {
-        "ext": {
-            "eids": [{
-                "source": "adserver.org",
-                "uids": [{
-                    "id": "111111111111",
-                    "ext": {
-                        "rtiPartner": "TDID"
-                    }
-                }]
-            },
-            {
-                "source": "pubcid.org",
-                "id":"11111111"
-            }
-            ]
-        }
+  "user": {
+    "ext": {
+      "eids": [{
+        "source": "adserver.org",
+        "uids": [{
+          "id": "111111111111",
+          "ext": {
+            "rtiPartner": "TDID"
+          }
+        }]
+      },
+      {
+        "source": "pubcid.org",
+        "id":"11111111"
+      }]
     }
+  }
 }
 ```
 
@@ -627,17 +628,17 @@ Publishers can constrain which bidders receive which user.ext.eids entries. See
 
 ```
 {
-    ext: {
-        prebid: {
-            data: {
-                eidpermissions: [   // prebid server will use this to filter user.ext.eids
-                   {"source": "sharedid.org", "bidders": ["*"]},  // * is the default
-                   {"source": "neustar.biz", "bidders": ["bidderB"]},
-                   {"source": "id5-sync.com", "bidders": ["bidderA","bidderC"]}
-                ]
-            }
-        }
+  "ext": {
+    "prebid": {
+      "data": {
+        "eidpermissions": [   // prebid server will use this to filter user.ext.eids
+          {"source": "sharedid.org", "bidders": ["*"]},  // * is the default
+          {"source": "neustar.biz",  "bidders": ["bidderB"]},
+          {"source": "id5-sync.com", "bidders": ["bidderA","bidderC"]}
+        ]
+      }
     }
+  }
 }
 ```
 
@@ -678,24 +679,34 @@ When a storedauctionresponse ID is specified:
 This request:
 ```
 {
-  "test":1,
-  "tmax":500,
+  "test": 1,
+  "tmax": 500,
   "id": "test-auction-id",
   "app": { ... },
   "ext": {
-      "prebid": {
-             "targeting": {},
-             "cache": { "bids": {} }
-       }
+    "prebid": {
+      "targeting": {},
+      "cache": {
+        "bids": {}
+      }
+    }
   },
   "imp": [
     {
       "id": "a",
-      "ext": { "prebid": { "storedauctionresponse": { "id": "1111111111" } } }
+      "ext": {
+        "prebid": {
+          "storedauctionresponse": { "id": "1111111111" }
+        }
+      }
     },
     {
       "id": "b",
-      "ext": { "prebid": { "storedauctionresponse": { "id": "22222222222" } } }
+      "ext": {
+        "prebid": {
+          "storedauctionresponse": { "id": "22222222222" }
+        }
+      }
     }
   ]
 }
@@ -704,16 +715,16 @@ This request:
 Will result in this response, assuming that the ids exist in the appropriate DB table read by Prebid Server:
 ```
 {
-    "id": "test-auction-id",
-    "seatbid": [
-        {
-             // BidderA bids from storedauctionresponse=1111111111
-             // BidderA bids from storedauctionresponse=22222222
-        },
-       {
-             // BidderB bids from storedauctionresponse=1111111111
-             // BidderB bids from storedauctionresponse=22222222
-       }
+  "id": "test-auction-id",
+  "seatbid": [
+    {
+      // BidderA bids from storedauctionresponse=1111111111
+      // BidderA bids from storedauctionresponse=22222222
+    },
+    {
+      // BidderB bids from storedauctionresponse=1111111111
+      // BidderB bids from storedauctionresponse=22222222
+    }
   ]
 }
 ```
@@ -724,37 +735,37 @@ In contrast to what's outlined above, this approach lets some real auctions take
 
 ```
 {
-  "test":1,
-  "tmax":500,
+  "test": 1,
+  "tmax": 500,
   "id": "test-auction-id",
   "app": { ... },
   "ext": {
-      "prebid": {
-             "targeting": {},
-             "cache": { "bids": {} }
-       }
+    "prebid": {
+      "targeting": {},
+        "cache": { "bids": {} }
+    }
   },
   "imp": [
     {
       "id": "a",
       "ext": {
-          "prebid": {
-            "storedbidresponse": [
-                  { "bidder": "BidderA", "id": "333333" },
-                  { "bidder": "BidderB", "id": "444444" },
-             ]
-           }
+        "prebid": {
+          "storedbidresponse": [
+            { "bidder": "BidderA", "id": "333333" },
+            { "bidder": "BidderB", "id": "444444" },
+          ]
+        }
       }
     },
     {
       "id": "b",
       "ext": {
-          "prebid": {
-            "storedbidresponse": [
-                  { "bidder": "BidderA", "id": "5555555" },
-                  { "bidder": "BidderB", "id": "6666666" },
-             ]
-           }
+        "prebid": {
+          "storedbidresponse": [
+            { "bidder": "BidderA", "id": "5555555" },
+            { "bidder": "BidderB", "id": "6666666" },
+          ]
+        }
       }
     }
   ]
@@ -764,18 +775,18 @@ Could result in this response:
 
 ```
 {
-    "id": "test-auction-id",
-    "seatbid": [
-        {
-             "bid": [
-             // contents of storedbidresponse=3333333 as parsed by bidderA adapter
-             // contents of storedbidresponse=5555555 as parsed by bidderA adapter
-             ]
-        },
-       {
-             // contents of storedbidresponse=4444444 as parsed by bidderB adapter
-             // contents of storedbidresponse=6666666 as parsed by bidderB adapter
-       }
+  "id": "test-auction-id",
+  "seatbid": [
+    {
+      "bid": [
+      // contents of storedbidresponse=3333333 as parsed by bidderA adapter
+      // contents of storedbidresponse=5555555 as parsed by bidderA adapter
+      ]
+    },
+    {
+      // contents of storedbidresponse=4444444 as parsed by bidderB adapter
+      // contents of storedbidresponse=6666666 as parsed by bidderB adapter
+    }
   ]
 }
 ```
@@ -793,49 +804,52 @@ It specifies where in the OpenRTB request non-standard attributes should be pass
 
 ```
 {
+  "ext": {
+    "prebid": {
+      "data": { "bidders": [ "rubicon", "appnexus" ] }  // these are the bidders allowed to see protected data
+    }
+  },
+  "site": {
+    "keywords": "",
+    "search": "",
     "ext": {
-       "prebid": {
-           "data": { "bidders": [ "rubicon", "appnexus" ] }  // these are the bidders allowed to see protected data
-       }
-    },
-    "site": {
-         "keywords": "",
-         "search": "",
-         "ext": {
-             data: { GLOBAL SITE DATA } // only seen by bidders named in ext.prebid.data.bidders[]
-         }
-    },
-    "user": {
-        "keywords": "",
-        "gender": "",
-        "yob": 1999,
-        "geo": {},
-        "ext": {
-            data: { GLOBAL USER DATA }  // only seen by bidders named in ext.prebid.data.bidders[]
+      "data": { GLOBAL SITE DATA } // only seen by bidders named in ext.prebid.data.bidders[]
+    }
+  },
+  "user": {
+    "keywords": "",
+    "gender": "",
+    "yob": 1999,
+    "geo": {},
+    "ext": {
+      "data": { GLOBAL USER DATA }  // only seen by bidders named in ext.prebid.data.bidders[]
+    }
+  },
+  "imp": [
+    {
+      ...
+      "ext": {
+        "data": {
+          ADUNIT SPECFIC CONTEXT DATA  // can be seen by all bidders
         }
-    },
-    "imp": [
-        ...
-        "ext": {
-            "data": {
-                ADUNIT SPECFIC CONTEXT DATA  // can be seen by all bidders
-            }
-         }
-    ]
+      }
+    }
+  ]
+}
 ```
 
 Bidder-specific data can be defined with ext.prebid.bidderconfig:
 ```
-ext: {
-  prebid: {
-    bidderconfig:
-      bidders: ["bidderA", "bidderB"],
-      config: [
-	ortb2: {
-	  site: { ... },
-          user: { ... }
-	}
-      ]
+"ext": {
+  "prebid": {
+    "bidderconfig": {
+      "bidders": ["bidderA", "bidderB"]
+    },
+    "config": {
+      "ortb2": {
+        "site": { ... },
+        "user": { ... }
+      }
     }
   }
 }
@@ -858,20 +872,21 @@ An OpenRTB extension, whether in the the original request or the [stored-request
 The OpenRTB field is `ext.prebid.adservertargeting`. Here's an example:
 
 ```
-   ext.prebid.adservertargeting:  [{
-              "key": "hb_amp_ow",           // the targeting key
-              "source": "bidrequest",       // pull the value from the path specified in the bid request object
-              "value": "ext.prebid.amp.data.ow"  // path to value in the bidrequest
-            },{
-               "key": "hb_static_thing",
-               "source": "static",          // just use the 'value' provided
-               "value": "my-static-value"
-            },{
-               "key": "{{BIDDER}}_custom1", // {{BIDDER}} is a macro to be resolved
-               "source": "bidresponse",     // pull the value from the path specified in the bid response object
-               "value": "seatbid.bid.ext.custom1"
-            }
-   }]
+"ext.prebid.adservertargeting":  [
+  {
+    "key": "hb_amp_ow",           // the targeting key
+    "source": "bidrequest",       // pull the value from the path specified in the bid request object
+    "value": "ext.prebid.amp.data.ow"  // path to value in the bidrequest
+  },{
+    "key": "hb_static_thing",
+    "source": "static",          // just use the 'value' provided
+    "value": "my-static-value"
+  },{
+    "key": "{% raw %}{{BIDDER}}{% endraw %}_custom1", // {% raw %}{{BIDDER}}{% endraw %} is a macro to be resolved
+    "source": "bidresponse",     // pull the value from the path specified in the bid response object
+    "value": "seatbid.bid.ext.custom1"
+  }
+]
 ```
 `ext.prebid.adservertargeting` is an array objects. Each object has the following format:
 
@@ -884,30 +899,30 @@ The OpenRTB field is `ext.prebid.adservertargeting`. Here's an example:
 
 In order to pull AMP parameters out into targeting, Prebid Server places AMP query string parameters in ext.prebid.amp.data. e.g.
 ```
-    "ext": {
-	"prebid": {
-	    "amp": {
-		"data": {
-		    "adc": "GA1.2.662776284.1602172186",
-		    "curl": "https://example.com/index.html",
-		    "debug": "1",
-		    "pvid": "",  // page view ID
-		    "ms": "",    // multi-size
-		    "ow": "",    // override-width
-		    "oh": "",    // override-height
-		    "w": "300",
-		    "h": "50",
-		    "gdpr_consent": "",
-		    "purl": "https://example.com/index.html",
-		    "slot": "/11111/amp_test",
-		    "timeout": "1000",
-		    "targeting": "{\"site\":{\"attr\":\"val\"}}",
-		    "tag_id": "amp-AMP_Test-300x250",
-		    "account": "22222"
-		}
-	    }
-	}
+"ext": {
+  "prebid": {
+    "amp": {
+      "data": {
+        "adc": "GA1.2.662776284.1602172186",
+        "curl": "https://example.com/index.html",
+        "debug": "1",
+        "pvid": "",  // page view ID
+        "ms": "",    // multi-size
+        "ow": "",    // override-width
+        "oh": "",    // override-height
+        "w": "300",
+        "h": "50",
+        "gdpr_consent": "",
+        "purl": "https://example.com/index.html",
+        "slot": "/11111/amp_test",
+        "timeout": "1000",
+        "targeting": "{\"site\":{\"attr\":\"val\"}}",
+        "tag_id": "amp-AMP_Test-300x250",
+        "account": "22222"
+      }
     }
+  }
+}
 ```
 
 ##### EID Permissions (PBS-Go only)
@@ -917,17 +932,17 @@ in user.ext.eids is allowed to be passed to which bid adapter. For example:
 
 ```
 {
-    ext: {
-        prebid: {
-            data: {
-                eidpermissions: [   // prebid server will use this to filter user.ext.eids
-                   {"source": "sharedid.org", "bidders": ["*"]},  // * is the default
-                   {"source": "neustar.biz", "bidders": ["bidderB"]},
-                   {"source": "id5-sync.com", "bidders": ["bidderA","bidderC"]}
-                ]
-            }
-        }
+  "ext": {
+    "prebid": {
+      "data": {
+        "eidpermissions": [   // prebid server will use this to filter user.ext.eids
+          {"source": "sharedid.org", "bidders": ["*"]},  // * is the default
+          {"source": "neustar.biz",  "bidders": ["bidderB"]},
+          {"source": "id5-sync.com", "bidders": ["bidderA","bidderC"]}
+        ]
+      }
     }
+  }
 }
 ```
 
@@ -942,19 +957,19 @@ The Prebid extension to the OpenRTB protocol is `ext.prebid.multibid`. For examp
 
 ```
 {
-  ext: {
-    prebid: {
-      multibid: [{
-        bidder: "bidderA",
-        maxbids: 2,
-        targetbiddercodeprefix: "bidA"
-      },{
-        bidder: "bidderB",
-        maxbids: 3,
-        targetbiddercodeprefix: "bidB"
-      },{
-        bidders: ["bidderC", "bidderD"]
-        maxbids: 2
+  "ext": {
+    "prebid": {
+      "multibid": [{
+        "bidder": "bidderA",
+        "maxbids": 2,
+        "targetbiddercodeprefix": "bidA"
+      }, {
+        "bidder": "bidderB",
+        "maxbids": 3,
+        "targetbiddercodeprefix": "bidB"
+      }, {
+        "bidders": ["bidderC", "bidderD"],
+        "maxbids": 2
       }]
     }
   }
@@ -980,36 +995,36 @@ Prebid Server core does the following when it sees `ext.prebid.multibid`:
 Here's an example response:
 ```
 {
-seatbid: [{
-  seat: "bidderA",
-  bid: [{
-    id: "bid1",
-    impid: "imp1",
-    price: 1.04,
-    ext: {
-        prebid: {
-            targeting: {
-                hb_pb_bidderA: 1.00
-            },
-            targetbiddercode: "bidderA"
+  "seatbid": [{
+    "seat": "bidderA",
+    "bid": [{
+      "id": "bid1",
+      "impid": "imp1",
+      "price": 1.04,
+      "ext": {
+        "prebid": {
+          "targeting": {
+            "hb_pb_bidderA": 1.00
+          },
+          "targetbiddercode": "bidderA"
         }
-    }
-    ...
-  },{
-    id: "bid2",
-    impid: "imp1",   // same imp as above
-    price:0.8,
-    ext: {
-        prebid: {
-            targeting: {
-                hb_pb_bidA2: 0.50
-            },
-            targetbiddercode: "bidA2"
+      }
+      ...
+    }, {
+      "id": "bid2",
+      "impid": "imp1", // same imp as above
+      "price": 0.8,
+      "ext": {
+        "prebid": {
+          "targeting": {
+            "hb_pb_bidA2": 0.50
+          },
+          "targetbiddercode": "bidA2"
         }
-    }
-    ...
+      }
+      ...
+    }]
   }]
-}]
 }
 ```
 
@@ -1022,24 +1037,25 @@ which causes PBS-core to place the video-related attributes on the response.
 
 ```
 {
-   ... 
-    
-    "imp": [
-        {
-            "id": "123456789",
-            "video": { ... }, 
-            "ext": {
-                "prebid": {
-                    "storedrequest": { "id": "xxx" },
-                    "options": {
-                        "echovideoattrs": true
-                    } 
-                }
-            }, 
-	    ...
+  ...
+  "imp": [{
+    "id": "123456789",
+    "video": {
+      ...
+    },
+    "ext": {
+      "prebid": {
+        "storedrequest": {
+          "id": "xxx"
+        },
+        "options": {
+          "echovideoattrs": true
         }
-    ]
+      }
+    },
     ...
+  }]
+  ...
 }
 ```
 1. Prebid Server receives this request and expands the `storedrequest` value, merging it with the imp object.
@@ -1047,31 +1063,26 @@ which causes PBS-core to place the video-related attributes on the response.
 
 ```
 {
-    "seatbid": [{
-            "bid": [{
-                   ...
-                    "ext": {
-                        "prebid": {
-                            "storedrequestattributes":{
-                                "maxduration": 60, 
-                                "mimes": [
-                                    "video/mp4"
-                                ], 
-                                "minduration": 15, 
-                                "protocols": [
-                                    1, 
-                                    2
-                                ], 
-                                "skipafter": 0, 
-                                "skipmin": 0, 
-                                "startdelay": 0,
-                                "playbackmethod": [1]
-                            }
-                        }
-                    }
-                }]
-        }],
-...
+  "seatbid": [{
+    "bid": [{
+      ...
+      "ext": {
+        "prebid": {
+          "storedrequestattributes": {
+            "maxduration": 60,
+            "mimes": ["video/mp4"],
+            "minduration": 15,
+            "protocols": [1, 2],
+            "skipafter": 0,
+            "skipmin": 0,
+            "startdelay": 0,
+            "playbackmethod": [1]
+          }
+        }
+      }
+    }]
+  }],
+  ...
 }
 ```
 
@@ -1133,31 +1144,31 @@ Prebid Server will generate ad server targeting variables as defined by request
 
 ```
 {
-seatbid: [{
-  seat: "bidderA",
-  bid: [{
-    id: "bid1",
-    impid: "imp1",
-    price: 1.04,
-    ext: {
-        prebid: {
-            targeting: {
-		hb_pb: 1.00, // values without prefixes on the winning bids only
-                hb_pb_bidderA: 1.00, // only if includebidderkeys is true
-		hb_bidder: "bidderA",
-		hb_size: "300x250",
-		hb_size_bidderA: "300x250",
-		hb_format: "video" // only if includeformat is specified
-		hb_deal: "123" // only if bid response contains a deal
-            }
+  "seatbid": [{
+    "seat": "bidderA",
+    "bid": [{
+      "id": "bid1",
+      "impid": "imp1",
+      "price": 1.04,
+      "ext": {
+        "prebid": {
+          "targeting": {
+            "hb_pb": 1.00, // values without prefixes on the winning bids only
+            "hb_pb_bidderA": 1.00, // only if includebidderkeys is true
+            "hb_bidder": "bidderA",
+            "hb_size": "300x250",
+            "hb_size_bidderA": "300x250",
+            "hb_format": "video", // only if includeformat is specified
+            "hb_deal": "123"      // only if bid response contains a deal
+          }
         }
-    }
-    ...
+      }
+      ...
+    }]
   }]
-}]
+}
 ```
 
-
 ##### Debug Output
 
 `response.ext.debug.httpcalls.{bidder}` will be populated only if `test:1` or `ext.prebid.debug:true`.
@@ -1170,20 +1181,16 @@ It is only returned on `test` bids for performance reasons, but may be useful du
 This contains the request after the resolution of stored requests and implicit information (e.g. site domain, device user agent).
 
 ```
-  "ext": {
-    "debug": {
-      "httpcalls": {
-        "bidderA": [
-          ...
-        ]
-      },
-      "resolvedrequest": {
-        ...
-      },
-      "responsetimemillis": {
-        ...
-      }
-      ...
+"ext": {
+  "debug": {
+    "httpcalls": {
+      "bidderA": [ ... ]
+    },
+    "resolvedrequest": { ... },
+    "responsetimemillis": { ... }
+    ...
+  }
+}
 ```
 
 ##### Original Bid CPM (PBS-Java only)
@@ -1244,9 +1251,9 @@ The PBJS version comes from ext.prebid.channel: `{name: "pbjs", version: "4.39"}
 
 The Prebid SDK version comes from:
 ```
-app.ext.prebid: {
-   source:  "prebid-mobile"
-   version: "1.2.3"
+"app.ext.prebid": {
+   "source":  "prebid-mobile"
+   "version": "1.2.3"
 }
 ```
 
@@ -1281,6 +1288,7 @@ app.ext.prebid: {
 | req | ext.prebid.auctiontimestamp | timestamp for use in correlating PBJS and PBS events | long int | 123456789 | yes |
 | req | ext.prebid.options. echovideoattrs | causes PBS-core to [echo video attributes](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#echo-storedrequest-video-attributes-pbs-java-only) on seatbid[].bid[].ext.prebid.storedrequestattributes so the player has access to them | boolean | true | yes |
 | req | ext.prebid.multibid | allows bidders to respond with more than one bid | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#multibid-pbs-java-only) | yes, but only their value |
+| req | ext.prebid.buyeruid | An alternate to [/cookie_sync](/prebid-server/endpoints/pbs-endpoint-cookieSync.html), the request can supply bidder ID values | object | See [doc](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#buyer-uid) | no |
 | resp | seatbid[].bid[].ext. prebid.targeting | ad server targeting values. Related to req ext.prebid.targeting. | object | see [docs](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#ad-server-targeting) | n/a |
 | resp | seatbid[].bid[].ext.prebid. type | "banner", "video", "native" | string | "banner" | n/a |
 | resp | seatbid[].bid[].ext.prebid. cache.bids.url | URL location of the bid or VAST | string | URL | n/a |
diff --git a/prebid-server/endpoints/pbs-endpoint-admin.md b/prebid-server/endpoints/pbs-endpoint-admin.md
index 15f77672ab..bca308651e 100644
--- a/prebid-server/endpoints/pbs-endpoint-admin.md
+++ b/prebid-server/endpoints/pbs-endpoint-admin.md
@@ -138,6 +138,7 @@ Query Params
 - statusCode - specifies that only interactions resulting in this response status code should be logged; valid values: >=200 and <=500
 - account - specifies that only interactions involving this account should be logged
 - limit - number of interactions to log; there is an upper threshold for this value set in configuration
+- bidder - name of the bidder whose adapter request will be logged
 
 ## /logging/changelevel
 
diff --git a/prebid-server/endpoints/pbs-endpoint-event.md b/prebid-server/endpoints/pbs-endpoint-event.md
index 0c354142a3..28a4f38b05 100644
--- a/prebid-server/endpoints/pbs-endpoint-event.md
+++ b/prebid-server/endpoints/pbs-endpoint-event.md
@@ -7,7 +7,7 @@ title: Prebid Server | Endpoints | Events
 
 # Prebid Server | Endpoints | Events (Java-only)
 
-PBS-Java supports events as described in these GitHub issues:
+Prebid Server supports events as described in these GitHub issues:
 
 - [Prebid Server Event Notification proposal](https://github.com/prebid/prebid-server/issues/800)
 - [Prebid Server Event Updates](https://github.com/prebid/prebid-server/issues/1202)
diff --git a/prebid-server/endpoints/pbs-endpoint-overview.md b/prebid-server/endpoints/pbs-endpoint-overview.md
index 502dcfe7b1..e6f0e6c739 100644
--- a/prebid-server/endpoints/pbs-endpoint-overview.md
+++ b/prebid-server/endpoints/pbs-endpoint-overview.md
@@ -22,8 +22,8 @@ The API endpoints recognized by Prebid Server:
 | [GET /getuids](/prebid-server/endpoints/pbs-endpoint-getuids.html) | Parses the `uids` cookie and returns JSON. |
 | [GET /status](/prebid-server/endpoints/pbs-endpoint-status.html) | A health check. |
 | [GET /info](/prebid-server/endpoints/info/pbs-endpoint-info.html) | Returns various information about how the server is configured. |
-| [GET /event](/prebid-server/endpoints/pbs-endpoint-event.html) | (PBS-Java only) Alerts Prebid Server to process an event. |
-| [POST /vtrack](/prebid-server/endpoints/pbs-endpoint-event.html) | (PBS-Java only) Cache VAST XML after inserting tracking string. |
+| [GET /event](/prebid-server/endpoints/pbs-endpoint-event.html) | Alerts Prebid Server to process an event. |
+| [POST /vtrack](/prebid-server/endpoints/pbs-endpoint-event.html) | Cache VAST XML after inserting tracking string. |
 | [/currency/rates](/prebid-server/endpoints/pbs-endpoint-admin.html) | (Admin port only) Retrieves the server's current currency conversion rates. |
 
 ## Prebid Cache
diff --git a/prebid-server/endpoints/pbs-endpoint-setuid.md b/prebid-server/endpoints/pbs-endpoint-setuid.md
index ea379418ac..eb47472dd5 100644
--- a/prebid-server/endpoints/pbs-endpoint-setuid.md
+++ b/prebid-server/endpoints/pbs-endpoint-setuid.md
@@ -16,7 +16,7 @@ This endpoint saves a UserID for a Bidder in the Cookie. Saved IDs will be recog
 
 ### Query Params
 
-- `bidder`: The FamilyName of the Usersyncer (`../../usersync/usersync.go`) which is being synced.
+- `bidder`: The key of the bidder which is being synced. This may not always match the bidder name,.
 - `uid`: The ID which the Bidder uses to recognize this user. If undefined, the UID for `bidder` will be deleted.
 - `gdpr`: This should be `1` if GDPR is in effect, `0` if not, and undefined if the caller isn't sure
 - `gdpr_consent`: This is required if `gdpr` is one, and optional (but encouraged) otherwise. If present, it should be an [unpadded base64-URL](https://tools.ietf.org/html/rfc4648#page-7) encoded [Vendor Consent String](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/Consent%20string%20and%20vendor%20list%20formats%20v1.1%20Final.md).
@@ -38,16 +38,8 @@ If in doubt, contact the company hosting Prebid Server and ask if they're GDPR-r
 
 ### Return Values
 
-PBS-Go: 
-
-- HTTP 200
-    - Success: blank body with Set-Cookies header
-    - Failure: error message in body
-
-PBS-Java:
-
 - HTTP 400 - The request is in GDPR scope and the consent string is missing or invalid.
-- HTTP 451 - PBS does not have permission to set a cookie due to GDPR or other privacy rule.
+- HTTP 451 - PBS does not have permission to set a cookie due to GDPR or another privacy rule.
 - HTTP 200
     - Success with image response: if the f=i parameter is specified or if the named bidder prefers redirect cookie_syncs, then PBS responds with a blank 1x1 PNG, set the Content-Length to the appropriate number of bytes, and set Content-Type to image/png
     - Success with empty response: if the f=b parameter is specified or if the named bidder prefers iframe cookie_syncs, then PBS responds with empty HTML, Content-Length 0 and Content-Type to text/html
diff --git a/prebid-server/features/pbs-currency.md b/prebid-server/features/pbs-currency.md
index 8b6201fb5f..347abf63e6 100644
--- a/prebid-server/features/pbs-currency.md
+++ b/prebid-server/features/pbs-currency.md
@@ -80,17 +80,17 @@ Here are a couple examples showing the logic behind the currency converter:
 
 ## Request-Defined Conversion Rates
 
-Using PBS-Java, rates can be passed in on the request:
+Rates can be passed in on the request:
 
 ```
 "ext": {
-    "prebid": {
-	  "currency": {
-		  "rates": {
-			  "USD": { "UAH": 24.47, "ETB": 32.04, "EUR": 0.92, ... }
-		  },
-                  "usepbsrates": false // defaults to true
-	  }
+  "prebid": {
+    "currency": {
+      "rates": {
+        "USD": { "UAH": 24.47, "ETB": 32.04, "EUR": 0.92, ... }
+      },
+      "usepbsrates": false // defaults to true
+    }
   }
 }
 ```
@@ -104,3 +104,9 @@ Note that the `usepbsrates` flag allows you to define which rates to use when PB
 
 A dedicated endpoint on the Admin port will allow you to see what's happening within the currency converter.
 See [currency rates endpoint](/prebid-server/endpoints/pbs-endpoint-admin.html) for more details.
+
+## Price Granularity
+
+When converting to a currency where the typical nominal CPMs are much different than USD such as JPY or INR, use a custom price granularity that reflects the typical range of CPMs in that currency.  
+
+The predefined price granularities such as `medium` or `dense` will not be correctly scaled and thus almost every bid will end in the top bucket.  Unlike Prebid.js, Prebid Server does not support `granularityMultiplier` to scale granularities so a custom price granularity needs to be used.
\ No newline at end of file
diff --git a/prebid-server/features/pbs-default-request.md b/prebid-server/features/pbs-default-request.md
index 3badc95482..d11b01a092 100644
--- a/prebid-server/features/pbs-default-request.md
+++ b/prebid-server/features/pbs-default-request.md
@@ -21,7 +21,7 @@ default_request:
     alias_info: false
 ```
 
-The `file.name` option is the path/filename of a JSON file containing default request JSON. See the [stored request doc](/prebid-server/features/pbs-storedreqs.html) and the [openrtb2/auction endpoint doc](/prebid-server/endpoints/openrtb2/auction.html) for details about the syntax.
+The `file.name` option is the path/filename of a JSON file containing default request JSON. See the [stored request doc](/prebid-server/features/pbs-storedreqs.html) and the [openrtb2/auction endpoint doc](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html) for details about the syntax.
 
 PBS-Java has a slightly different configuration in application.yaml:
 ```
diff --git a/prebid-server/features/pbs-feature-idx.md b/prebid-server/features/pbs-feature-idx.md
index a6c9655753..6a11cfb541 100644
--- a/prebid-server/features/pbs-feature-idx.md
+++ b/prebid-server/features/pbs-feature-idx.md
@@ -11,8 +11,8 @@ title: Prebid Server | Features
 | Feature Set | Feature | Description | PBS-Go | PBS-Java |
 |-------------+---------+-------------+--------+----------|
 | [Currency](/prebid-server/features/pbs-currency.html) | Core | Loads currency conversions from an outside source, allows non-supported currencies to come in on the OpenRTB2 request, converts bid currencies to the request's prefered currency. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
-| [Currency](/prebid-server/features/pbs-currency.html) | Request-Defined Rates | Allows the request to define its own currency rates. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
-| Currency | pbsConvertCurrency method | Allows adapters to convert bid floors to a different currency if needed. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| [Currency](/prebid-server/features/pbs-currency.html) | Request-Defined Rates | Allows the request to define its own currency rates. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Currency | Convert Currency Method | Allows adapters to convert bid floors to a different currency if needed. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [Deals](/prebid-server/features/pbs-deals.html) | Core | Basic deal support, creating hb_deal targeting when appropriate. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Deals | Deal prioritization | Supports the 'preferdeals' [targeting flag](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#targeting) to give deals the priority when PBS returns ad server targeting. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [AMP](/prebid-server/use-cases/pbs-amp.html) | Core | Reads and responds to the /openrtb2/amp endpoint | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
@@ -49,27 +49,27 @@ title: Prebid Server | Features
 | [Supply Chain](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#supply-chain-support) | Bidder-specific schains | Accepts bidder-specific schain | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Supply Chain | Host SChain | The host company can supply a global schain that's appended to the list of incoming nodes in source.ext.schain. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Publisher Accounts | Core | Ability to enforce that requests coming in have a valid account ID. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
-| Publisher Accounts | AMP account parameter | Accept the account parameter on the AMP request. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Publisher Accounts | AMP account parameter | Accept the account parameter on the AMP request. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Publisher Accounts | Account-specific TTLs | Allow each account ID to have a custom PBC time-to-live for banner and video. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [Video](/formats/video.html) | Core | Support for basic instream and outstream video: passes video parameters to adapters, stores VAST responses when instructed. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Video | Outstream renderers | Support for bidders specifying their own renderers for outstream video. | | |
 | Video | Long-form video | Support for the [long-form video endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-video.html). | <img src="/assets/images/icons/icon-check-green.png" width="30"> | |
 | Video | IAB advertiser category mapping | Able to map IAB advertiser categories to a supplied mapping table. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | |
-| Video | [Echo video attributes](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#echo-storedrequest-video-attributes-pbs-java-only) | To support mobile video, copies stored request video attributes to the response. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Video | [Echo video attributes](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#echo-storedrequest-video-attributes-pbs-java-only) | To support mobile video, copies stored request video attributes to the response. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [Interstitials](/prebid-server/features/pbs-interstitials.html) | Core | Support device.ext.prebid.interstitial.minwidthperc and device.ext.prebid.interstitial.minheightperc parameters, [dynamically updating the impression format object](https://github.com/prebid/prebid-server/issues/755) from a configurable list of sizes filtered by these parameters. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [Aliases](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#bidder-aliases) | Core | Maps a biddercode on an incoming request to a specific server-side bid adapter named in the request or defined in config. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Aliases | [GVL ID support](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#bidder-alias-gvl-ids-pbs-java-only) | Define the IAB GVL ID for an aliased biddercode. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [User ID Sync](/prebid-server/developers/pbs-cookie-sync.html) | Core | Implements the /cookie_sync and /setuid endpoints. Bidders may choose either redirect or iframe method. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
-| User ID Sync | Multi-Method | Bidders can supply both pixel redirects as well as iframe syncs. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
-| User ID Sync | Cooperative sync | Does a pixel sync with more than just the bidders on the page. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| User ID Sync | Multi-Method | Bidders can supply both pixel redirects as well as iframe syncs. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| User ID Sync | Cooperative sync | Does a pixel sync with more than just the bidders on the page. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | User ID Permissions | Extended ID Permissions | Allows publishers to determine which bidders are allowed to receive which extended ID. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | |
 | User ID Sync | Account override | Allows accounts to override the cooperative sync feature and bidder limits. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | User ID | [EID Permissions](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#eid-permissions) | The Publisher can define which bidders receive which extended user IDs. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
-| [Events](https://docs.google.com/document/d/1ry0X4C2EV-R0pMrm1IQk9BstxaT395UCl3KKqTGa5c8/edit#heading=h.7w5yevygp2gz) | Events | Ability to process the /event endpoint, place /event URLs in the OpenRTB response, and place /event URLs in VAST XML. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
-| Events | Events vasttrack endpoint | Ability to process the /vasttrack endpoint initated by Prebid.js, placing /event URLs in VAST XML. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
-| Events | Events BidID Generation | Some bidders don't generate unique enough BidIDs to join with auction events. This feature allows the host company to inject a PBS-generated BidID alongside the bidder-generated ID. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| [Events](https://docs.google.com/document/d/1ry0X4C2EV-R0pMrm1IQk9BstxaT395UCl3KKqTGa5c8/edit#heading=h.7w5yevygp2gz) | Events | Ability to process the /event endpoint, place /event URLs in the OpenRTB response, and place /event URLs in VAST XML. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Events | Events vasttrack endpoint | Ability to process the /vasttrack endpoint initated by Prebid.js, placing /event URLs in VAST XML. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Events | Events BidID Generation | Some bidders don't generate unique enough BidIDs to join with auction events. This feature allows the host company to inject a PBS-generated BidID alongside the bidder-generated ID. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Auction | [MultiBid](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#multibid-pbs-java-only) | Allow named bidders to supply more than one response. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
-| Analytics | Analytics module support | Allows developers to plug in a [custom analytics adapter](/developers/pbs-build-an-analytics-adapter.html). | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Analytics | Analytics module support | Allows developers to plug in a [custom analytics adapter](/prebid-server/developers/pbs-build-an-analytics-adapter.html). | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Bid Response Validation | Validate secure markup | PBS can configurably reject bid responses that don't supply a secure creative when in a secure context. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Bid Response Validation | Validate bid sizes | PBS can configurably reject bid responses with sizes that are bigger than the request dimensions. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | [Bidder Info Endpoints](/prebid-server/endpoints/info/pbs-endpoint-info.html) | Core | Provides details on which bidders and parameters exist in this Prebid Server. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
@@ -79,5 +79,7 @@ title: Prebid Server | Features
 | Operations | Circuit breaker | Protects system performance during fault scenarios by detecting problems with external and internal endpoints, turning them off temporarily when a problem occurs. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Operations | [Server default request](/prebid-server/features/pbs-default-request.html) | Support global defaults for incoming requests. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Operations | IPv6 | Support taking IPv6 addresses and forwarding them to bidders. | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| [Programmatic Guaranteed](/prebid-server/features/pg/pbs-pg-idx.html) | Integration and Targeting | Ability to load, target, and report PG line items | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Operations | [Request Logging Admin Endpoints](/troubleshooting/pbs-troubleshooting.html#request-logging) | Log a limited number of requests to understand the raw data clients are sending. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
 | Metadata | [x-prebid header](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#http-headers) | Put version information in outgoing HTTP headers. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Modules | [ortb2-blocking](/prebid-server/pbs-modules/ortb2-blocking.html) | Configure per-account OpenRTB blocking details. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
diff --git a/prebid-server/features/pbs-privacy.md b/prebid-server/features/pbs-privacy.md
index bceda67ffe..bc83cc5a6c 100644
--- a/prebid-server/features/pbs-privacy.md
+++ b/prebid-server/features/pbs-privacy.md
@@ -58,7 +58,7 @@ There are a number of GDPR configuration settings that PBS Host Companies must
 consider:
 
 - **GDPR enabled** - Allows the host company to turn off GDPR support. Default setting is enabled=true.
-- **Default GDPR applies** - How Prebid Server should respond if the incoming request doesn't have the `gdpr` flag. (Note: this config is currently called `usersync_if_ambiguous` in PBS-Go and gdpr.default-value in PBS-Java.)
+- **Default GDPR applies** - How Prebid Server should respond if the incoming request doesn't have the `gdpr` flag. (Note: this config is currently called `gdpr.default_value` in PBS-Go and `gdpr.default-value` in PBS-Java.)
 - **Host company GVL ID** - Currently PBS requires the host company to have a GVL-ID or the setting of the `uids` cookie in GDPR scope will fail.
 - **GDPR enforcement flags** - for each Purpose
 - **Host Cookie TTL** - The default expiration time of the `uids` cookie set in the host company domain should be defined to match what's in the TCF 2.1 `maxCookieAgeSeconds` GVL field. (This is the host-cookie.ttl-days setting in both Go and Java.)
diff --git a/prebid-server/features/pbs-storedreqs.md b/prebid-server/features/pbs-storedreqs.md
index 966eace171..822b9b5237 100644
--- a/prebid-server/features/pbs-storedreqs.md
+++ b/prebid-server/features/pbs-storedreqs.md
@@ -8,27 +8,35 @@ title: Prebid Server | Features | Stored Requests
 # Prebid Server | Features | Stored Requests
 
 'Stored Requests' are blocks of OpenRTB stored on the server-side that are merged into 
-OpenRTB requests in a couple of scenarios.
+OpenRTB requests for Mobile App and AMP scenarios.
 
 The data source can be local files on Prebid Server, but more commonly it would be a relational
 database distributed across all the Prebid Servers in the host company's installation.
 
 ## Mobile App
 
-Hardcoding bidders and parameters in a mobile app isn't ideal. Prebid Server allows Stored Request IDs to be
-used in two ways:
+We want to avoid hardcoding parameters into a mobile app like bidders and parameters. Because of this, Prebid Server allows host companies to store two types of JSON that are retrieved with a key called a 'Stored Request ID':
 
-1. Define cross-adunit parameters like currency and price granularity
-1. Define adunit-specific details: bidders and their parameters
+- "top-level" requests, also called "wrapper-level" requests. This block is merged into the root level of the incoming ORTB request. It's not expected to have an imp object.
+- "impression-level" requests are merged into a particular ORTB imp element.
+
+![App stored request model](/assets/images/prebid-server/stored-requests-app.png){: .pb-lg-img :}
+
+1. The SDK creates a 'skeleton' framework of the OpenRTB JSON that doesn't
+contain the bidders or any other parameter that might be changed by AdOps.
+2. Prebid Server merges all the stored requests into this template.
+3. Creating the final OpenRTB JSON just like Prebid.js would have sent using the PBS Bid Adapter.
 
 See the [Mobile SDK Use Case reference](/prebid-server/use-cases/pbs-sdk.html) for specific examples.
 
 ## AMP
 
 The AMP protocol is converted to OpenRTB primarily using Stored Requests: the `tag_id` is used to look up
-the base OpenRTB from the data source. After getting the bulk of the OpenRTB, AMP query string parameters
+a single base OpenRTB from the data source. After getting the bulk of the OpenRTB, AMP query string parameters
 are used to inject and adjust parameters like size, url, etc. See the [AMP endpoint documentation](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) for more details.
 
+![AMP stored request model](/assets/images/prebid-server/stored-requests-amp.png){: .pb-lg-img :}
+
 See the [AMP Use Case reference](/prebid-server/use-cases/pbs-amp.html) for specific examples.
 
 ## Creating Stored Requests
diff --git a/prebid-server/features/pg/pbs-pg-bidder.md b/prebid-server/features/pg/pbs-pg-bidder.md
new file mode 100644
index 0000000000..4d456606a6
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-bidder.md
@@ -0,0 +1,141 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Building a PG Bidder
+---
+
+# Building a Programmatic Guaranteed Bidder
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## What is a PG Bidder?
+
+The architecture of Prebid Programmatic Guaranteed (PG) is inherently multi-vendor. A PG `Host Company` runs a global distributed cluster of Prebid Servers. These servers handle the 'real-time' requests... those that need to have millisecond response times. They also run a couple of backend servers that help manage the PG line items. One of them 
+is called the `General Planner`. The General Planner can connect out to multiple sources of PG Line Items, and that's where you come in -- as a PG Bidder, you can contribute PG Line Items into the auction ecosystem for the publishers who utilize the Host Company's installation.
+Here's a diagram from the [white paper](https://files.prebid.org/pg/Prebid_Programmatic_Guaranteed_White_Paper.pdf).
+
+![PG High Level Framework](/assets/images/prebid-server/pg/pg-arch-2.png){: .pb-lg-img :}
+
+1. The PG Host Company runs clusters of Prebid Servers that receive requests from publishers.
+2. Prebid Servers look up additional data for use in targeting.
+3. The General Planner queries your PG Bidder endpoint and allocates your line items across the Prebid Server clusters.
+4. The `Delivery Stats Service` is available for PG Bidders to obtain up-to-date reports on how line items are delivering.
+5. The `Dimension Value API` should be used by bidders to create targeting values.
+6. Each PG Bidder has it's own logic for pacing their line items in 1 or 5-minute increments called "plans".
+7. The publisher or a service team enter the PG Line Items into the PG Bidder's user interface.
+
+Notes:
+- It's possible that you could deliver PG Line Items through more than one PG Host Company.
+- It it the responsibility of the PG Bidder to manage their own finance arrangements with each Publisher.
+- It's possible that the Host Company may charge a fee to deliver PG Line Items through their infrastructure.
+
+## What's involved in building a PG Bidder?
+
+These are the high level steps for how to develop a PG Bidder and plug it into a Host Company's implementation.
+
+1. Contact a PG Host Company to make sure they're ready to incorporate a new PG Bidder. They may have additional requirements.
+1. Obtain access to the Host Company's Dimension Value API and Delivery Stats server. You will receive a "biddercode" similar to the codes used in Prebid.js. e.g. "pgExample".
+1. Develop a User Interface for the customer to enter PG info: date range, targeting details, price, and pacing details. The targeting information comes from the Host Company's Dimension Value API.
+1. Develop a pacing algorithm that uses data from the Host Company's Delivery Stats server and your own data stores.
+1. Develop a report that uses data from the Host Company's Delivery Stats server and your own data stores.
+1. Develop an external API that can respond to requests from the Host Company's General Planner for line item data.
+1. Develop a method for estimating inventory forecast and availability. The Host Company may have data available.
+1. Contact the Host Company to begin integration testing.
+
+### Obtain targeting dimensions
+
+The Host Company will give PG Bidders access to their Dimension Value API which will let them know what attributes and values their Prebid Servers can target at runtime for particular clients.
+The values used will differ between Host Companies and publishers. For example, there may be different geographic and device info services. Publisher AdSlot and First Party Data fields will also vary.
+
+Once granted authenticated access to the Dimension Value endpoint, you'll use the it to query it to get attribute names and values specific to the accounts you're working with. e.g.
+
+- GET /dim-val/api/v2/attr/names?account=1001
+- GET /dim-val/api/v2/attr/values?account=1001
+
+There are various options for filtering data. See the [Dimension Value API documentation](https://github.com/prebid/pg-dim-val-api/blob/main/docs/server_endpoints.md) for more details.
+
+{: .alert.alert-info :}
+In order to access client-specific targeting data, you'll need to know the account ID the Host Company uses for each publisher.
+
+See [PG Targeting Syntax](/prebid-server/features/pg/pbs-pg-targeting.html) for a list of targeting attributes you may be able
+to get from the PG Host Company and how to format them as part of the [PG Plan](/prebid-server/features/pg/pbs-pg-plan.html).
+
+### Getting data from the Delivery Stats Service
+
+There are two reasons PG Bidders need data from the Host Company's PG Delivery Stats Service:
+
+1. **Line Item reporting**: detailed info is available about where in the delivery funnel each Line Item is getting attention or running into problems. See the [PG Glossary](/prebid-server/features/pg/pbs-pg-glossary.html#metrics) for which statistics you can expect.
+1. **Inform the pacing algorithm**: in order to write a robust and responsive pacing algorithm, the PG Bidder is going to need fresh data. If the bidder's impression data stream is real-time, that may be enough. If not, the Host Company's Delivery Stats server can provide recent (5-minute) summaries of important metrics like tokens spend and bidsWon. See [PG Plans](/prebid-server/features/pg/pbs-pg-plan.html) for more details.
+
+Some example Delivery Stats queries:
+
+- GET /del-stats-summ/api/v1/report/line-item-summary?startTime=YYYY-MM-DDT00:00:00.000Z -- this returns an hourly aggregration for all of your line items since the specified time. See the [Line Item Summary Report endpoint documentation](https://github.com/prebid/pg-del-stats/blob/main/docs/line_item_summary_endpoint.md) for more info.
+- GET /del-stats-pa/api/v2/report/delivery?bidderCode=pgExample&startTime=YYYY-MM-DDT00:00:00.000Z -- this returns 5-minute aggregations for all of your line items since the specified time. See the [Delivery Report endpoint documentation](https://github.com/prebid/pg-del-stats/blob/main/docs/delivery_report_endpoints.md)
+
+
+### Answering General Planner requests
+
+When the PG Bidder is ready for integration with the Host Company, they'll provide an authenticated secure endpoint that will answer requests from the Host Company's General Planner.
+The path of this endpoint can be anything you'd like. It will receive these query string parameters:
+
+{: .table .table-bordered .table-striped }
+| Parameter | Format | Required? | Description |
+| --- | --- | --- | --- |
+| since | string | no |  Timestamp in ISO-8601 format. For example, 2019-02-01T03:00:00.000Z. Service should respond with all meta data for active or nearly-active line items and schedules that got updated since this timestamp. Absence of this parameter signals request to return all active or nearly-active line items. |
+| hours | string | no |  Number of hours of plans desired i.e. provide the next 3 hours worth of plans |
+
+Here's an [example JSON response](https://github.com/prebid/pg-general-planner/blob/main/docs/samples/pa_rsp.json) that might come from your bidder planner.
+
+At this point, your endpoint needs to respond quickly with the most recently calculated set of PG line item pacing plans. A `plan` is a set
+of instructions to Prebid Server that tells the system how often to serve
+a line item in a given period. e.g. "serve LineA 50 times from noon-12:05, 55 times from 12:05-12:10, ..."
+
+The General Planner will be configured to call your endpoint every 1-10 minutes depending on the Host Company.
+
+See [PG Plan Definition](/prebid-server/features/pg/pbs-pg-plan.html) for more details.
+
+### General notes on writing a pacing algorithm
+
+At a high level, pacing a line item seems like it might be simple:
+
+```
+NumberOfImpressionsEach5MinPeriod=TotalImpressionsRemaining+3percentBuffer / NumberOf5MinPeriodsRemaining
+```
+
+But this approach wouldn't perform well:
+- When the line falls behind, it won't take advantage of higher traffic periods to catch up. It will fall behind during normal low-traffic periods, saving all impressions for the last minute.
+- As covered in the description of [tokens](/prebid-server/features/pg/pbs-pg-plan.html#tokens), a PG line item cannot assume that it'll be chosen every time it's offered to the ad server. Prebid PG paces based on tokens, not impressions, so the pacing algorithm needs to estimate how many times each line item needs to be offered to the ad server in order to land a final certified impression.
+
+Likewise, another naive approach is to try and immediately catch up to the "even delivery" line:
+```
+ImpressionDeficit=TotalImpressions+3percentBuffer - TotalImpressionsShouldHaveByNow
+
+NumberOfImpressionsThis5MinPeriod=ImpressionDeficit * NoiseFactor
+```
+
+Potential problems with this algorithm:
+- If it falls far behind, it could be overly aggressive in trying to catch up, affecting the delivery of other line items.
+- If it gets ahead somehow, it will stop delivering entirely until time catches up to the delivery curve.
+
+Here are some examples of desirable delivery patterns:
+
+![Desirable delivery patterns](/assets/images/prebid-server/pg/pg-good-delivery.png){: .pb-lg-img :}
+
+And these are examples of delivery patterns to avoid:
+
+![Undesirable delivery patterns](/assets/images/prebid-server/pg/pg-bad-delivery.png){: .pb-lg-img :}
+
+For more information, see the "Plans" section of the [Intro to PG Whitepaper](https://files.prebid.org/pg/Prebid_Programmatic_Guaranteed_White_Paper.pdf).
+
+{: .alert.alert-warning :}
+The PG Host Company may require periodic of testing with your pacing algorithm because undesirable
+token management from on PG Bidder could affect line item delivery from other PG Bidders.
+
+## Related Topics
+
+- [PG Home Page](/prebid-server/features/pg/pbs-pg-idx.html)
+- [PG Plans](/prebid-server/features/pg/pbs-pg-plan.html)
+- [PG Glossary](/prebid-server/features/pg/pbs-pg-glossary.html)
+- [PG Targeting](/prebid-server/features/pg/pbs-pg-targeting.html)
diff --git a/prebid-server/features/pg/pbs-pg-glossary.md b/prebid-server/features/pg/pbs-pg-glossary.md
new file mode 100644
index 0000000000..c4dd2df468
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-glossary.md
@@ -0,0 +1,80 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Programmatic Guaranteed Glossary
+---
+
+# Programmatic Guaranteed Glossary
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## Basic terminology
+
+- **Programmatic Ad** - an ad request that flows through the multi-vendor ad tech ecosystem
+- **Guaranteed** - A buyer and seller have entered into a contract: to deliver a certain amount of impressions to a particular target over a particular date range. If contract isn't met, there may be financial penalties or extra impressions.
+- **PG Host Company** - the entity running the Prebid PG software: Prebid Servers, General Planner, Delivery Stats, and Dimension Value API.
+- **Prebid Ad Slot** - the "hole in the page" that's requesting an ad (note: this is not currently standard Prebid.org terminology).
+- **Prebid Ad Unit** - a package of bidding parameters that defines which bidders and bid parameters are to be used for a specific "hole in the page".
+- **Client Requests** - OpenRTB-like network calls from a client to the Prebid Server requesting one or more auctions.
+- **Auction Requests** - a single OpenRTB ad request may contain 1 or more 'imp' blocks that define different auction scenarios. Each of these blocks is an "auction". Auctions are sent to one or more bidders and are associated with auction parameters for each bidder.
+- **PG Bidder** - the ad exchange, demand side platform, or other bid source that directly or indirectly connects the Auction Request to a bid. Example bidders include Magnite, Criteo, etc.
+- **Bidder Parameters** - the specific parameters required by the bidder describing the auction to take place. The Rubicon account, site, and zone are example parameters.
+- **PG Line Item** - the base unit of ad delivery has a goal, date range, target, creatives, deal ID, and pacing options.
+- **AdServer Line Item** - corresponding to the PG Line Item, the AdServer has a similar line item which prioritizes the PG Line Item in relation to other direct-sold agreements. It may also have a goal and date range, but the targeting will be just to the deal ID, not the full PG target. The creative is the Prebid-standard creative instead of the actual creative.
+- **Deal** - an agreement between a buyer and a seller. In the PG context, a Deal may be comprised of 1 or more line items for different media types, targets, date ranges, etc. Since most bidders won't understand "line items", a candidate Deal ID is likely to be what's passed to each bidder.
+- **Line Item Type** - sponsorship, guaranteed, non-guaranteed, house. 
+- **Creative** - the actual ad that will be seen by an end user. May be an image, HTML, video, or native.
+- **Target** - a description of the specific sites, user, device, and geographic characteristics a line item is aimed at.
+- **Goal** - How many total impressions a campaign line needs to serve
+- **Bonus** - Extra impressions assigned to a campaign line to make sure it delivers at least the total goal. This may be stated as a percentage or a number of impressions. Bonus is important to make sure that impression counting discrepancies don't cause the campaign to be perceived as missing its goal.
+- **Goal Type** - which metric is used to meet the goal. (i.e. wins or views) 
+- **Start and End Datetime** - the date range for the campaign could include starting and ending mid-day. Each campaign may also be associated with a timezone. 
+- **Delivery Type** - defines the general shape of the desired delivery curve: 
+    - even delivery - impressions are roughly equal each day of the campaign
+    - front-loaded delivery - there may be more impressions delivered in the early days of the campaign
+    - as-soon-as-possible - serve this thing whenever there's a chance
+- **Historic Delivery** - Number of impressions a line delivered until the end of previous day.
+- **Deficit** - The number of impressions a line is behind due to lack of overall inventory, existence of road-blocks, or other reason.
+- **Late Deficit** - Number of impressions that a line is behind due to trafficking reasons, normally late creative. We may choose to catch up on a late deficit differently than other kinds of deficits because it's the fault of the advertiser, and it could affect other campaigns.
+- **Priority** - a way of ranking competing line items against each other.
+- **Oversold** - one or more guaranteed line items are struggling and are unlikely to reach their goals. In some cases it may be better to let some of the line items finish at the expense of others, while in other scenarios it's better to distribute what's available. 
+- **Underdelivery** - when a line item is not serving enough impressions to meet its goal.
+- **Overdelivery** - when a line item is serving too many impressions, or has met its delivery goal too early.
+- **Frequency Cap** - how often a given user is allowed to see the advertising message.
+- **Discrepancy** - impressions are counted by multiple systems which often different from each other by a few percent. The buyer and seller agree on which numbers are billable. The ad system needs to deliver enough impressions that the goal is met in the system-of-record.
+- **Ad Inventory** - the combined set of attributes supplied with an ad request, whether direct or indirect. e.g. page context, user info, device info, etc. Line Item 'Targets' inspect these inventory attributes for matching.
+- **Forecast** - how much inventory of a particular type is expected to come in over a specified time period. e.g. "how many 300x250 ad requests from example.com will come from Windows machines next week?"
+- **Commitment** - a guaranteed line item that the publisher has promised to deliver to an advertiser.
+- **Availability** - starts with the Projection, but removes traffic that's already sold to other committed line items.
+- **Availability Buffer** - a safety factor to recognize that projections are always an estimate, and only the most sophisticated delivery systems can properly support the juggling involved in tightly sold overlapping inventory.
+
+## Metrics
+
+The basic design of the metrics offered by the PG system is a funnel that allows us to see where a line item's chance to deliver may be struggling. Here are the metrics available:
+
+- **clientAuctions** - the total number of auction impression requests seen by the system across all accounts. A single HTTPS request to PBS may contain multiple auction requests – this number basically reflects all auctions taking place.
+- **accountAuctions** - the number of auctions taking place for the specific Rubicon Project account ID
+- **domainMatched** - the number of times the domain portion of this line item's target matched an impression request. e.g. "1000 auctions for example.com". If there is no domain targeting, this number should be the same as accountAuctions.
+- **targetMatched** - the number of times the line item's entire target matched a request.
+- **targetMatchedButFcapped** - the number of times the line item's entire target matched a request, but the user ad already reached their personal frequency cap limit for this line item.
+- **targetMatchedButFcapLookupFailed** - the number of times the line item's entire target matched a request, but was removed from consideration because the lines item has a frequency cap and the lookup to the Frequency Capping system failed.
+- **pacingDeferred** - Prebid has taken the line item out of consideration in order to make sure it's not delivering too often
+- **sentToBidder** - only the top few matching line items or deals will be sent to each bidder. This metric indicates whether the line item was in the top few.
+- **sentToBidderAsTopMatch** - if the line item was considered most ready to serve by Prebid Server before going to the bidder, this metric will be incremented.
+- **receivedFromBidder** - this metric indicates whether the bidder chose this deal/line item from the candidates sent to it. Bidders may reject any suggested Deal ID or fail to respond.
+- **receivedFromBidderInvalidated** - indicates the number of times this deal/line item was received from a bidder, but rejected by Prebid Server for any reason. Rejection reasons include: incorrect size for auction, target didn't match, ahead of pace and not ready to serve.
+- **sentToClient** - indicates how many times this line item was sent as the bidder's top match to the client, and therefore the ad server.
+- **sentToClientAsTopMatch** - indicates how many times this line item was sent to the client/ad server flagged by Prebid Server as the most eligible PG line item.
+- **lostToLineItems** - this array provides a measure of which competing line items have been considered more eligible to serve than this line item
+- **events** - how many times this line item received notification of the stated event type. For now only the only supported event type is "win", but eventually there may be other types like "click", "video 50% played", etc.
+
+Here's a graphical representation showing what point in the delivery funnel each of these metrics measures:
+
+![PG Metrics](/assets/images/prebid-server/pg/pg-metrics.png){: .pb-xlg-img :}
+
+## Related Topics
+
+- [PG Home Page](/prebid-server/features/pg/pbs-pg-idx.html)
+- [PG White Paper](https://files.prebid.org/pg/Prebid_Programmatic_Guaranteed_White_Paper.pdf)
diff --git a/prebid-server/features/pg/pbs-pg-host.md b/prebid-server/features/pg/pbs-pg-host.md
new file mode 100644
index 0000000000..3abf6b3d5e
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-host.md
@@ -0,0 +1,67 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Becoming a PG Host Company
+---
+
+# Becoming a PG Host Company
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## Overview
+
+Prebid PG is open source, so anyone can spin up the 4 different types of servers 
+needed to offer a PG service.
+
+1. Prebid Servers handle the real-time mix of open market and PG auctions.
+1. The General Planner collects PG line items from one or more PG Bidders.
+1. The Delivery Stats Service provides pacing and reporting information.
+1. The Dimension Value API provides the user interface the details required to build targets.
+
+See [Adding a PG Bidder](/prebid-server/features/pg/pbs-pg-bidder.html) for the
+high level view of the components.
+
+As a PG Host Company, you will have expenses in running and maintaining a global high-performance cluster of servers and databases. You'll need at least one PG Bidder, 
+which might be one you build on your own or partner with someone else. You're under
+no obligation to support other PG Bidders, but your publishers may request it.
+
+## Installing the Servers
+
+For now, the only information about building and running the servers is in
+the relevant GitHub repos:
+
+- [Prebid Server Java](https://github.com/prebid/prebid-server-java). Note that Prebid Server Go doesn't currently support Programmatic Guaranteed.
+- [General Planner](https://github.com/prebid/pg-general-planner)
+- [Delivery Stats Service](https://github.com/prebid/pg-del-stats)
+- [Dimension Value API](https://github.com/prebid/pg-dim-val-api)
+
+Prebid does not offer specific guidance about fault-tolerant architectures.
+It's left up to each Host Company to determine what will happen if one of the servers goes down. i.e. Will there be load-balancing, automatic failover, a warm stand-by, or no fault tolerance?
+
+## General notes on testing the service
+
+There are a fair number of moving parts in a Prebid PG installation. Prebid.org
+does not run a test cluster. Changes are made by Prebid member companies, which do
+have test clusters, but they may not test every possible configuration. e.g. different databases, geographic lookup vendors, 
+
+We recommend that PG Host Companies commit to regular testing of software updates
+against their specific configuration.
+
+The testing of PG Bidders and their pacing algorithms may be important to you,
+as publishers and advertisers care about the delivery patterns of their ad campaigns
+in a variety of challenging scenarios. Prebid.org may have extended recommendations
+about PG Bidder testing in the future, but in the meantime, you should consider
+joining Prebid.org and chatting with the development teams involved.
+
+## Announcing your service
+
+When ready to open their doors for business, Prebid.org members can ask to
+have their contact info added to the list of [PG Managed Services](/prebid-server/features/pg/pbs-pg-idx.html#list-of-pg-managed-services).
+
+## Related Topics
+
+- [PG Home Page](/prebid-server/features/pg/pbs-pg-idx.html)
+- [PG White Paper](https://files.prebid.org/pg/Prebid_Programmatic_Guaranteed_White_Paper.pdf)
+- [PG Glossary](/prebid-server/features/pg/pbs-pg-glossary.html)
diff --git a/prebid-server/features/pg/pbs-pg-idx.md b/prebid-server/features/pg/pbs-pg-idx.md
new file mode 100644
index 0000000000..391b4e0b38
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-idx.md
@@ -0,0 +1,67 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Prebid Programmatic Guaranteed
+---
+
+# Prebid Programmatic Guaranteed
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## Prebid Programmatic Guaranteed
+In general, Programmatic Guaranteed (PG) has existed for several years as an ad server-based function.
+While anchoring PG in the ad server is helpful from a deployment perspective,
+the lack of transparency and configurability in the ad server has slowed down product momentum
+and made it harder for buyers and sellers to flexibly adjust their strategy and
+configurations for PG deals. The introduction of open-source, standards-based
+Programmatic Guaranteed, anchored in Prebid Sever, helps both buyers and sellers in
+several key ways:
+
+- It allows publishers to utilize preferred partners and data in the Programmatic infrastructure.
+- It streamlines the traditional RFP and I/O process between buyers and sellers
+- It separates the pacing, capping and forecasting functions from the ad server so publishers can more easily control and modify deals
+- Enables a seamless, software-based negotiation process between buyers and sellers
+- Ensures easier interoperability with a wider universe of buy-side platforms
+
+At a high level, the system allows any **Host Company** running Prebid Server (only PBS-Java for now) to integrate open source components into their existing UIs and data delivery systems.
+
+In addition, the Host Company can support other **PG Bidders** connecting into their system to make their environment richer for publishers.
+
+![PG High Level Framework](/assets/images/prebid-server/pg/pg-arch-1.png){: .pb-sm-img :}
+
+We want to encourage an ecosystem where programmatic vendors can compete on their strengths: some companies may be excellent at hosting a technical infrastructure, while others may excel at usability, reporting, or delivery algorithms.
+
+
+## PG For Publishers
+
+Publishers interested in trying Programmatic Guaranteed through Prebid should
+contact one of the companies hosting a PG cluster. They'll explain how it all works and walk you through the setup process.
+
+### List of PG Managed Services
+
+If you're a publisher looking to try Programmatic Guaranteed or a PG bidder that wants to integrate into an existing cluster, here's a list of Prebid.org members to consider:
+
+- **Magnite** - contact your account representative or globalsupport@magnite.com
+
+## PG for Bidders
+
+If you have a demand source and are ready to implement a guaranteed delivery algorithm, learn how to [become a PG Bidder](/prebid-server/features/pg/pbs-pg-bidder.html).
+
+## Hosting your own PG Cluster
+
+If you're ready to host a global high-performance cluster, learn how to [become a PG Host Company](/prebid-server/features/pg/pbs-pg-host.html).
+
+## Questions?
+
+Contact prebid-server@prebid.org.
+
+## Related Topics
+
+- Intro to PG: [video](https://files.prebid.org/pg/PG_in_Prebid.mp4), [pdf](https://files.prebid.org/pg/PG_in_Prebid_Overview.pdf)
+- [PG White Paper](https://files.prebid.org/pg/Prebid_Programmatic_Guaranteed_White_Paper.pdf)
+- [Becoming a PG Bidder](/prebid-server/features/pg/pbs-pg-bidder.html)
+- [Becoming a PG Host Company](/prebid-server/features/pg/pbs-pg-host.html)
+- [PG Targeting](/prebid-server/features/pg/pbs-pg-targeting.html)
+- [PG Glossary](/prebid-server/features/pg/pbs-pg-glossary.html)
diff --git a/prebid-server/features/pg/pbs-pg-plan.md b/prebid-server/features/pg/pbs-pg-plan.md
new file mode 100644
index 0000000000..8c9c9e045e
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-plan.md
@@ -0,0 +1,284 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Programmatic Guaranteed Plans
+---
+
+# Programmatic Guaranteed Plans
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## What is a PG Plan?
+
+A `Plan` is a set of instructions to Prebid Server that tells it how often to serve a PG line item in a given period.
+
+1. Plans are created by each [PG Bidder](/prebid-server/features/pg/pbs-pg-bidder.html) as an output of their bidder-specific pacing algorithm.
+1. The 'General Planner' run by the Host Company will spread the Plan out across the cluster of Prebid Servers.
+1. Each Prebid Server works to deliver its part of the Plan.
+
+Here's what one looks like at a high level:
+
+```
+[
+  {
+    "lineItemId": "2291",
+    ... other line item attributes ...
+    deliverySchedule: [{
+        "planId": "2656179",
+        "startTimeStamp": "2020-08-28T11:50:00.000Z",
+        "endTimeStamp": "2020-08-28T11:55:00.000Z",
+        "updatedTimeStamp": "2020-08-28T10:04:12.000Z",
+        "tokens": [{
+            "class": 1,
+            "total": 50
+        }]
+    },{
+           ... next delivery schedule ...
+    }]
+  },
+  ... next line item ...
+  }
+]
+```
+
+The key parts of the Plan are:
+- Line item details. (See [example](#annotated-plan-example) below)
+- An array of Delivery Schedules broken into 5-minute periods
+- Each 5-minute period defines a number of `tokens` that need to be delivered
+
+### Tokens
+
+A `token` is an ad impression scaled up to overcome delivery obstacles.
+
+When Prebid Server (PBS) sends a PG line item to the ad server, it might be
+chosen to win, or maybe not. In either case, the act of sending a
+line item to the ad server causes PBS to create a "cool down" period for that
+line item. This is what pacing is all about -- making sure that delivery of the
+daily impression goal doesn't complete 20 minutes after midnight. PG delivery
+needs to be spread through the day, through the hour, and through each 5-minute period.
+
+If we could guarantee that the ad server would choose the PG line item to win every time,
+we wouldn't need tokens... PG could just use impressions. But that's not the case. There are several reasons why a candidate PG line item might not end up
+getting a final certified ad impression:
+- competing line items in the ad server
+- competing PG line items from another vendor
+- user leaves the page before ad render
+- the impression may be discounted as non-human traffic
+
+Basically, the pacing algorithms are working in a "noisy" environment. Not only are there
+many things that can get in the way of delivering a certified an ad impression,
+conditions can change rapidly, e.g. competing line items may start or stop, or the DSP may change its bidding pattern.
+
+So a "token" is Prebid PG's way of dealing with noise in the system.
+Instead of being satifisfied with offering a PG line item to the ad server
+and assuming that it will become a certified impression, PG operates in tokens instead, knowing that some of those opportunities won't materialize.
+You can think of it in terms of this basic formula:
+
+```
+Tokens = ImpressionsNeeded * Noise
+```
+
+Where the "noise" factor is how many tokens it's currently taking to get an ad
+impression through the gauntlet of challenges. Determining this noise factor
+is part of what the pacing algorithm needs to do -- adjusting it in real time
+as needed. e.g. if it's been taking 2 trips to the ad server to get a "bid won", the noise factor is 2, so in a plan that requires 50 impressions, there would be 100 tokens.
+You might wonder "why doesn't Prebid Server just take care of this?" Because Prebid Server is stateless... useful statistics are forwarded from hundreds of front-end servers and it's the job of the backend servers to aggregate and use that data.
+
+Of course noise could be infinite. For example, if there's a 'roadblock'
+ad in the ad server, it's possible that a PG line item will just stop delivering
+entirely for a day or more, and that's ok. But even though noise can be infinite,
+tokens cannot be. The Host Company will cap tokens at some reasonable level, 
+but the best strategy for the infinite noise scenario is to give up and use a 
+very small token count, waiting for when the problem has lifted.
+
+A good real-time way to monitor noise is to compare two fields
+in the Delivery Stats reports: sentToClientAsTopMatch vs events.bidsWon. (See the [glossary.](/prebid-server/features/pg/pbs-pg-glossary.html#metrics)) These values
+are indications of how many times the line item was offered to the ad server
+and accepted. But this value may also be tempered with data from your
+clean financial pipeline that compares certified impressions with events.bidsWon.
+
+### Plan Attributes
+
+These are the attributes that are part of a Plan. See below for an [annotated example](#annotated-plan-example).
+
+{: .table .table-bordered .table-striped }
+| Attribute | Required? | Description | Data Type |
+| --- | --- |--- |--- |
+| lineItemId | yes | Bidder-specific ID for this line item | string |
+| source | yes | Your PG bidder code. e.g. "pgBidderA" | string |
+| status | yes | Whether this line item is currently "active" or not. The only value that matters to the General Planner is "active". Any other value will cause the line item to be ignored. | string |
+| dealId | yes | Bidder-specific deal ID. Note that a Deal ID may be used by multiple line items. | string |
+| accountId | yes | Host Company-specific value for the publisher. | string |
+| price.cpm | yes | The CPM of the line item. | float |
+| price.currency | yes | The currency for the CPM of the line item. | string |
+| relativePriority | yes | Relative ranking specific to your pacing algorithm. You can put every line item at the same priority, or create 1000 different levels managed by your pacing algorithm. | integer |
+| sizes | yes | An array of creative sizes associated with the line item. e.g. `[{"w": 468,"h": 60},{"w": 728,"h": 90}]` | array of objects |
+| frequencyCaps.fcapId | no | Bidder-specific frequency cap ID. Needs to be uniqueo within your line items. | string |
+| frequencyCaps.count | no | How many impressions can be served | integer |
+| frequencyCaps.periods | no | Over how many periods | integer |
+| frequencyCaps.periodType | no | Period length. E.g. "day" or "hour" | string |
+| targeting | yes | Defines which ad requests are of interest to this line item. See [PG Targeting](/prebid-server/features/pg/pbs-pg-targeting.html) | object |
+| startTimeStamp | yes | Line start time in UTC. e.g. 2020-08-28T07:22:14.000Z | string |
+| endTimeStamp | yes | Line end time in UTC. | string |
+| updatedTimeStamp | no | When this plan was last modified. | string |
+| deliverySchedules | yes | array of objects |
+| deliverySchedules.planId | yes? | Bidder-specific ID for use in debugging. Should be unique. | string |
+| deliverySchedules.startTimeStamp | yes | Start time of plan period in UTC | string |
+| deliverySchedules.endTimeStamp | yes | End time of plan period in UTC | string |
+| deliverySchedules.updatedTimeStamp | no | When this plan period was last modified.| string |
+| deliverySchedules.tokens.class | no | For future use. Set to 1 for now. | integer |
+| deliverySchedules.tokens.total | yes | Token count (Impressions * Noise) for this plan period. | integer |
+
+## Plans and the General Planner
+
+The General Planner will poll the PG Bidder endpoint frequently - e.g. every minute or every 5-minutes. The exact period will be determined between you and the Host Company, but it needs to be often because pacing line items is a dynamic business.
+Even though it will be contacted frequently, they should still generate
+several hours worth of the delivery schedule in case communication breaks down somehow. 
+
+Once it receives the Plan, the General Planner will split up the tokens across 
+Prebid Servers. When a line item first starts, it does this in a really blunt way: just divides them evenly across the servers. But it will soon start adjusting for geographic differences
+in line item delivery. e.g. if a line item only serves tokens in Europe, the Prebid Servers in Europe will get all the tokens within a few cycles.
+
+## Plans and Prebid Server
+
+Each PBS polls the General Planner once per minute, getting new and updated Plans.
+Here's how it works:
+
+1. When an auction request comes in, check to see if the account has any active PG line items. If it doesn't, process the request normally.
+2. If it is an account with active PG line items, enhance the request with geographic, device, user, and frequency capping information
+3. Find out which PG line items have targets that match the current request
+4. Loop through the matching line items
+    1. Increment the "targetMatched" metric.
+    1. If the PG line item has a frequency cap and there's no user ID or the lookup failed, increment the "targetMatchedButFcapLookupFailed" metric and take it off the list.
+    1. If the PG line item has a frequency cap and it's met the cap, increment the "targetMatchedButFcapped" metric and take it off the list.
+    1. If the PG line item is in "cool-down", increment the "pacingDeferred" metric and take it off the list
+5. Sort the remaining line items into priority order based on the PG-bidder-provided "relative priority", with a random secondary sort.
+6. Take the first 3 PG line items for each PG Bidder and send them the relevant bid adapter, incrementing the "sentToBidder" metric for each, and the "sentToBidderAsTopMatch" metric for one of them.
+7. Wait for the auction delay for the results. Increment "receivedFromBidder" and "receivedFromBidderInvalidated" metrics as appropriate.
+8. Take the highest priority bid from each PG Bidder and prepare ad server targeting. Increment the "sentToClient" metric.
+9. If there's more than one bid from a PG Bidder, randomly choose one to be the overall winner and increment the "sentToClientAsTopMatch" metric. Only this line item is considered to have spent a token and is put into "cool-down": PBS calculates how many milliseconds it needs to wait before offering this line item to the ad server again.
+
+{: .alert.alert-info :}
+Random numbers are used at a couple of points in the PG algorithm. This is to avoid choosing the same aggressive-but-blocked line item every time.
+
+## Annotated Plan Example
+
+Here's a complete example of a Plan with all line item and delivery schedule fields.
+
+```
+[				// each line item has a plan entry
+  {
+    "lineItemId": "2291",	// this is specific to your internal systems
+    "dealId": "710216",		// also specific to your internal systems
+    "accountId": "1001",	// the Host Company's account ID for the publisher
+    "price": {
+      "cpm": 7.29,
+      "currency": "EUR"
+    },
+    "relativePriority": 2,	// relative stacking specific to your pacing algorithm
+    "sizes": [{			// creative sizes
+        "w": 468,
+        "h": 60
+      },
+      {
+        "w": 728,
+        "h": 90
+      }
+    ],
+    "frequencyCaps": [{		// Host Company may support multiple cap levels
+        "fcapId": "LI-2291",	// ID specific to your system
+        "count": 2,		// show no more than 2 times per 1 day
+        "periods": 1,
+        "periodType": "day"
+      }
+    ],
+    "targeting": {		// Line Item targeting
+      "$and": [{
+          "adunit.size": {
+            "$intersects": [{
+                "h": 60,
+                "w": 468
+              },
+              {
+                "h": 90,
+                "w": 728
+              }
+            ]
+          }
+        },{
+          "adunit.mediatype": {
+            "$intersects": [
+              "banner"
+            ]
+          }
+        },{
+          "device.ext.deviceatlas.browser": {
+            "$in": [
+              "Chrome",
+              "Firefox"
+            ]
+          }
+        },{
+          "device.geo.ext.netacuity.country": {
+            "$in": [
+              "us",
+              "jp"
+            ]
+          }
+        },{
+          "adunit.adslot": {
+            "$in": [
+              "/1111/QA_Tests"
+            ]
+          }
+        }
+      ]
+    },
+    "startTimeStamp": "2020-08-28T07:22:14.000Z",	// line start time in UTC
+    "endTimeStamp": "2020-08-30T17:22:14.000Z",		// line end time in UTC
+    "updatedTimeStamp": "2020-08-28T06:22:15.000Z",
+    "deliverySchedules": [				// now starts the plans
+      {
+        "planId": "2656177",				// ID is specific to your system
+        "startTimeStamp": "2020-08-28T11:40:00.000Z",	// UTC 11:40 to 11:45
+        "endTimeStamp": "2020-08-28T11:45:00.000Z",
+        "updatedTimeStamp": "2020-08-28T11:36:30.000Z",
+        "tokens": [
+          {
+            "class": 1,					// always 1 for now
+            "total": 8					// number of tokens
+          }
+        ]
+      },
+      {
+        "planId": "2656178",
+        "startTimeStamp": "2020-08-28T11:45:00.000Z",	// UTC 11:45 to 11:50
+        "endTimeStamp": "2020-08-28T11:50:00.000Z",
+        "updatedTimeStamp": "2020-08-28T11:38:19.000Z",
+        "tokens": [
+          {
+            "class": 1,
+            "total": 10
+          }
+        ]
+      },{
+	... more plans ...
+      }
+    ],
+    "source": "pgBidderCode",
+    "status": "active"
+  },
+  {
+     ... next line item ...
+  }
+]
+```
+
+## Related Topics
+
+- [PG Home Page](/prebid-server/features/pg/pbs-pg-idx.html)
+- [Becoming a PG Bidder](/prebid-server/features/pg/pbs-pg-bidder.html)
+- [PG Targeting](/prebid-server/features/pg/pbs-pg-targeting.html)
+- [PG Glossary](/prebid-server/features/pg/pbs-pg-glossary.html)
diff --git a/prebid-server/features/pg/pbs-pg-targeting.md b/prebid-server/features/pg/pbs-pg-targeting.md
new file mode 100644
index 0000000000..dd8157733a
--- /dev/null
+++ b/prebid-server/features/pg/pbs-pg-targeting.md
@@ -0,0 +1,177 @@
+---
+layout: page_v2
+sidebarType: 5
+title: Programmatic Guaranteed Targeting Syntax
+---
+
+# Programmatic Guaranteed Targeting Syntax
+{: .no_toc}
+
+* TOC
+{:toc}
+
+## Overview
+
+Targeting is the ability for Prebid Server (PBS) to match PG line items with
+incoming OpenRTB auction requests.
+
+Here's a simple example target that says this line item will match any request for a 300x250 banner:
+
+```
+{
+  "$and": [
+    {
+      "adunit.size": {"$intersects": [{"w": 300,"h": 250}]}
+    },
+    {
+      "adunit.mediatype": {"$intersects": ["banner"]}
+    }
+  ]
+}
+```
+
+In general, the syntax is:
+```
+{
+  "$and/$or": [
+    { "ATTRIBUTE": { "OPERATOR": CONDITION } },
+    "$and/$or": [ ... ],
+    "$not": { "ATTRIBUTE": { "OPERATOR": CONDITION } }
+  ]
+}
+```
+Here are the supported OPERATORs:
+
+{: .table .table-bordered .table-striped }
+| Operator | Description | Attribute Datatype | Condition Datatype | Example |
+| --- | --- | --- | --- |
+| $matches | True if the scalar ATTRIBUTE is the same as the CONDITION, or matches with an asterisk wildcard. | string | string | "$matches": "{::nomarkdown}*sports*{:/}" |
+| $in | True if the scalar ATTRIBUTE is on the CONDITION's array. | string | array of strings | "$in": ["a","b"] |
+| $intersects | True if at least one value from the ATTRIBUTE's array is on the CONDITION's array | array of strings | array of strings | "$intersects": ["hockey","soccer"] |
+| $within | True if user's lat/long are available and within the circle defined by the CONDITION. | from geolookup service | object with attributes: lat, lon, and radiusMiles | "$within": {"lat": 123.456,"lon": 789.123,"radiusMiles": 50} |
+
+## Targeting Attributes
+
+The full list of attributes supported by Prebid Server may differ by PG Host Company because they might use different geographic and device information services. But here's an example list:
+
+{: .table .table-bordered .table-striped }
+| Attribute | Description | Encoding | PBS Source | OpenRTB path | Operators |
+| --- | --- | --- | --- | --- | --- |
+| adunit.size | Ad Sizes | [{w: 300, h: 250},...] | OpenRTB | imp[].banner.format[] | intersects |
+| adunit.mediatype | Mediatype | string | OpenRTB | mediatype="banner" if imp.banner exists. mediatype="video-instream" if imp.video exists and placement is 1. mediatype="video-outstream" if imp.video exists and placement is <> 1. mediatype="native" if imp.native exists | intersects |
+| adunit.adslot | The ad server slot name | string | OpenRTB | imp[].ext.context.data.pbadslot | in, matches |
+| site.domain | Site domain | string | OpenRTB | site.domain | in, matches |
+| site.referrer | Referring URL | string | OpenRTB | site.page | in, matches |
+| app.bundle | Mobile application bundle | string | OpenRTB | app.bundle | in, matches |
+| pos | Page position | 0=unknown, 1=ATF, 3=BTF | OpenRTB | imp.banner.pos | in |
+| geo.distance | User's lat/lon is within a defined circle | none | Geo vendor | device.geo.lat, device.geo.lon | within |
+| device.geo.ext.VENDOR.country | Country | string | Geo vendor | device.geo.ext.VENDOR.country | in|
+| device.geo.ext.VENDOR.region | Region | string | Geo vendor | device.geo.ext.VENDOR.region | in|
+| device.geo.ext.VENDOR.metro | Metro (DMA) | string | Geo vendor | device.geo.ext.VENDOR.metro | in|
+| device.geo.ext.VENDOR.city | City | string | Geo vendor | device.geo.ext.VENDOR.city | in|
+| device.geo.ext.VENDOR.zip | Postal Code | string | Geo vendor | device.geo.ext.VENDOR.zip | in|
+| device.ext.VENDOR.connspeed | Connection Speed | string | Device vendor | device.ext.VENDOR.connspeed | in|
+| device.ext.VENDOR.type | Device Type | string | Device vendor | device.ext.VENDOR.type | in|
+| device.ext.VENDOR.make | Device Make | string | Device vendor | device.ext.VENDOR.make | in|
+| device.ext.VENDOR.model | Device Model | string | Device vendor | device.ext.VENDOR.model | in|
+| device.ext.VENDOR.os | Operating System | string | Device vendor | device.ext.VENDOR.os | in|
+| device.ext.VENDOR.browser | Browser | string | Device vendor | device.ext.VENDOR.browser | in|
+| device.ext.VENDOR.browserver | Browser Version | string | Device vendor | device.ext.VENDOR.browserver | in|
+| device.ext.VENDOR.language | Device Language | string | Device vendor | device.ext.VENDOR.language | in|
+| device.ext.VENDOR.osver | Operating System Version | string | Device vendor | device.ext.VENDOR.osver | in|
+| device.ext.VENDOR.carrier | Internet Carrier | string | Device vendor | device.ext.VENDOR.carrier | in|
+| user.ext.time.userdow | User Day of Week | 1=sun, 7=sat | Geo vendor + clock | user.ext.time.userdow | in|
+| user.ext.time.userhour | User Hour | 0-23 |Geo vendor + clock | user.ext.time.userhour | in|
+| ufpd.ATTR | User First Party Data | string | OpenRTB | user.ATTR or user.ext.data.ATTR | in, matches, intersects |
+| sfpd.ATTR | Site First Party Data | string | OpenRTB | imp[].ext.context.data.ATTR=VAL OR site.ext.data.ATTR=VAL OR app.ext.data.ATTR=VAL | in, matches, intersects |
+| segment.SOURCE | User Segment Data | string | OpenRTB | user.data[].id=SOURCE AND VALUE in user.data[].segment[].id | intersects |
+| bidp.BIDDER.ATTR | Bid Parameter Data | string | OpenRTB | imp[].ext.BIDDER.ATTR | in, matches, intersects|
+
+## Targeting Syntax
+
+Here's an example of a ridiculously specific target that uses most of the
+attributes and specific geographic and device info services:
+
+```
+{
+  "$and": [
+    {
+      "adunit.size": {"$intersects": [{"w": 300,"h": 250},{"w": 300,"h": 600}]}
+    },
+    {
+      "adunit.mediatype": {"$intersects": ["banner"]}
+    },
+    {
+      "$or": [
+        {"site.ext.domain": {"$matches": "*.example.com"}},
+        {"site.ext.domain": {"$in": ["prebid.org"]}}
+      ]
+    },
+    {
+      "$or": [
+        {"site.referrer": {"$matches": "*sports*"}},
+        {"site.referrer": {"$matches": "*prebid*"}}
+      ]
+    },
+    {
+      "$or": [
+        {"adunit.adslot": {"$matches": "/home/top*"}},
+        {"adunit.adslot": {"$in": ["/home/bottom"]}}
+      ]
+    },
+    {
+      "pos": {"$in": [1,3]}
+    },
+    {
+      "device.geo.ext.netacuity.country": {"$in": ["us","de"]}
+    },
+    {
+      "device.geo.ext.netacuity.region": {"$in": ["de-bw","de-by"]}
+    },
+    {
+      "device.geo.ext.netacuity.metro": {"$in": ["111","222"]}
+    },
+    {
+      "device.geo.ext.netacuity.city": {"$in": ["444","555"]}
+    },
+    {
+      "geo.distance": {"$within": {"lat": 123.456,"lon": 789.123,"radiusMiles": 50}}
+    },
+    {
+      "device.ext.deviceatlas.type": {"$in": ["tablet","phone"]}
+    },
+    {
+      "$or": [
+        {"bidp.rubicon.siteId": {"$in": [123,321]}},
+        {"bidp.appnexus.placementName": {"$matches": "*99999*"}},
+      ]
+    },
+    {
+      "$or": [
+        {"segment.rp": {"$intersects": [123,234,345]}},
+        {"segment.bluekai": {"$intersects": [123,234,345]}}
+      ]
+    },
+    {
+      "sfpd.sport": {"$intersects": ["hockey","soccer"]}
+    },
+    {
+      "user.ext.time.userdow": {"$in": [5,6]}
+    },
+    {
+      "user.ext.time.userhour": {"$in": [10,11,12,13,14]}
+    },
+    {
+      "$not": {
+        "ufpd.registered": {"$matches": ["false"]}
+      }
+    }
+  ]
+}
+```
+
+
+## Related Topics
+
+- [PG Home Page](/prebid-server/features/pg/pbs-pg-idx.html)
+- [PG Plans](/prebid-server/features/pg/pbs-pg-plan.html)
diff --git a/prebid-server/hosting/pbs-database.md b/prebid-server/hosting/pbs-database.md
index 4dfde3d158..08efe50163 100644
--- a/prebid-server/hosting/pbs-database.md
+++ b/prebid-server/hosting/pbs-database.md
@@ -99,7 +99,7 @@ create a view as desired. We'll fix this someday.
 Account data is queried on every request to pull in important data. There is an LRU cache in the server
 so the database isn't actually hit on every request.
 
-In PBS-Java, many account-configuration options come from the database, while in PBS-Go, those options are available in YAML configuration.
+In PBS-Java, many account-configuration options come from the database. In PBS-Go, those options are available in either a YAML configuration or from an HTTP API.
 
 In both versions the server can optionally validate the account against this database and reject accounts from
 unknown sources.
@@ -108,7 +108,7 @@ The algorithm the server uses for determining the account ID of the incoming req
 
 1. look in site.publisher.id
 2. look in app.publisher.id
-3. if AMP, look for the 'account' parameter on the query string (PBS-Java only)
+3. if AMP, look for the 'account' parameter on the query string
 
 Here are the fields the server can recognize in the database response:
 
diff --git a/prebid-server/hosting/pbs-hosting.md b/prebid-server/hosting/pbs-hosting.md
index 96402bd87c..144fd0f196 100644
--- a/prebid-server/hosting/pbs-hosting.md
+++ b/prebid-server/hosting/pbs-hosting.md
@@ -68,7 +68,7 @@ populating data from their internal systems.
 You'll want to hook both Prebid Server and Prebid Cache up to an
 operational monitoring system.
 
-- PBS-Go currently supports Influx and Promotheus
+- PBS-Go currently supports Influx and Prometheus
 - PBS-Java currently supports Influx and Graphite
 
 ## Installing the Software
diff --git a/prebid-server/pbs-modules/index.md b/prebid-server/pbs-modules/index.md
new file mode 100644
index 0000000000..172bf692c9
--- /dev/null
+++ b/prebid-server/pbs-modules/index.md
@@ -0,0 +1,131 @@
+---
+layout: page_v2
+title: Prebid Server Modules
+description: Prebid Server Module Documentation
+sidebarType: 5
+---
+
+# Prebid Server Modules
+{:.no_toc}
+
+The core of Prebid Server contains the foundational code needed for header bidding. Any functionality that could be considered an add-on or that covers a special case is covered by modules. 
+
+If you're looking for bidder adapter parameters, see [Bidders' Params](/dev-docs/pbs-bidders.html).
+
+{: .alert.alert-info :}
+Only the Java version of PBS currently supports the module infrastructure.
+
+* TOC
+{:toc}
+
+## The Modules
+
+{: .table .table-bordered .table-striped }
+| Module              | Description  | PBS-Go | PBS-Java |
+|---------------------+--------------+--------+----------|
+| [**ORTB2 Blocking**](/prebid-server/pbs-modules/ortb2-blocking.html) | Support bidders that aren't full-service SSPs. | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+
+## Installing a PBS Module
+
+Once a Prebid Server host company decides which modules they want to support,
+here's how installation works:
+
+### 1. Build PBS with modules.
+
+Note that modules are currently an all-or-nothing nothing from a code perspective.
+```
+mvn clean package --file extra/pom.xml
+```
+
+### 2. Define an 'execution plan'
+
+The execution plan details:
+- which modules are used in your server
+- what order they're invoked in
+- how long modules have to run before timeout
+- whether any modules depend on each other
+
+If you want the module to run on every request regardless of account, this is a
+host-level config you should place in `application.yaml`. If the module should
+be active only for certain accounts, you'll need to place the plan in the account-specific config.
+
+To define a plan, you'll need to know the following module details, which should be available in the module documentation:
+- urls: which PBS 'entry points' are relevant. e.g. /openrtb2/auction, /openrtb2/amp
+- stages: one or more of the 7 workflow stages where the module should be called: entrypoint, raw-auction-request, processed-auction-request, bidder-request, raw-bidder-response, processed-bidder-response, and/or auction-response.
+- hooks: for each stage where a module runs, its documentation will provide the hook function name.
+
+Here's an example application.yaml entry:
+```
+hooks: 
+  host-execution-plan: >   # these hooks are always run for all accounts
+  {
+    "endpoints": {
+      "/openrtb2/auction": { # endpoint
+        "stages": {
+          "entrypoint": { # stage
+            "groups": [
+              {
+                "timeout": 3,  # in milliseconds
+                "hook-sequence": [
+                  {
+                    "modulecode": "modulecode1",
+                    "hookimplcode": "hook1"
+                  },
+                  {
+                    "modulecode": "modulecode2",
+                    "hookimplcode": "hook2"
+                  }
+                ]
+              },{ // this group depends on the results of the first group
+		            "timeout": 5,  # in milliseconds
+		            "hook-sequence": [
+                  {
+                    "modulecode": "modulecode3",
+                    "hookimplcode": "hook3-depends-on-hook1"
+                  }
+		]
+              }
+            ]
+          }
+        }
+      }
+    }
+  }
+  # these hooks are run for all accounts unless overridden by DB config
+  default-account-execution-plan: >
+  {
+   "endpoints": {
+      "/openrtb2/amp": { # endpoint
+        "stages": {
+          "raw-auction-request": { # stage
+            "groups": [
+              {
+                "timeout": 5,
+                "hook-sequence": [
+                  {
+                    "modulecode": "modulecodeA",
+                    "hookimplcode": "hookA"
+                  }
+                ]
+              }
+            ]
+          }
+        }
+      }
+    }
+  }
+```
+
+### 3. Supply the module with configuration
+
+Modules may require configuration at startup or during the request:
+
+- If the module requires config at initialization, its documentation will
+describe where the config file lives and what format it should take.
+- If the module requires runtime config, it should be passed via the account-conig mechanism.
+
+
+## Further Reading
+
++ [Developing a Prebid Server Module](/prebid-server/developers/add-a-module.html)
++ [Prebid Server Features](/prebid-server/features/pbs-feature-idx.html)
diff --git a/prebid-server/pbs-modules/ortb2-blocking.md b/prebid-server/pbs-modules/ortb2-blocking.md
new file mode 100644
index 0000000000..74cfb12388
--- /dev/null
+++ b/prebid-server/pbs-modules/ortb2-blocking.md
@@ -0,0 +1,565 @@
+---
+layout: page_v2
+page_type: pbs-module
+title: Prebid Server ORTB2 Blocking Module
+display_name : ORTB2 Blocking Module
+sidebarType : 5
+---
+
+# ORTB2 Blocking Module
+{:.no_toc}
+
+* TOC
+{:toc }
+
+{: .alert.alert-warning :}
+Currently only available for the Java version of Prebid Server
+
+## Overview
+
+This module helps support bidders that aren't full-service SSPs by allowing
+PBS host companies to configure per-account OpenRTB blocking details. 
+[OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) defines the following 6 attributes available for some kind
+of bid exclusion logic:
+
+1. badv: blocked advertiser domains
+1. bcat: blocked advertiser categories
+1. bapp: blocked advertiser mobile app bundles
+1. btype: blocked creative types (e.g. XHTML)
+1. battr: blocked creative attributes (e.g. audio)
+1. bseat: blocked bidder seat (e.g. agency)
+
+The module supports all of these blocking scenarios except the last: bseat. Prebid uses the 'seat' field in OpenRTB to indicate the biddercode, losing any agency
+information that might have been passed to the bid adapter.
+
+### Features
+
+For each of the supported attributes, there are a range of behaviors that
+can be configured:
+
+- **Configure Blocks**: allows host companies to define blocks globally, per-account, or per-account/bidder combination. This blocking config is sent in the OpenRTB requests to all or specific bidders for consideration in bid determination.
+- **Enforce Blocks**: PBS can reject bids from bidders that don't conform to the blocking lists sent in the request.
+- **Enforce Unknown Values**: for some attributes it may makes sense to reject requests that don't contain a required value. For instance, the publisher may want to drop any bid that doesn't report the advertiser domain.
+- **Deal Overrides**: Private Marketplace deals may have exceptions to standard blocked attributes.
+
+Here's a summary of the features the module supports:
+
+{: .table .table-bordered .table-striped }
+| Scenario | Configure Blocks | Enforce Blocks | Enforce Unknown Values | Deal Overrides |
+|---+---+---+---+---|
+| Advertiser Domains | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Advertiser Categories | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Apps | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+| Banner Types | <img src="/assets/images/icons/icon-check-green.png" width="30"> | | | |
+| Banner Attributes | <img src="/assets/images/icons/icon-check-green.png" width="30"> | <img src="/assets/images/icons/icon-check-green.png" width="30"> | | <img src="/assets/images/icons/icon-check-green.png" width="30"> |
+
+## Configuration
+
+### Execution Plan
+
+This module supports running at two stages:
+
+- bidder-request: this is where outgoing auction requests to each bidder are enriched with the account-specific blocks.
+- raw-bidder-response: this is where incoming bid responses are verified and enforced. If a host-company or account don't want to do any enforcement activities, this part of the module doesn't need to be configured.
+
+We recommend defining the execution plan right in the account config
+so the module is only invoked for specific accounts. See below for an example.
+
+### Global Config
+
+There is no host-company level config for this module.
+
+### Account-Level Config
+
+Here's a general template for the account config:
+```
+{
+    "hooks": {
+      "modules": {
+        "ortb2-blocking": {   // start of this module's config
+          "attributes": {
+            "ATTRIBUTE": {    // badv, bcat, bapp, btype, battr
+              DEFAULT_SETTINGS, 
+              "action-overrides": [{
+                OVERRIDE_SETTING: [{
+                  "conditions": { ... },
+		  // the value below will be the datatype of the SETTING
+                  "override": VALUE
+                }]
+              }]
+            }
+          }
+        }
+      },
+      "execution-plan": {
+        ...
+      }
+    }
+}
+```
+
+The 'ATTRIBUTE' above is one of the 5 blockable entities defined in OpenRTB. A 'SETTING' is a feature this module supports.
+The following sections detail each of the 5 blockable entities.
+
+Here's a detailed example:
+```
+{
+    "hooks": {
+        "modules": {
+            "ortb2-blocking": {
+                "attributes": {
+                    "badv": {
+                        "enforce-blocks": false,
+                        "blocked-adomain": [],
+                        "action-overrides": {
+                            "blocked-adomain": [
+                                {
+                                    "override": [ "example.com" ],
+                                    "conditions": {
+                                        "bidders": [ "bidderA" ]
+                                    }
+                                }
+                            ]
+                        }
+                    },
+                    "bcat": {
+                        "enforce-blocks": false,
+                        "blocked-adv-cat": [],
+                        "action-overrides": {
+                            "blocked-adv-cat": [
+                                {
+                                    "override": [ "IAB7" ],
+                                    "conditions": {
+                                        "bidders": [ "bidderA" ]
+                                    }
+                                }
+                            ]
+                        }
+                    },
+                    "battr": {
+                        "enforce-blocks": false,
+                        "action-overrides": {
+                            "blocked-banner-attr": [
+                                {
+                                    "override": [1,3,8,9,10,13,14,17],
+                                    "conditions": {
+                                        "bidders": [
+                                            "bidderA"
+                                        ]
+                                    }
+                                }
+                            ]
+                        },
+                        "blocked-banner-attr": []
+                    }
+                }
+            }
+        },
+        "execution-plan": {
+            "endpoints": {
+                "/openrtb2/amp": {
+                    "stages": {
+                        "bidder-request": {
+                            "groups": [
+                                {
+                                    "timeout": 5,
+                                    "hook-sequence": [
+                                        {
+                                            "module-code": "ortb2-blocking",
+                                            "hook-impl-code": "ortb2-blocking-bidder-request"
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    }
+                },
+                "/openrtb2/auction": {
+                    "stages": {
+                        "bidder-request": {
+                            "groups": [
+                                {
+                                    "timeout": 5,
+                                    "hook-sequence": [
+                                        {
+                                            "module-code": "ortb2-blocking",
+                                            "hook-impl-code": "ortb2-blocking-bidder-request"
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+```
+
+### Configuration Details
+
+The module supports flexibile definition of behavior surrounding the 5 blocked attributes. Here are the details.
+
+#### Blocked Advertiser Config
+
+This attribute is related to the 'badv' of the request, and the 'adomain' of the response.
+
+{: .table .table-bordered .table-striped }
+| Setting | Description | Data Type | Override Conditions Supported |
+|---+---+---+---|
+| blocked-adomain | List of adomains not allowed to display on this inventory | array of strings | bidders (array of strings), media-types (array of strings). |
+| enforce-blocks | Whether to enforce adomains in responses | boolean | bidders (array of strings), media-types (array of strings) |
+| block-unknown-adomain | Whether to block responses not specifying adomain. Only active if enforce-blocks is true. | bidders (array of strings), media-types (array of strings) |
+| allowed-adomain-for-deals | List of adomains allowed for deals in general or a specific dealid. | array of strings | deal-ids (array of strings). This isn't a true override - values are added to the global. |
+
+Here's an example account config with several scenarios:
+```
+{
+    "hooks": {
+      "modules": {
+        "ortb2-blocking": {   // start of this module's config
+          "attributes": {
+            "badv": {
+              // enforce domain blocks by default
+              "enforce-blocks": true,
+              "block-unknown-adomain": true,
+              // these are the default undesirable domains
+              "blocked-adomain": [ "a.com", "b.com", "c.com" ],
+              // but deals can return this one
+              "allowed-adomain-for-deals": [ "a.com" ],
+              "action-overrides": [{
+                  "blocked-adomain": [{
+                      // c.com allowed on these bidders for video
+                      "conditions": {
+                        "bidders": [ "bidderA", "bidderB" ],
+                        "media-type": [ "video" ]
+                      },
+                      "override": [ "a.com", "b.com" ]
+                    },
+                    {
+                      // more domains blocked for this bidder 
+                      "conditions": {
+                        "bidders": [ "bidderc" ]
+                      },
+                      "override": [ "a.com", "b.com", "c.com", "d.com", "e.com" ]
+                    }
+                  ],
+                  "block-unknown-adomain": [
+                    {
+                      // don't block unnknown for video bids from this bidder
+                      "conditions": {
+                        "bidders": [ "bidderA" ],
+                        "media-type": [ "video" ]
+                      },
+                      "override": false
+                    }
+                  ],
+                  "allowed-adomain-for-deals": [
+                    {
+                      // this deal is for normally blocked domain b.com
+                      "conditions": {
+                        "deal-ids": [ "12345678" ]
+                      },
+                      "override": [ "b.com" ]
+                    }
+                  ]
+                }
+              ]
+            }
+          }
+        }
+      }
+    }
+}
+```
+
+#### Blocked Advertiser Category
+
+This attribute is related to the 'bcat' of the request and 'cat' of the response.
+
+{: .table .table-bordered .table-striped }
+| Setting | Description | Data Type | Override Conditions Supported |
+|---+---+---+---|
+| blocked-adv-cat | List of IAB categories not allowed to display on this inventory | array of strings | bidders (array of strings), media-types (array of strings) |
+| enforce-blocks | Whether to enforce cat in responses | boolean | bidders (array of strings), media-types (array of strings) |
+| block-unknown-adv-cat | Whether to block responses not specifying cat. Only active if enforce-blocks is true. | bidders (array of strings), media-types (array of strings) |
+| allowed-adv-cat-for-deals | List of adomains allowed for deals in general or a specific dealid. | array of strings | deal-ids (array of strings). This isn't a true override - values are added to the global.|
+
+Here's an example account config with several scenarios:
+```
+{
+    "hooks": {
+      "modules": {
+        "ortb2-blocking": {   // start of this module's config
+          "attributes": {
+            "bcat": {
+              // don't enforce blocks
+              "enforce-blocks": false,
+              // block these categories by default
+              "blocked-adv-cat": [ "IAB-1", "IAB-2" ],
+              // deals can return this cat
+              "allowed-adv-cat-for-deals": [ "IAB-1" ],
+              "action-overrides": [ {
+                  "blocked-adv-cat": [
+                    {
+                      // block additional categories for video
+                      "conditions": {
+                        "media-types": [ "video" ]
+                      },
+                      "override": [ "IAB-1", "IAB-2", "IAB-3", "IAB-4" ]
+                    }
+                  ],
+                  "enforce-blocks": [
+                    {
+                      // enforce bcat blocks for this bidder
+                      "conditions": {
+                        "bidders": [ "bidderA" ]
+                      },
+                      "override": true
+                    }
+                  ],
+                  "block-unknown-adv-cat": [
+                    {
+                      // enforce unknown cat for this bidder
+                      "conditions": {
+                        "bidders": [ "bidderA" ]
+                      },
+                      "override": true
+                    }
+                  ],
+                  "allowed-adv-cat-for-deals": [
+                    {
+                      // this deal ID allowed to be this category
+                      "conditions": {
+                        "deal-ids": [ "1111111" ]
+                      },
+                      "override": [ "IAB-2" ]
+                    }
+                  ]
+                }
+              ]
+            }
+          }
+        }
+      }
+    }
+}
+```
+
+#### Blocked App
+
+This attribute is related to the 'bapp' of the request and 'bundle' of the response.
+
+{: .table .table-bordered .table-striped }
+| Setting | Description | Data Type | Override Conditions Supported |
+|---+---+---+---|
+| blocked-app | List of bundles not allowed to display on this inventory | array of strings | bidders (array of strings), media-types (array of strings) |
+| enforce-blocks | Whether to enforce bundles in responses | boolean | bidders (array of strings), media-types (array of strings) |
+| allowed-bapp-for-deals | List of bundles allowed for deals in general or a specific dealid. | array of strings | deal-ids (array of strings). This isn't a true override - values are added to the global. |
+
+Here's an example account config:
+```
+{
+    "hooks": {
+      "modules": {
+        "ortb2-blocking": {   // start of this module's config
+          "attributes": {
+            "bapp": {
+              // don't enforce
+              "enforce-blocks": false,
+              // these bundles blocked by default
+              "blocked-app": [ "app1", "app2" ],
+              "action-overrides": [
+                {
+                  "blocked-app": [
+                    {
+                      // this bidder also blocked for an additional app
+                      "conditions": {
+                        "bidders": [ "bidderA" ]
+                      },
+                      "override": [ "app1", "app2", "app3" ]
+                    }
+                  ]
+                }
+              ]
+            }
+          }
+        }
+      }
+    }
+}
+```
+
+#### Blocked Banner Type
+
+This attribute is related to the 'btype' of the request.
+
+{: .table .table-bordered .table-striped }
+| Setting | Description | Data Type | Override Conditions Supported |
+|---+---+---+---|
+| blocked-banner-type | List of IAB banner types not allowed to display on this inventory | array of int | bidders (array of strings), media-types (array of strings) |
+
+See Table 5.2 in the [OpenRTB 2.5 spec](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for the possible values.
+
+Note: no enforcement is possible because the creative type is not explictly
+part of the response and Prebid Server does not currently contain logic to
+parse creatives to derive the type.
+
+Here's an example account config:
+```
+{
+    "hooks": {
+      "modules": {
+        "ortb2-blocking": {   // start of this module's config
+          "attributes": {
+            "btype": {
+              // block these types for all bidders
+              "blocked-banner-type": [ 3, 4 ],
+              "action-overrides": [
+                {
+                  "blocked-banner-type": [
+                    {
+                      // block an additional type for this bidder
+                      "conditions": {
+                        "bidders": [ "bidderA" ]
+                      },
+                      "override": [ 3, 4, 5 ]
+                    }
+                  ]
+                }
+              ]
+            }
+          }
+        }
+      }
+    }
+}
+```
+
+#### Blocked Banner Attributes
+
+This attribute is related to the 'battr' of the request and 'attr' of the response.
+
+{: .table .table-bordered .table-striped }
+| Setting | Description | Data Type | Override Conditions Supported |
+|---+---+---+---|
+| blocked-banner-attr | List of IAB banner attributes not allowed to display on this inventory | array of int | bidders (array of strings), media-types (array of strings) |
+| enforce-blocks | Whether to enforce attr in responses | boolean | bidders (array of strings), media-types (array of strings) |
+| allowed-banner-attr-for-deals | List of IAB attributes allowed for deals in general or a specific dealid. | array of strings | deal-ids (array of strings). This isn't a true override - values are added to the global. |
+
+See Table 5.3 in the [OpenRTB 2.5 spec](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) for the possible values.
+
+Here's an example account config:
+```
+{
+    "hooks": {
+      "modules": {
+        "ortb2-blocking": {   // start of this module's config
+          "attributes": {
+            "battr": {
+              // don't enforce
+              "enforce-blocks": false,
+              // block these attributes for all bidders
+              "blocked-banner-attr": [ 1, 8, 9, 10 ],
+              "action-overrides": [
+                {
+                  "enforce-blocks": [
+                    {
+                      // enforce the attr block for this bidder
+                      "conditions": {
+                        "bidders": [ "bidderA" ]
+                      },
+                      "override": true
+                    }
+                  ]
+                }
+              ]
+            }
+          }
+        }
+      }
+    }
+}
+```
+## Analytics Tags
+
+There's only one analytics activity defined by this module: "enforce-blocking".
+It's only applied to attributes where `enforce-blocks` is true, which means 'btype' never shows up here. ATag values:
+
+1. for activities[].results[].status **success-block**
+    1. Attributes in the `values` block:
+        1. **bidder**: which bidder triggered the response analysis
+        1. **attributes**: string array indicating 1 or more of the 4 blockable attributes (badv, bcat, battr, bapp) triggered the enforcement action
+        1. **adomain**: array-of-strings. if badv enforcement fired, which domain(s) triggered the action. Could include the empty string for unknown domain.
+        1. **bcat**: array-of-strings. if bcat enforcement fired, which IAB category(s) triggered the action. Could include the empty string for unknown category.
+        1. **bundle**: string. If bapp enforcement fired, which bundle triggered the action.
+        1. **attr**: array-of-ints. If battr enforcement fired, which IAB creative attribute(s) triggered the action.
+    1. Attributes in the `appliedto` block:
+        1. **imp**: the seatbid.bid.impid of the blocked response 
+        1. **bidder**: the biddercode of the blocked response
+1. for activities[].results[].status **success-allow**
+    1. No `values` block
+    1. Attributes in the `appliedto` block:
+        1. **imp**: the seatbid.bid.impid of the blocked response 
+        1. **bidder**: the biddercode of the blocked response
+
+Here's an example analytics tag that might be produced for use in an analytics adapter:
+```
+[{
+   activities: [{
+    name: "enforce-blocking",
+    status: "success",
+    results: [{
+        // bidderA was blocked for both badv and bcat for imp=1
+        status: "success-block",
+        values: { 
+          "attributes": ["badv", "bcat"],
+          "adomain": ["bad.com"],
+          "bcat": ["IAB-7"]
+        },
+        appliedto: {
+          "bidder": "bidderA",
+           imp: ["1"]
+        }
+     },{
+        // the other 3 bids from bidderA were ok
+        status: "success-allow",
+        appliedto: {
+          "bidder": "bidderA",
+          "imp": ["2","3","4"]
+        }
+     },{
+        // scenario: bidderB not blocked at all
+        status: "success-allow",
+        appliedto: {
+          "bidder": "bidderB",
+          "imp": ["1","2","3","4"] }
+     },{
+       // scenario: bidderC blocked on battr and bapp for imp=3
+        status: "success-block",
+        values: { 
+          "app": "com.test",
+          "attr": [2]
+          "attributes": ["bapp", "battr"]
+        },
+        appliedto: {
+          "bidder": "bidderC",
+          "imp": ["3"]
+        }
+     },{
+        // otherwise bidderC's bids were fine
+        status: "success-allow",
+        appliedto: {
+          "bidder": "bidderC",
+          "imp": ["1","2","4"]
+        }
+     }]
+  }]
+}]
+```
+
+## Further Reading
+
+- [Prebid Server Module List](/prebid-server/pbs-modules/index.html)
+- [Building a Prebid Server Module ](/prebid-server/developers/add-a-module.html)
diff --git a/prebid-server/use-cases/pbs-amp.md b/prebid-server/use-cases/pbs-amp.md
index ecd191ed02..d5ec56c52e 100644
--- a/prebid-server/use-cases/pbs-amp.md
+++ b/prebid-server/use-cases/pbs-amp.md
@@ -47,7 +47,7 @@ There are two basic ways of invoking AMP RTC:
     data-slot="/11111/amp_test"
     data-multi-size-validation="false"
     rtc-config='{"vendors": {"prebidrubicon": {"REQUEST_ID": "14062-amp-AMP_Test-300x250"}, "ACCOUNT_ID": "1001"}}'
-    json='{ "targeting": {"site":{"keywords":"article, las vegas","cat":{"blah":"1"},"other-attribute":"other-value","ext":{"data":{"entry_group":["front-page","featured-stories"],"page_type":"AMP"}}},"user":{"gender":"m"},"bidders":["bidderA","bidderB"],"keywords":"las vegas hospitality employees","foo":{"bar":"baz"}}' >
+    json='{ "targeting": {"attr1": "val1", "attr2": "val2"}}' >
   </amp-ad>
 ```
 
@@ -61,13 +61,10 @@ There are two basic ways of invoking AMP RTC:
     type="doubleclick"
     data-slot="/000/amp_test"
     data-multi-size-validation="false"
-    rtc-config='{"urls": ["https://prebid-server-qa.example.com/openrtb2/amp?tag_id=11111&w=300&h=50&slot=%2F000%2Famp_test&targeting=%7B%22site%22%3A%20%7B%22key1%22%3A%20%22val1%22%7D%2C%20%22user%22%3A%20%7B%22key2%22%3A%20%22val2%22%7D%7D%7D&purl=encoded_page_url&account=333&gdpr_consent=encoded_cmp_consent_string"]
+    rtc-config='{"urls": ["https://prebid-server-qa.example.com/openrtb2/amp?tag_id=11111&w=300&h=50&slot=%2F000%2Famp_test&purl=encoded_page_url&account=333&gdpr_consent=encoded_cmp_consent_string"]
   </amp-ad>
 ```
 
-{: .alert.alert-info :}
-First party data may be passed in on the "targeting" field. See the [`/openrtb2/amp` endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) documentation for more details.
-
 ### Prebid Server Receives the AMP Request
 
 Prebid Server's first job on the [/openrtb2/amp endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) is to create an OpenRTB block to pass to the adapters.
@@ -76,15 +73,8 @@ Prebid Server's first job on the [/openrtb2/amp endpoint](/prebid-server/endpoin
 
 The `tag_id` in the AMP URL is used to look up the bulk of the request. If the lookup fails, the request can't proceed. If it's successful, the
 next step is to parse the AMP query string parameters and place them
-in the appropriate OpenRTB locations:
-
-- w added into the openrtb packet at imp.banner.format[0].w
-- h added into the openrtb packet at imp.banner.format[0].h
-- ms (multiple-sizes) - takes values like "970x90, 728x90". Parse sizes and add to imp.banner.format array
-- ow, oh - override width, override height
-- curl added as site.page
-- slot added as imp.tagid
-- timeout added as tmax
+in the appropriate OpenRTB locations. See the [AMP endpoint documentation](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html)
+for details.
 
 So for the /openrtb2/amp URL above, the resulting OpenRTB might be:
 ```
@@ -116,17 +106,7 @@ So for the /openrtb2/amp URL above, the resulting OpenRTB might be:
             "id": "0000"
         },
         "ext": {
-            "amp": 1,
-            "data": {
-                "key1": "val1"
-            }
-        }
-    },
-    "user": {
-        "ext": {
-            "data": {
-                "key2": "val2"
-            }
+            "amp": 1
         }
     },
     "device": {
@@ -169,7 +149,7 @@ Only a few dynamic parameters on the query string are integrated into the result
 #### First Party Data Support
 
 Ad Server targeting data passed in through the [`/openrtb2/amp`](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) endpoint is merged
-into the OpenRTB JSON in imp[].ext.data for each bidder if permissions allow.
+into the OpenRTB JSON in imp[].ext.data.
 
 #### Auction and Response
 
@@ -180,7 +160,6 @@ From here, the header bidding auction is mostly the same as it is for Prebid.js:
 1. Collect responses
 1. Prepare the response
 
-
 ### AMP Gets the Response
 
 AMP RTC endpoints can only respond with targeting, not OpenRTB. The
@@ -216,4 +195,5 @@ into an iframe for display.
 
 ## Further Reading
 
-- [AMP Support](/formats/amp.html)
+- [Prebid AMP Support](/formats/amp.html)
+- [PBS AMP endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html)
diff --git a/prebid-server/versions/pbs-versions-go.md b/prebid-server/versions/pbs-versions-go.md
index 9f6a45ea99..d2de934923 100644
--- a/prebid-server/versions/pbs-versions-go.md
+++ b/prebid-server/versions/pbs-versions-go.md
@@ -28,7 +28,7 @@ The Go version of Prebid Server is for those who:
 
 ## Features
 
-PBS-Go has all the core PBS features, but does have a backlog of newer [features](/prebid-server/features/pbs-feature-idx.html), so you'll want to look over the list to be familiar with the differences.
+We recommend you review the [feature comparison list](/prebid-server/features/pbs-feature-idx.html) to familiarize yourself with the differences between this and PBS-Java in deciding which version is right for you.
 
 ## Code Repositories
 
diff --git a/prebid-server/versions/pbs-versions-java.md b/prebid-server/versions/pbs-versions-java.md
index d024930727..7f68600244 100644
--- a/prebid-server/versions/pbs-versions-java.md
+++ b/prebid-server/versions/pbs-versions-java.md
@@ -27,7 +27,7 @@ The Java version of Prebid Server is for those who:
 
 ## Features
 
-PBS-Java look over the [feature list](/prebid-server/features/pbs-feature-idx.html) to be familiar with the differences.
+We recommend you review the [feature comparison list](/prebid-server/features/pbs-feature-idx.html) to familiarize yourself with the differences between this and PBS-Go in deciding which version is right for you.
 
 ## Code Repositories
 
diff --git a/prebid-video/video-getting-started.md b/prebid-video/video-getting-started.md
index 82bc941d97..fbc05431c3 100644
--- a/prebid-video/video-getting-started.md
+++ b/prebid-video/video-getting-started.md
@@ -137,7 +137,7 @@ And this is where setups for instream and outstream diverge. Please follow one o
 Be sure to note the setting for price granularity.  You might need to set up a custom price granularity. (See “Custom CPM Bucket Sizing” under [Price Granularity](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity). Or, if you’re monetizing both banner and video inventory with Prebid, you might need to define format-specific price granularity settings through  [mediaTypePriceGranularity](/dev-docs/publisher-api-reference/setConfig.html#setConfig-MediaType-Price-Granularity).
 
 {: .alert.alert-info :}
-**Prebid Server**  If you’re using Prebid Server, you also need to configure your server-to-server bidder adapters. See [Getting Started with Prebid Server]({{site.github.url}}/dev-docs/get-started-with-prebid-server.html#step-4-configure-s2s-bidder-adapters) for details and examples.
+**Prebid Server**  If you’re using Prebid Server, you also need to configure your server-to-server bidder adapters. See [Getting Started with Prebid Server](/overview/prebid-server-overview.html).
 
 ### Examples
 
diff --git a/prebid/prebidjs.md b/prebid/prebidjs.md
index 224260da91..8dd597b47f 100644
--- a/prebid/prebidjs.md
+++ b/prebid/prebidjs.md
@@ -9,7 +9,7 @@ sidebarType: 1
 
 # What is Prebid.js?
 
-Prebid.js is a feature-rich header bidding platform for the web, including more than 200 demand sources and 15 analytics adapters. It supports currency conversion, GDPR, common ID systems, and multiple ad servers.
+Prebid.js is a feature-rich header bidding platform for the web, including more than 300 demand sources and 50 analytics adapters. It supports currency conversion, GDPR, common ID systems, and multiple ad servers.
 
 ## How Does Prebid.js Work?
 
@@ -44,9 +44,9 @@ We want Prebid.js Core to be fast, fair, and open because it represents the head
 
 The Prebid.js Adapters plug into Prebid.js Core and are meant to be interchangeable depending on who the publisher wants to work with. There are two types of adapters: bidder and analytics.
 
-Bidder Adapters are supposed to represent the SSPs & Exchanges you want to work with. There are currently over 200 bidder adapters. This set of working header bidding integrations is part of what makes Prebid.js so special. Each company maintains their own Prebid.js adapter to provide the freshest code for publishers, rather than a proprietary wrapper solution trying to reverse engineer another company's adapter. It's a win-win for everyone.
+Bidder Adapters are supposed to represent the SSPs & Exchanges you want to work with. There are currently over 300 bidder adapters. This set of working header bidding integrations is part of what makes Prebid.js so special. Each company maintains their own Prebid.js adapter to provide the freshest code for publishers, rather than a proprietary wrapper solution trying to reverse engineer another company's adapter. It's a win-win for everyone.
 
-Analytics adapters offer the ability to learn more about latency, revenues, bid rates, etc. Please see our [analytics page]({{site.github.url}}/dev-docs/integrate-with-the-prebid-analytics-api.html) for more information.
+Analytics adapters offer the ability to learn more about latency, revenues, bid rates, etc. Please see our [analytics page](/dev-docs/integrate-with-the-prebid-analytics-api.html) for more information.
 
 ## Prebid.js Modules
 
@@ -54,17 +54,17 @@ Prebid.js Modules also plug into the Prebid.js Core. They add functionality not
 in the Core that not every publisher needs. Example modules:
 
 + GDPR support (the [consentManagement]({{site.baseurl}}/dev-docs/modules/consentManagement.html) module)
-+ currency conversion (the [currency]({{site.baseurl}}/dev-docs/modules/currency.html) module)
++ Currency conversion (the [currency]({{site.baseurl}}/dev-docs/modules/currency.html) module)
 + Server-to-server testing (the [s2sTest]({{site.baseurl}}/dev-docs/modules/s2sTesting.html) module)
-+ ... others
++ ... [many others](/dev-docs/modules/index.html)
 
 ## Cookies and Local Storage
 
-On behalf of publishers or third-parties, Prebid.js may set cookies or local storage in your browser. These are the first party cookies it can set on behalf of publishers, meaning that consent is not checked:
+On behalf of publishers or third-parties, Prebid.js may set cookies or local storage in your browser. These are the first party cookies it can set on behalf of publishers:
 - prebid.cookieTest - used to verify whether other cookies should be set.
 - _pbjs_userid_consent_data - used to make consent data conveniently available through various modules.
 
-All other cookies and local storage (including those set by Prebid.org-owned modules like [SharedId](/dev-docs/modules/userId.html#shared-id-user-id-submodule)) are subject to privacy regulations such as GDPR.
+All other cookies and local storage (including those set by Prebid.org-owned modules like [SharedId](/identity/sharedid.html) are subject to privacy regulations such as GDPR.
 
 ## Further Reading
 
diff --git a/prebid/prebidjsReleases.md b/prebid/prebidjsReleases.md
index 23b022efc7..7aaa82aaa8 100644
--- a/prebid/prebidjsReleases.md
+++ b/prebid/prebidjsReleases.md
@@ -16,6 +16,16 @@ The table below is a summary of feature changes and important bug fixes in core
 {: .table .table-bordered .table-striped }
 | Release | Feature |
 | --- | --- |
+| 5.9 | Support numeric ad targeting keys |
+| 5.8 | [GPT Pre-Auction module](/dev-docs/modules/gpt-pre-auction.html) supports mcmEnabled flag |
+| 5.3 | add AD_RENDER_SUCCEEDED event |
+| 5.0 | See [Prebid.js 5.0 blog](https://prebid.org/blog/prebid-5-0-release/) |
+| 4.43 | Support [allowSendAllBidsTargetingKeys](/dev-docs/publisher-api-reference/setConfig.html#setConfig-targetingControls) option for control over which keys are sent to the ad server |
+| 4.41 | Support [suppressStaleRender](/dev-docs/publisher-api-reference/setConfig.html#auction-options) option |
+| 4.40 | First Party Data [enrichment](/dev-docs/modules/enrichmentFpdModule.html) and [validation](/dev-docs/modules/validationFpdModule.html) modules are introduced |
+| 4.39 | Prebid Core: removed size check on native icons and image assets |
+| 4.38 | PBS Bid Adapter allows stored impression configuration |
+| 4.37 | PBS bid adapter adds support for non-purpose1 consent domains |
 | 4.36 | Introduced pbjs.installedModules array |
 | 4.35 | Introduced pbjs.pbjs.getHighestUnusedBidResponseForAdUnitCode function |
 | 4.34 | Bug fix: canBidderRegisterSync ignoring iframe sync disabled by default |
diff --git a/troubleshooting/pbs-troubleshooting.md b/troubleshooting/pbs-troubleshooting.md
index dba1eabb88..04d1edd5a8 100644
--- a/troubleshooting/pbs-troubleshooting.md
+++ b/troubleshooting/pbs-troubleshooting.md
@@ -33,14 +33,24 @@ POST https://prebid-server.rubiconproject.com/openrtb2/auction
 
 If you're invoking Prebid Server from Prebid.js, turn on the OpenRTB `test` flag from Prebid.js using one of these options:
 
-1) Add **?pbjs_debug=true** to the URL of the page.
+1) Add **?pbjs_debug=true** to the URL of the page. This will cause the pbsBidAdapter to send `ext.prebid.debug:1` to PBS, which will turn on additional debugging.
 
-2) Add the following `setConfig` to the page:
+2) Add the following `setConfig` to the page to get the same result:
 
 {% highlight bash %}
     pbjs.setConfig({"debug":true});
 {% endhighlight %}
 
+3) If instead of ext.prebid.debug you would like to set the OpenRTB 2.5 'test' flag, you can set that using the 'ortb2' approach:
+
+{% highlight bash %}
+    pbjs.setConfig({
+        "ortb2": {
+            "test":1
+        }
+    });
+{% endhighlight %}
+
 ### Invoked from AMP
 
 If you're invoking Prebid Server from AMP, you'll be unable to get debug info from the AMP page. However, you can capture the Prebid Server AMP call and append `&debug=1` to it:
diff --git a/troubleshooting/troubleshooting-guide.md b/troubleshooting/troubleshooting-guide.md
index 8254dd21a7..4871292518 100644
--- a/troubleshooting/troubleshooting-guide.md
+++ b/troubleshooting/troubleshooting-guide.md
@@ -106,7 +106,7 @@ To see all of the winning bids, open your browser console and type `pbjs.getAllW
 Keep in mind that any bid responses that come back after the [timeout you configured](/dev-docs/getting-started.html#set-the-ad-server-timeout) during setup will not be sent to the ad server.
 
 {: .pb-alert .pb-alert-tip :}
-You can also print this data to the console in [table format](/dev-docs/troubleshooting-tips.html#see-all-bids-in-the-console) for easier reading.
+You can also print this data to the console in [table format](#see-all-bids-in-the-console) for easier reading.
 <hr>
 
 ## Modify bid responses for testing
@@ -182,7 +182,7 @@ Here's another scenario using the 'debugging' feature described in the previous
 
 This section covers cases in which a particular server-side bidder doesn't always respond with a bid, or you want to try specific bid CPM values to verify line item setup.
 
-If you're using Prebid Server (i.e. the [s2sConfig](/dev-docs/publisher-api-reference/setconfig#setConfig-Server-to-Server) option), you can force it to respond with a particular canned response on any page by defining a storedAuctionResponse ID on the javascript console:
+If you're using Prebid Server (i.e. the [s2sConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Server-to-Server) option), you can force it to respond with a particular canned response on any page by defining a storedAuctionResponse ID on the javascript console:
 
 ```javascript
 javascript console> pbjs.setConfig({
@@ -217,12 +217,12 @@ Open your browser console and type `pbjs.getBidResponses();` to see a list of th
 To see all of the winning bids, open your browser console and type [`pbjs.getAllWinningBids();`](/dev-docs/publisher-api-reference/getAllWinningBids.html).
 
 {: .alert.alert-danger :}
-Keep in mind that any bid responses that come back after [the timeout you configured during setup]({{site.github.url}}/dev-docs/getting-started.html#set-the-ad-server-timeout) will not be sent to the ad server.
+Keep in mind that any bid responses that come back after [the timeout you configured during setup](/dev-docs/getting-started.html#set-the-ad-server-timeout) will not be sent to the ad server.
 
 {: .alert.alert-success :}
-You can also [print this data to the console in table format]({{site.baseurl}}/dev-docs/troubleshooting-tips.html#see-all-bids-in-the-console) for easier reading.
+You can also [print this data to the console in table format](#see-all-bids-in-the-console) for easier reading.
 
-![pbjs.getBidResponses() in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/bids.png "pbjs.getBidResponses()"){: .pb-lg-img :}
+![pbjs.getBidResponses() in browser console](/assets/images/overview/prebid-troubleshooting-guide/bids.png "pbjs.getBidResponses()"){: .pb-lg-img :}
 
 <hr>
 
@@ -232,13 +232,13 @@ To print information about all of the bids that come in to the Console on any pa
 
 Open the Chrome Dev Tools.  In the **Sources** tab, next to **Content Scripts**, click the **>>** button and you can add **Snippets**:
 
-![View Snippets in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
+![View Snippets in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
 
 <br />
 
 Right-click to add a **New** snippet:
 
-![Add New Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
+![Add New Snippet in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
 
 <br />
 
@@ -296,13 +296,13 @@ Paste in the following code using Control-V (or Command-V on Mac), and give the
 
 Right-click the snippet and choose **Run**:
 
-![Run a Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
+![Run a Snippet in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
 
 <br />
 
 Check the output in Console to see the bids:
 
-![See Snippet Output in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
+![See Snippet Output in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
 
 <hr>
 
@@ -312,13 +312,13 @@ To print information about all of the winning bids that come in to the Console o
 
 Open the Chrome Dev Tools.  In the **Sources** tab, next to **Content Scripts**, click the **>>** button and you can add **Snippets**:
 
-![View Snippets in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
+![View Snippets in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/01-view-snippets.png){: .pb-sm-img :}
 
 <br />
 
 Right-click to add a **New** snippet:
 
-![Add New Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
+![Add New Snippet in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/02-add-new-snippet.png){: .pb-sm-img :}
 
 <br />
 
@@ -351,13 +351,13 @@ if (output.length) {
 
 Right-click the snippet and choose **Run**:
 
-![Run a Snippet in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
+![Run a Snippet in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/03-run-snippet.png){: .pb-sm-img :}
 
 <br />
 
 Check the output in Console to see the bids (note that this screenshot shows the output from "see all bids" but they're very similar):
 
-![See Snippet Output in Dev Tools]({{site.github.url}}/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
+![See Snippet Output in Dev Tools](/assets/images/dev-docs/troubleshooting-tips/04-snippet-output.png){: .pb-sm-img :}
 
 <hr>
 
@@ -399,7 +399,7 @@ To make sure your ad server is set up correctly, answer the following questions:
 
 + **Is there other remnant inventory in the ad server with a higher CPM that is winning?** To test for this, you may want to use a test creative set up within a bidder partner that has a high CPM or create artificial demand with a [bidCPMadjustment](/dev-docs/publisher-api-reference/bidderSettings.html).
 
-+ **Have you set up all of the line items in the ad server to match the [setPriceGranularity setting]({{site.github.url}}/dev-docs/examples/custom-price-buckets.html) within Prebid.js?**  All of the line items that correspond to your price granularity settings must be set up in your ad server.  When there are gaps in the price granularity of your line item setup, bids will be reduced according to the size of the gap.  For example, with [dense granularity](/dev-docs/publisher-api-reference/setConfig.html#denseGranularityBucket), a $3.32 bid will be sent to the ad server as $3.30.
++ **Have you set up all of the line items in the ad server to match the [setPriceGranularity setting](/dev-docs/examples/custom-price-buckets.html) within Prebid.js?**  All of the line items that correspond to your price granularity settings must be set up in your ad server.  When there are gaps in the price granularity of your line item setup, bids will be reduced according to the size of the gap.  For example, with [dense granularity](/dev-docs/publisher-api-reference/setConfig.html#denseGranularityBucket), a $3.32 bid will be sent to the ad server as $3.30.
 
 <hr>
 
@@ -413,7 +413,7 @@ When a prebid line item wins the ad server's auction, a `renderAd` event will be
 
 When this event is logged, it shows that Prebid.js has requested to render the ad from the winning bidder partner, and that this partner's bid has won both the Prebid and ad server auctions.
 
-![renderAd event in browser console]({{site.github.url}}/assets/images/overview/prebid-troubleshooting-guide/render-ad.png "renderAd event in browser console"){: .pb-lg-img :}
+![renderAd event in browser console](/assets/images/overview/prebid-troubleshooting-guide/render-ad.png "renderAd event in browser console"){: .pb-lg-img :}
 
 <hr>
 
@@ -425,7 +425,7 @@ The following parameters in the `bidResponse` object are common across all bidde
 | Name     | Type    | Description                                                                                                                                                       | Example                                                                 |
 |----------+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------|
 | `bidder` | String  | Unique bidder code used by ad server's line items to identify the bidder                                                                                          | `"appnexus"`                                                            |
-| `adId`   | String  | Unique identifier of a bid creative. Used by the line item's creative as in [this example]({{site.baseurl}}/adops/send-all-bids-adops.html#step-3-add-a-creative) | `"123"`                                                                 |
+| `adId`   | String  | Unique identifier of a bid creative. Used by the line item's creative as in [this example](/adops/send-all-bids-adops.html#step-3-add-a-creative) | `"123"`                                                                 |
 | `pbLg`   | String  | Low granularity price bucket: $0.50 increment, capped at $5, floored to 2 decimal places (0.50, 1.00, 1.50, ..., 5.00)                                            | `"1.50"`                                                                |
 | `pbMg`   | String  | Medium granularity price bucket: 0.10 increment, capped at $20, floored to 2 decimal places (0.10, 0.20, ..., 19.90, 20.00)                                       | `"1.60"`                                                                |
 | `pbHg`   | String  | High granularity price bucket: 0.01 increment, capped at $20, floored to 2 decimal places (0.01, 0.02, ..., 19.99, 20.00)                                         | `"1.61"`                                                                |
@@ -484,6 +484,10 @@ function auctionOptionsLogging() {
         console.log(`Auction Options: Auction End! Timed Out! Bidders: ${Array.from(new Set(timedOutBidders.map(each => each.bidder))).join(',')} - ${auctionId}`);
     })
 
+    pbjs.onEvent('bidderError', { error, bidderRequest } => {
+        console.log(`Auction Error: Bidder ${bidderRequest.bidderCode} responded with ${error.status} ${error.statusText} - ${bidderRequest.auctionId}`);
+    })
+
     pbjs.onEvent('auctionEnd', auction => {
         let auctionId = auction.bidderRequests.length > 0 ? auction.bidderRequests[0].auctionId : 0
         let auctionStart = auction.bidderRequests.length > 0 ? auction.bidderRequests[0].auctionStart : 0
