diff --git a/README.md b/README.md
index 8c46f4a..c5c0cf3 100644
--- a/README.md
+++ b/README.md
@@ -2,3 +2,75 @@ asteroid-storage-service
========================
Aseteroid Storage Service
+
+
+## Storage
+
+The `asteroid-storage-service` service is designed to make it easy to upload and download files to various infrastructure providers. **_Special attention has been paid so that methods are streams and pipe-capable._**
+
+To get started with a `asteroid-storage-service` client just create one:
+
+``` js
+ var client = require('asteroid-storage-service').createClient({
+ //
+ // The name of the provider (e.g. "file")
+ //
+ provider: 'provider-name',
+
+ //
+ // ... Provider specific credentials
+ //
+ });
+```
+
+Each compute provider takes different credentials to authenticate; these details about each specific provider can be found below:
+
+* [Azure](docs/providers/azure.md#using-storage)
+* [Rackspace](docs/providers/rackspace/storage.md)
+* [Amazon](docs/providers/amazon.md#using-storage)
+
+Each instance of `storage.Client` returned from `storage.createClient` has a set of uniform APIs:
+
+
+### Container
+* `client.getContainers(function (err, containers) { })`
+* `client.createContainer(options, function (err, container) { })`
+* `client.destroyContainer(containerName, function (err) { })`
+* `client.getContainer(containerName, function (err, container) { })`
+
+
+### File
+* `client.upload(options, function (err) { })`
+* `client.download(options, function (err) { })`
+* `client.getFiles(container, function (err, files) { })`
+* `client.getFile(container, file, function (err, server) { })`
+* `client.removeFile(container, file, function (err) { })`
+
+Both the `.upload(options)` and `.download(options)` have had **careful attention paid to make sure they are pipe and stream capable:**
+
+### Upload a File
+``` js
+ var storage = require('asteroid-storage-service'),
+ fs = require('fs');
+
+ var client = storage.createClient({ /* ... */ });
+
+ fs.createReadStream('a-file.txt').pipe(client.upload({
+ container: 'a-container',
+ remote: 'remote-file-name.txt'
+ }));
+```
+
+### Download a File
+``` js
+ var storage = require('asteroid-storage-service'),
+ fs = require('fs');
+
+ var client = storage.createClient({ /* ... */ });
+
+ client.download({
+ container: 'a-container',
+ remote: 'remote-file-name.txt'
+ }).pipe(fs.createWriteStream('a-file.txt'));
+```
+
diff --git a/lib/index.js b/lib/index.js
new file mode 100644
index 0000000..503ca4c
--- /dev/null
+++ b/lib/index.js
@@ -0,0 +1,17 @@
+exports.createClient = function (options) {
+ options = options || {};
+ var provider = options.provider || 'file';
+
+ if ('function' !== typeof provider) {
+ try {
+ // Try to load the provider from providers folder
+ provider = require('./providers/' + provider);
+ } catch (err) {
+ // Fall back to pkgcloud
+ return require('pkgcloud').storage.createClient(options);
+ }
+ }
+
+ return new provider(options);
+
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index fa5caca..29efc10 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "asteroid-storage-service",
"description": "Asteroid Storage Service",
"version": "0.0.1",
- "main": "index.js",
+ "main": "lib/index.js",
"scripts": {
"test": "./node_modules/.bin/mocha --timeout 30000 test/*test.js"
},