diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..52ad81f
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+  - "6"
+  - "4"
diff --git a/lib/actions.js b/lib/actions.js
index 181802c..f66ea0e 100644
--- a/lib/actions.js
+++ b/lib/actions.js
@@ -61,7 +61,7 @@
 
   action (method, options) {
     const action = options.actionName
-    const namespace = this.namespace(options)
+    const namespace = encodeURIComponent(this.namespace(options))
     const params = this.params(method, `namespaces/${namespace}/actions/${action}`)
 
     if (!action) {
diff --git a/lib/messages.js b/lib/messages.js
index 6f88d69..ffd2759 100644
--- a/lib/messages.js
+++ b/lib/messages.js
@@ -13,7 +13,7 @@
   MISSING_PACKAGE_BODY_ERROR: 'Missing mandatory package parameter from options.',
   MISSING_NAMESPACE_ERROR: 'Missing namespace from options, please set a default namespace or pass one in the options.',
   INVOKE_TIMEOUT_ERROR: 'Action invocation timed out before completing.',
-  CREATE_CONFLICT_ERROR: 'Resource already exists with this name but overwrite flag was false.',
+  CREATE_CONFLICT_ERROR: 'Conflict detected updating resource.',
   INVALID_AUTH_ERROR: 'OpenWhisk authentication failed, check API key?',
   MISSING_URL_ERROR: 'Invalid URL for API called, OpenWhisk returned HTTP 404 response.',
   API_SYSTEM_ERROR: 'API call failed, response contained error code.'
diff --git a/package.json b/package.json
index 1e7c81d..da246bf 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "openwhisk",
-  "version": "2.1.3",
+  "version": "2.1.5",
   "description": "JavaScript client library for the OpenWhisk platform",
   "main": "lib/main.js",
   "engines": {
diff --git a/test/integration/README.md b/test/integration/README.md
index 82578f6..e853908 100644
--- a/test/integration/README.md
+++ b/test/integration/README.md
@@ -4,7 +4,7 @@
 Running the integration tests requires the following environment variables to be defined.
 
     export OW_API_KEY=<your api key>
-    export OW_API_HOST=<openwhisk host>
+    export OW_API_URL=<openwhisk API url>
     export OW_NAMESPACE=<namespace to test against>
 
 You can retrieve these settings using the `wsk` CLI:
@@ -17,17 +17,21 @@
 ---
 * Name: hello 
 
+```
 function main() {
    return {payload: 'Hello world'};
 }
+```
 
 Action
 ---
 * Name: tests 
 
+```
 function main() {
    return {payload: 'Hello world'};
 }
+```
 
 Trigger
 ---
diff --git a/test/integration/rules.test.js b/test/integration/rules.test.js
index 3869c21..9473e2d 100644
--- a/test/integration/rules.test.js
+++ b/test/integration/rules.test.js
@@ -51,7 +51,8 @@
   })
 })
 
-test('create, get and delete a rule', t => {
+// Running update tests conconcurrently leads to resource conflict errors.
+test.serial('create, get and delete a rule', t => {
   const params = {api: API_URL, api_key: API_KEY, namespace: NAMESPACE}
 
   const errors = err => {
@@ -69,12 +70,12 @@
       t.is(rule_result.name, result.name)
       t.is(rule_result.namespace, NAMESPACE)
       t.pass()
-      return rules.delete({ruleName: 'random_rule_test'}).catch(errors)
-    }).catch(errors)
+      return rules.disable({ruleName: 'random_rule_test'}).then(() => rules.delete({ruleName: 'random_rule_test'}))
+    })
   }).catch(errors)
 })
 
