diff --git a/README.md b/README.md
index 4f55332..6070619 100644
--- a/README.md
+++ b/README.md
@@ -2,3 +2,62 @@ notigen
 =======
 
 OpenStack-like notification generator.
+
+It works like this: In OpenStack an operation is a series of notifications
+connected by a common request_id. For example, to create an instance we would
+have the following events:
+
+compute.run_instance.start
+scheduler.run_instance.start
+scheduler.run_instance.scheduled
+scheduler.run_instance.end
+compute.instance.update
+compute.instance.update
+compute.instance.update
+compute.instance.update
+compute.instance.update
+compute.instance.update
+compute.run_instance.end
+
+But, since this is a large system, we could have lots of these operations
+going on currently. Each operation takes time to perform. So the
+notifications generated by these operations are interleaved.
+
+This library simulates these many concurrent operations. You tell 
+the EventGenerator how many new operations to start per minute
+and it will. Note that you'll get a lot more notification than 
+the operations/second (since the operations persist over time in the
+future). 
+
+The library tries to avoid bad sequences (like doing an update on 
+a deleted instance), but it can happen in some race conditions.
+
+You can generate in real-time by passing in a real datetime or
+you can generate the events as fast as possible by incrementing
+a starting time by the tick amount. See the examples below.
+
+To generate events in real-time ...
+
+    g = EventGenerator(100)  # Number of operations per minute
+    now = datetime.datetime.utcnow()
+    start = now
+    nevents = 0
+    while nevents < 10000:
+        e = g.generate(now)
+        if e:
+            nevents += len(e)
+
+        now = datetime.datetime.utcnow()
+
+To generate events as fast as possible ...
+
+    g = EventGenerator(100)  # Not really relevant
+    now = datetime.datetime.utcnow()
+    start = now
+    nevents = 0
+    while nevents < 10000:
+        e = g.generate(now)
+        if e:
+            nevents += len(e)
+
+        now = g.move_to_next_tick(now)
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..20c1d31
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,22 @@
+[metadata]
+name = notigen
+author = Dark Secret Software Inc.
+author-email = admin@darksecretsoftware.com
+summary = OpenStack-like notification generator
+description-file = README.md
+license = Apache-2
+classifier =
+    Development Status :: 2 - Pre-Alpha
+        Environment :: Console
+        Intended Audience :: Developers
+        Intended Audience :: Information Technology
+        License :: OSI Approved :: Apache Software License
+        Operating System :: OS Independent
+        Programming Language :: Python
+        Topic :: Software Development :: Libraries :: Python Modules
+keywords =
+    setup
+    distutils
+[files]
+packages =
+    notigen
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..aa2d8a0
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,8 @@
+#!/usr/bin/env python
+
+from setuptools import setup
+
+setup(
+    setup_requires=['pbr'],
+    pbr=True,
+)