(#2662) - only create one db instance when syncing
diff --git a/lib/replicate.js b/lib/replicate.js
index bb2a542..747475c 100644
--- a/lib/replicate.js
+++ b/lib/replicate.js
@@ -548,7 +548,8 @@
 }
 
 
-function toPouch(db, PouchConstructor) {
+function toPouch(db, opts) {
+  var PouchConstructor = opts.pouchConstructor || Pouch;
   if (typeof db === 'string') {
     return new PouchConstructor(db);
   } else if (db.then) {
@@ -573,9 +574,8 @@
   opts = utils.clone(opts);
   opts.continuous = opts.continuous || opts.live;
   var replicateRet = new Replication(opts);
-  var PouchConstructor = opts.pouchConstructor || Pouch;
-  toPouch(src, PouchConstructor).then(function (src) {
-    return toPouch(target, PouchConstructor).then(function (target) {
+  toPouch(src, opts).then(function (src) {
+    return toPouch(target, opts).then(function (target) {
       return genReplicationId(src, target, opts).then(function (repId) {
         replicate(repId, src, target, opts, replicateRet);
       });
@@ -588,3 +588,4 @@
 }
 
 exports.replicate = replicateWrapper;
+exports.toPouch = toPouch;
\ No newline at end of file
diff --git a/lib/sync.js b/lib/sync.js
index 379e7ab..3fd73f9 100644
--- a/lib/sync.js
+++ b/lib/sync.js
@@ -1,6 +1,7 @@
 'use strict';
 var utils = require('./utils');
-var replicate = require('./replicate').replicate;
+var replication = require('./replicate');
+var replicate = replication.replicate;
 var EE = require('events').EventEmitter;
 
 module.exports = Sync;
@@ -30,9 +31,11 @@
     complete = opts.complete;
     delete opts.complete;
   }
-  this.push = replicate(src, target, opts);
+  var srcPouch = replication.toPouch(src, opts);
+  var targPouch = replication.toPouch(target, opts);
+  this.push = replicate(srcPouch, targPouch, opts);
 
-  this.pull = replicate(target, src, opts);
+  this.pull = replicate(targPouch, srcPouch, opts);
   var emittedCancel = false;
   function onCancel(data) {
     if (!emittedCancel) {