-test('create and update a rule', t => {
+test.serial('create and update a rule', t => {
   const params = {api: API_URL, api_key: API_KEY, namespace: NAMESPACE}
 
   const errors = err => {
@@ -88,10 +89,12 @@
     t.is(result.namespace, NAMESPACE)
     t.is(result.action, 'hello')
     t.is(result.trigger, 'sample')
-    return rules.update({ruleName: 'random_update_test', action: 'tests', trigger: 'sample'}).then(update_result => {
-      t.is(update_result.action, 'tests')
-      t.pass()
-      return rules.delete({ruleName: 'random_update_test'}).catch(errors)
+    return rules.disable({ruleName: 'random_update_test'}).then(() => {
+      return rules.update({ruleName: 'random_update_test', action: 'tests', trigger: 'sample'}).then(update_result => {
+        t.is(update_result.action, 'tests')
+        t.pass()
+        return rules.delete({ruleName: 'random_update_test'}).catch(errors)
+      })
     }).catch(errors)
   }).catch(errors)
 })
diff --git a/test/unit/actions.test.js b/test/unit/actions.test.js
index 2ae0f87..aac323c 100644
--- a/test/unit/actions.test.js
+++ b/test/unit/actions.test.js
@@ -372,3 +372,41 @@
   const actions = new Actions(params)
   return actions.invoke({actionName: action_name, blocking: true})
 })
+
+const Packages = proxyquire('../../lib/packages.js', {'./base_operation': ctor})
+test('create a new package, then create a new action in that package', t => {
+  const params = {api: 'https://openwhisk.ng.bluemix.net/api/v1/', api_key: 'user_authorisation_key', namespace: 'default'}
+  const package_name = 'package_name'
+  const packageBody = {version: '1.0.0', publish: true, annotations: [], parameters: [], binding: {}}
+
+  stub.request = req => {
+    t.is(req.url, `${params.api}namespaces/${params.namespace}/packages/${package_name}`)
+    t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
+    t.is(req.method, 'PUT')
+    t.deepEqual(req.body, packageBody)
+    t.deepEqual(req.qs, {})
+    return Promise.resolve()
+  }
+
+  const packages = new Packages(params)
+  return packages.create({packageName: package_name, package: packageBody})
+	.then(() => {
+	    const params2 = {api: 'https://openwhisk.ng.bluemix.net/api/v1/', api_key: 'user_authorisation_key', namespace: `default/${package_name}`}
+	    const action_name = 'action_name'
+	    const action = 'function main() { // main function body};'
+
+	    stub.request = req => {
+		t.is(req.url, `${params2.api}namespaces/${encodeURIComponent(params2.namespace)}/actions/${action_name}`)
+		t.is(req.headers.Authorization, `Basic ${new Buffer(params.api_key).toString('base64')}`)
+		t.is(req.method, 'PUT')
+		t.deepEqual(req.body, {exec: {kind: 'nodejs', code: action}})
+		t.deepEqual(req.qs, {})
+		return Promise.resolve()
+	    }
+
+	    t.plan(10)
+
+	    const actions = new Actions(params2)
+	    return actions.create({actionName: action_name, action: action})
+	})
+})
diff --git a/test/unit/base_operation.test.js b/test/unit/base_operation.test.js
index 0ff8e09..39124a8 100644
--- a/test/unit/base_operation.test.js
+++ b/test/unit/base_operation.test.js
@@ -9,7 +9,7 @@
   t.throws(() => base_operation.handle_errors({statusCode: 403}), /authentication failed/)
   t.throws(() => base_operation.handle_errors({statusCode: 404}), /HTTP 404/)
   t.throws(() => base_operation.handle_errors({statusCode: 408}), /timed out/)
-  t.throws(() => base_operation.handle_errors({statusCode: 409}), /action already exists/i)
+  t.throws(() => base_operation.handle_errors({statusCode: 409}), /Conflict/)
   t.throws(() => base_operation.handle_errors({statusCode: 500, error: {}}), /API call failed/)
   t.throws(() => base_operation.handle_errors({statusCode: 500, error: {response: {result: {error: 'custom'}}}}), /custom/)
 })
