diff --git a/xmlutils/README b/xmlutils/README
new file mode 100644
index 0000000..038db25
--- /dev/null
+++ b/xmlutils/README
@@ -0,0 +1,34 @@
+xmlutils provides a few commands for working with xml documents. xmlkv and xpath can accomplish most tasks, these are simply alternatives.
+
+These commands will work on a field called "xml" if found, otherwise _raw.
+
+xmlprettyprint
+xmlprettyprint does what you would expect, pretty printing the xml.
+
+xmlsplit
+xmlsplit splits nodes into new events, copying other fields on the event to the new events.
+
+Examples:
+Given this xml:
+foobar
+
+xmlsplit field="b"
+will create two events:
+foo bar
+
+xmlkvrecursive
+xmlkvrecursive recursively builds fields from the tag and attribute names. The optional boolean flatten determines how repeated fields are treated. By default, repeated field names will be appended into a multi-value field. With flatten="true", new fields will be created.
+
+Examples:
+sourcetype=* | head 1 | eval _raw="foobar" | xmlkvrecursive
+produces:
+a-la = sdf a_b = [foo,bar]
+
+sourcetype=* | head 1 | eval _raw="foobar" | xmlkvrecursive flatten=true
+produces:
+a-la = sdf a_b = foo a_b[2](http://splunkbase.splunk.com/wiki/2) = bar
+
+Most of the time, xpath or xmlkv would be more appropriate. This command is useful if you need to extract multiple fields that are not extracted easily using one of those commands.
+
+xmlstripdeclaration
+xmlstripdeclaration removes the :": {
+# "version": "*",
+# "package": "",
+# "optional": [true|false]
+# }
+# }
+#
+# Lists the inputs that belong on the search head rather than forwarders
+# "tasks": []
+#
+# Lists the possible input groups with app dependencies, and inputs that should be included
+# "inputGroups": {
+# "": {
+# "requires": {
+# ":": [""]
+# },
+# "inputs": [""]
+# }
+# }
+#
+# Lists the app IDs that cannot be installed on the system alongside this app
+# "incompatibleApps": {
+# ":": ""
+# }
+#
+# Specify the platform version requirements for this app
+# "platformRequirements": {
+# "splunk": {
+# "Enterprise": ""
+# }
+# }
+#
+# Lists the supported deployment types this app can be installed on
+# "supportedDeployments": ["*" | "_standalone" | "_distributed" | "_search_head_clustering"]
+#
+# Lists the targets where app can be installed to
+# "targetWorkloads": ["*" | "_search_heads" | "_indexers" | "_forwarders"]
+#
diff --git a/xmlutils/default/commands.conf b/xmlutils/default/commands.conf
index 568a04a..7a78db4 100644
--- a/xmlutils/default/commands.conf
+++ b/xmlutils/default/commands.conf
@@ -1,10 +1,12 @@
[xmlkvrecursive]
+python.version = python3
filename = xmlkvrecursive.py
retainsevents = true
overrides_timeorder = false
streaming = true
[xmlsplit]
+python.version = python3
filename = xmlsplit.py
retainsevents = true
overrides_timeorder = false
@@ -12,6 +14,7 @@ run_in_preview = false
streaming = true
[xmlprettyprint]
+python.version = python3
filename = xmlprettyprint.py
retainsevents = true
overrides_timeorder = false
@@ -19,6 +22,7 @@ run_in_preview = false
streaming = true
[xmlstripdeclaration]
+python.version = python3
filename = xmlstripdeclaration.py
retainsevents = true
overrides_timeorder = false