diff --git a/setup/library/act_origin.py b/setup/library/act_origin.py
new file mode 100644
index 0000000..4fdf224
--- /dev/null
+++ b/setup/library/act_origin.py
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+
+import json
+import os
+import requests
+import sys
+import traceback
+
+from ansible.module_utils.basic import AnsibleModule
+from auraclienttools import LCDNAPI, LCDNFault
+
+def main():
+    module = AnsibleModule(
+        argument_spec = dict(
+            url       = dict(required=True, type='str'),
+            service_type = dict(default="HyperCache", type="str"),
+            content_provider = dict(required=True, type="str"),
+
+            state     = dict(required=True, type='str', choices=["present", "absent"]),
+            force     = dict(default=False, type="bool"),
+            username  = dict(required=True, type='str'),
+            password  = dict(required=True, type='str'),
+            hostname  = dict(required=True, type='str'),
+            plc_name  = dict(required=True, type='str'),
+        )
+    )
+
+    credentials = {"username": module.params["username"],
+                   "password": module.params["password"],
+                   "hostname": module.params["hostname"],
+                   "plc_name": module.params["plc_name"]}
+
+    state = module.params["state"]
+    origin_url = module.params["url"]
+    force = module.params["force"]
+
+    api = LCDNAPI(credentials, experimental=True)
+
+    content_providers = api.onevapi.ListAll("ContentProvider", {"name": module.params["content_provider"]})
+    if not content_providers:
+        raise Exception("Unable to find %s" % module.params["content_provider"])
+    content_provider = content_providers[0]
+
+    origins = api.onevapi.ListAll("OriginServer", {"url": origin_url})
+
+    if (origins or force) and (state=="absent"):
+        api.Delete("OriginServer", origins[0]["origin_servier_id"])
+        module.exit_json(changed=True, msg="origin server deleted")
+    elif ((not origins) or force) and (state=="present"):
+        if origins:
+            # must have been called with force=True, so delete the node so we can re-create it
+            api.onevapi.Delete("OriginServer", origins[0]["origin_server_id"])
+
+        origin = {"url": origin_url,
+              "service_type": module.params["service_type"],
+              "content_provider_id": content_provider["content_provider_id"]}
+        ret = api.onevapi.Create("OriginServer", origin)
+
+        module.exit_json(changed=True, msg="origin server created")
+    else:
+        module.exit_json(changed=False)
+
+if __name__ == '__main__':
+    main()
