Index: vcpx/dualwd.py
===================================================================
--- vcpx/dualwd.py	(revision 383)
+++ vcpx/dualwd.py	(revision 452)
@@ -4,5 +4,5 @@
 # :Autore:   Lele Gaifax <lele@nautilus.homeip.net>
 # :Licenza:  GNU General Public License
-# 
+#
 
 """
@@ -47,21 +47,22 @@
         except KeyError, exp:
             raise InvocationError("Unhandled source VCS kind: " + source_kind)
-            
+
         try:
             self.target = globs[target_kind.capitalize() + 'WorkingDir']()
         except KeyError, exp:
             raise InvocationError("Unhandled target VCS kind: " + target_kind)
-            
+
         # UpdatableSourceWorkingDir
-        
+
         self.getUpstreamChangesets = self.source.getUpstreamChangesets
         self.checkoutUpstreamRevision = self.source.checkoutUpstreamRevision
-        
+
         # SyncronizableTargetWorkingDir
-    
+
+        self.prepareWorkingDirectory = self.target.prepareWorkingDirectory
         self.initializeNewWorkingDir = self.target.initializeNewWorkingDir
         self.commitDelayedChangesets = self.target.commitDelayedChangesets
         self.replayChangeset = self.target.replayChangeset
-        
+
     def applyUpstreamChangesets(self, root, module, changesets, applyable=None,
                                 replay=None, applied=None, logger=None,
Index: vcpx/target.py
===================================================================
--- vcpx/target.py	(revision 445)
+++ vcpx/target.py	(revision 452)
@@ -316,4 +316,23 @@
         raise "%s should override this method" % self.__class__
 
+    def prepareWorkingDirectory(self, root, target_repository, target_module):
+        """
+        Do anything required to setup the hosting working directory.
+        """
+
+        self._prepareTargetRepository(root, target_repository, target_module)
+        self._prepareWorkingDirectory(root, target_repository, target_module)
+
+    def _prepareTargetRepository(self, root, target_repository, target_module):
+        """
+        Possibly create the repository, when overriden by subclasses.
+        """
+
+    def _prepareWorkingDirectory(self, root, target_repository, target_module):
+        """
+        Possibly checkout a working copy of the target VC, that will host the
+        upstream source tree, when overriden by subclasses.
+        """
+
     def initializeNewWorkingDir(self, root, source_repository,
                                 source_module, subdir, changeset, initial):
Index: vcpx/tailor.py
===================================================================
--- vcpx/tailor.py	(revision 446)
+++ vcpx/tailor.py	(revision 452)
@@ -114,4 +114,6 @@
                                        self.options.source_module,
                                        self.options.revision,
+                                       self.options.target_repository,
+                                       self.options.target_module,
                                        self.options.subdir)
                 elif self.options.migrate:
@@ -289,7 +291,11 @@
 
     def bootstrap(self, source_kind, target_kind,
-                  source_repository, source_module, revision, subdir):
+                  source_repository, source_module, revision,
+                  target_repository, target_module, subdir):
         """
         Bootstrap a new tailorized module.
+
+        First of all prepare the target system working directory such that
+        it can host the upstream source tree. This is backend specific.
 
         Extract a copy of the ``repository`` at given ``revision`` in the
@@ -320,4 +326,11 @@
         self.logger.info("getting %s revision '%s' of '%s' from '%s'" % (
             source_kind, revision, source_module, source_repository))
+
+        try:
+            dwd.prepareWorkingDirectory(self.root,
+                                        target_repository, target_module)
+        except:
+            self.logger.exception('Cannot prepare working directory!')
+            raise
 
         try:
@@ -543,4 +556,12 @@
                      "backends.",
                 default="HEAD"),
+    make_option("-T", "--target-repository",
+                dest="target_repository", metavar="REPOS", default=None,
+                help="Specify the target repository, the one that will "
+                     "receive the patches coming from the source one."),
+    make_option("-M", "--target-module", dest="target_module",
+                metavar="MODULE",
+                help="Specify the module on the target repository that will "
+                     "actually contain the upstream source tree."),
     make_option("--subdir", metavar="DIR",
                 help="Force the subdirectory where the checkout will happen, "
@@ -663,4 +684,6 @@
                                    options.source_module,
                                    options.revision,
+                                   options.target_repository,
+                                   options.target_module,
                                    options.subdir)
             elif options.update:
