diff --git a/packages/htmljs/README-old.md b/packages/htmljs/README-old.md
deleted file mode 100644
index 499b37832a..0000000000
--- a/packages/htmljs/README-old.md
+++ /dev/null
@@ -1,239 +0,0 @@
-# HTMLjs
-
-A small library for expressing HTML trees in a concise
-syntax. This library is used at compile time and run time by Meteor UI.
-
-```
-var UL = HTML.UL, LI = HTML.LI, B = HTML.B;
-
-HTML.toHTML(
- UL({id: 'mylist'},
- LI({'class': 'item'}, "Hello ", B("world"), "!"),
- LI({'class': 'item'}, "Goodbye, world")))
-```
-
-```
-
` in templates.
-
-`HTML.evaluateDynamicAttributes(attrs, parentComponent)` - Returns the final attributes dictionary for a tag after interpreting the `$dynamic` property, if present. Takes a tag's `attrs` property and a `parentComponent` (used to instantiate any components in the attributes). `attrs` may be null.
-
-`tag.evaluateDynamicAttributes(parentComponent)` - Shorthand for `HTML.evaluateDynamicAttributes(tag.attrs, parentComponent)`.
-
-`HTML.isNully(value)` - Returns true if `value` is a nully value, i.e. one of `null`, `undefined`, `[]`, or an array of nully values.
-
-`HTML.evaluate(node, parentComponent)` - Calls all functions and instantiates all components in an HTMLjs tree.
-
-## toHTML and toText
-
-`HTML.toHTML(node, parentComponent)` - Converts the HTMLjs content `node` to an HTML string, using `parentComponent` as the parent scope pointer when instantiating components.
-
-`HTML.toText(node, textMode, parentComponent)` - Converts the HTMLjs content `node` into text, suitable for being included as part of an attribute value or textarea, for example. `node` must not contain Tags or Comments, but may contain CharRefs, functions, and components. The required argument `textMode` specifies what sort of text to generate, which affects how charater references are handled and which characters are escaped.
-
-* `HTML.TEXTMODE.STRING` - JavaScript string suitable for `document.createTextNode` or `element.setAttribute`. Character references are replaced by the characters they represent. No escaping is performed.
-
-* `HTML.TEXTMODE.ATTRIBUTE` - HTML string suitable for a quoted attribute. Character references are included in raw HTML form (i.e. `&foo;`). `&` and `"` are escaped when found in strings in the HTMLjs tree.
-
-* `HTML.TEXTMODE.RCDATA` - HTML string suitable for the content of a TEXTAREA element, for example. (RCDATA stands for "replaced character data" as in the HTML syntax spec.) Character references are included in raw HTML form. `&` and `<` are escaped when found in strings in the HTMLjs tree.
-
-> The reason to perform the escaping as part of `HTML.toText` rather than as a post-processing step is in order to support `HTML.CharRef`, allowing the HTML author's choice of character reference encoding to be passed through. If we only had `STRING` mode, we would lose the original form of the character references. If we only had `RCDATA` mode, say, we would have to interpret the character references at runtime to use the DOM API. On a related note, we don't allow `HTML.Raw` because character references are the only "raw" thing there is in text mode (and, again, we don't want to interpret them at runtime). `HTML.CharRef` is sort of like a one-character version of `Raw`.
-
-## Name Utilities
-
-All of these functions take case-insensitive input.
-
-`HTML.properCaseTagName(tagName)` - Case-convert a tag name for inclusion in HTML or passing to `document.createElement`. Most tags belong in lowercase, but there are some camel-case SVG tags. HTML processors must know the proper case for tag names, because HTML is case-insensitive but the DOM is sometimes case-sensitive.
-
-`HTML.properCaseAttributeName(name)` - Case-convert an attribute name for inclusion in HTML or passing to `element.setAttribute`. See `HTML.properCaseTagName`.
-
-`HTML.isValidAttributeName(name)` - Returns true if `name` conforms to a restricted set of legal characters known to work both in HTML and the DOM APIs. Allows at least ASCII numbers and letters, hyphens, and underscores, where the first character can't be a number or a hyphen.
-
-`HTML.isKnownElement(tagName)` - Returns true if `tagName` is a known HTML/HTML5 element, excluding SVG and other foreign elements.
-
-`HTML.isKnownSVGElement(tagName)` - Returns true if `tagName` is a known SVG element.
-
-`HTML.isVoidElement(tagName)` - Returns true if `tagName` is a known void element such as `BR`, `HR`, or `INPUT`. Void elements are output as `
` instead of `
`. Note that neither HTML4 nor HTML5 has true self-closing tags (except when parsing SVG). `
` is the same as `
` and `
` is the same as `
`. It was only the now-abandoned XHTML standard that said otherwise, which was a backwards-incompatible change. Modern browsers refer to the list of void elements instead.
-
-`HTML.asciiLowerCase(str)` - "ASCII-lowercases" `str`, converting `A-Z` to `a-z`. The case-insensitive parts of the HTML spec use this operation for case folding.
-
diff --git a/packages/htmljs/README.md b/packages/htmljs/README.md
index f2f3e83d0f..c4cc3e22bb 100644
--- a/packages/htmljs/README.md
+++ b/packages/htmljs/README.md
@@ -157,6 +157,7 @@ instances of a class -- so-called "constructed objects" (see
from the vanilla JS objects that represent attributes dictionaries
when constructing Tags.
+Functions are also considered foreign objects.
## HTML.getTag(tagName)
diff --git a/packages/htmljs/html.js b/packages/htmljs/html.js
index dba72be9fc..1b1281b47b 100644
--- a/packages/htmljs/html.js
+++ b/packages/htmljs/html.js
@@ -227,6 +227,8 @@ var Attrs = HTML.Attrs = function (/*attrs dictionaries*/) {
* `HTML.isConstructedObject`) -- so that they can be distinguished
* from the vanilla JS objects that represent attributes dictionaries
* when constructing Tags.
+ *
+ * Functions are also considered foreign objects.
*/
/**