start on this
diff --git a/packages/pouchdb-errors/src/index.js b/packages/pouchdb-errors/src/index.js
index bb1b29e..4b106f1 100644
--- a/packages/pouchdb-errors/src/index.js
+++ b/packages/pouchdb-errors/src/index.js
@@ -161,6 +161,33 @@
   reason: 'Provided URL is invalid'
 });
 
+var allErrors = [
+  UNAUTHORIZED,
+  MISSING_BULK_DOCS,
+  MISSING_DOC,
+  REV_CONFLICT,
+  INVALID_ID,
+  MISSING_ID,
+  RESERVED_ID,
+  NOT_OPEN,
+  UNKNOWN_ERROR,
+  BAD_ARG,
+  INVALID_REQUEST,
+  QUERY_PARSE_ERROR,
+  DOC_VALIDATION,
+  BAD_REQUEST,
+  NOT_AN_OBJECT,
+  DB_MISSING,
+  WSQ_ERROR,
+  LDB_ERROR,
+  FORBIDDEN,
+  INVALID_REV,
+  FILE_EXISTS,
+  MISSING_STUB,
+  IDB_ERROR,
+  INVALID_URL
+];
+
 function createError(error, reason, name) {
   function CustomPouchError(reason) {
     // inherit error properties from our parent error manually
@@ -189,15 +216,12 @@
 // This is for differentiating between errors with the same name and status,
 // eg, bad_request.
 var getErrorTypeByProp = function (prop, value, reason) {
-  var keys = Object.keys(allErrors).filter(function (key) {
-    var error = allErrors[key];
-    return typeof error !== 'function' && error[prop] === value;
+  var errors = allErrors.filter(function (error) {
+    return error[prop] === value;
   });
-  var key = reason && keys.filter(function (key) {
-      var error = allErrors[key];
-      return error.message === reason;
-    })[0] || keys[0];
-  return (key) ? allErrors[key] : null;
+  return reason && errors.filter(function (error) {
+    return error.message === reason;
+  })[0] || errors[0];
 };
 
 function generateErrorFromResponse(res) {
diff --git a/tests/unit/test.errors.js b/tests/unit/test.errors.js
new file mode 100644
index 0000000..f81d654
--- /dev/null
+++ b/tests/unit/test.errors.js
@@ -0,0 +1,33 @@
+
+'use strict';
+
+var should = require('chai').should();
+var PouchDB = require('../../packages/pouchdb-for-coverage');
+var clone = PouchDB.utils.clone;
+
+describe('test.clone.js', function () {
+
+  it('Clones regular objects', function () {
+    var obj1 = {foo: 'bar'};
+    var obj2 = clone(obj1);
+    obj1.baz = 'quuz';
+    should.not.exist(obj2.baz);
+  });
+
+  it('Doesn\'t clone fancy objects', function () {
+
+    function Kitty() {
+    }
+
+    Kitty.prototype.meow = function () {
+      return 'meow';
+    };
+
+    var obj1 = {kitty: new Kitty()};
+    var obj2 = clone(obj1);
+    obj1.kitty.meow().should.equal('meow');
+    obj2.kitty.meow().should.equal('meow');
+    obj1.kitty.foo = 'bar';
+    obj2.kitty.foo.should.equal('bar');
+  });
+});