diff --git a/virtdata-userlibs/src/main/resources/docs/category_blurbs/funcref_collections.md b/virtdata-userlibs/src/main/resources/docs/category_blurbs/funcref_collections.md
index 7755a6609..9895e8fb3 100644
--- a/virtdata-userlibs/src/main/resources/docs/category_blurbs/funcref_collections.md
+++ b/virtdata-userlibs/src/main/resources/docs/category_blurbs/funcref_collections.md
@@ -8,3 +8,85 @@ These functions often take the form of a higher-order function, where
the inner function definitions are called to determine the size of
the collection, the individual values to be added, etc.
+For each type of collection, there exists multiple forms which allow you to control how the provided
+function arguments are used to set the values into the collection.
+
+## Sized or Pair-wise functions
+
+Any function in this category with `Sized` occuring in its name must be initialized with a sizing
+function as an argument. For example, `ListSized(Mod(5),NumberNameToString())` will create a list
+which is sized by the first function -- a list between 0 and 4 elements in this case. With an input
+value of `3L`, the resulting List will contain 3 elements. With an input of `7L`, it will contain 2
+elements.
+
+Alternately, when a function does *not* contain `Sized` in its name, the arguments provided are used
+as pair-wise mapping functions to the elements in the resulting collection.
+
+Simply put, a Sized function will always require a sizing function as the first argument.
+
+## Stepped or Hashed or Same
+
+Any function in this category which contains `Stepped` in its name will automatically increment the
+input value used for each element in the collection. For example
+`ListStepped(NumberNameToString(),NumberNameToString())` will always creat a two-element List, but
+the inputs to the provided functions will be i+0, i+1, where i is the input value to the ListStepped
+function.
+
+Alternately, any function in this category which contains `Hashed` in its name will automatically
+hash the input value used for each element. This is useful when you want to create values within a
+collection that vary significantly with respect of their common seed value. For example,
+`ListHashed(NumberNameToString(),NumberNameToString(),NumberNameToString())` will always provide a
+three element List with values that are not obviously related to each other. For each additional
+element added to the collection, the previous input is hashed, so there is a relationship, but it
+will not be obvious nor discernable for most testing purposes.
+
+If neither `Stepped` nor `Hashed` occurs in the function name, then every element function
+gets the exact value given to the main function.
+
+## Overview of functions
+
+All of the useful collection binding functions follow the same basic patterns above.
+
+### List Functions**
+
+| | Same Input | Stepped Input| Hashed Input |
+|---------------|----------|--------|----------|
+| **Pair-wise** | ListFunctions(...)1 | ListStepped(...) | ListHashed(...) |
+| **Sized** | ListSized(...) | ListSizedStepped(...) | ListSizedHashed(...) |
+
+(1) This name was chosen to avoid clashing with the existing `List(...)` function.
+
+### Set Functions
+
+The values produced by the provided element functions for Sets do not check for duplicate values.
+This means that you must ensure that your element functions yield distinct values to insert into
+the collection as it is being built if you want to have a particular cardinality of values in your
+collection. Overwrites are allowed, although they may not be intended in most cases.
+
+| | Same Input | Stepped Input | Hashed Input |
+| --- | --- | --- | --- |
+| **Pair-wise** | SetFunctions(...)2 | SetStepped(...) | SetHashed(...) |
+| **Sized** | SetSized(...) | SetSizedStepped(...) | SetSizedHashed(...) |
+
+(2) This name was chosen to avoid clashing with the existing `Set(...)` function.
+
+### Map Functions
+
+Map functions work much like set and list functions except for one key difference. When the pair-wise
+forms are used, the key and value functions are taken as even-odd pairs. For example
+`MapFunctions(NumberNameToString(),Identity())` will produce a single element map with a key like "four",
+and a value like 4L, except that the value will be auto-boxed to a Long type.
+
+Just as with Sets, you must take care that your element functions for the key values are distinct
+as needed to avoid ovewrites. Overwrites are allowed, although they may not be intended in most cases.
+
+| | Same Input | Stepped Input | Hashed Input |
+| --- | --- | --- | --- |
+| **Pair-wise** | MapFunctions(...)3 | MapStepped(...) | MapHashed(...) |
+| **Sized** | MapSized(...) | MapSizedStepped(...) | MapSizedHashed(...) |
+
+(3) This name was chosen to avoid clashing with the existing `Map(...)` function.
+
+
+
+