diff --git a/rsync_client.py b/rsync_client.py
index 944b74b..dac460a 100644
--- a/rsync_client.py
+++ b/rsync_client.py
@@ -8,6 +8,7 @@
 import re
 import subprocess
 import tempfile
+import shutil
 
 
 logging.basicConfig(level=logging.INFO)
@@ -19,7 +20,7 @@
 staging_snapshot_stamp = now.strftime(staging_snapshot_stamp_format)
 
 
-class RemoteRsyncStaging(object):
+class RsyncHost(object):
     def __init__(self,
                  mirror_name,
                  host,
@@ -28,7 +29,8 @@
                  files_dir='files',
                  save_last_days=61,
                  rsync_extra_params='-v',
-                 staging_postfix='staging'):
+                 staging_postfix='staging',
+                 init_directory_structure=True):
         self.mirror_name = mirror_name
         self.host = host
         self.module = module
@@ -51,6 +53,9 @@
                                       staging_snapshot_stamp_regexp)
                                )
 
+        if init_directory_structure is True:
+            self.init_directory_structure()
+
     @property
     def url(self):
         return '{}::{}'.format(self.host, self.module)
@@ -97,6 +102,29 @@
     def staging_link_url(self):
         return '{}/{}'.format(self.url, self.staging_link_path)
 
+    def init_directory_structure(self):
+        root_dir_present = self.rsync_ls_dirs(
+            '/',
+            pattern=r'^{}$'.format(self.root_path)
+        )[1]
+        root_dir_present = True if len(root_dir_present) > 0 else False
+        if root_dir_present is True:
+            files_dir_present = self.rsync_ls_dirs(
+                '{}/'.format(self.root_path),
+                pattern=r'^{}$'.format(self.files_dir)
+            )[1]
+            files_dir_present = True if len(files_dir_present) > 0 else False
+
+        if not root_dir_present or not files_dir_present:
+            dir_to_sync = tempfile.mkdtemp()
+            os.makedirs('{}/{}'.format(dir_to_sync, self.files_path))
+            self._do_rsync(
+                source='{}/'.format(dir_to_sync),
+                dest='{}/'.format(self.url),
+                opts='-a'
+            )
+            shutil.rmtree(dir_to_sync)
+
     @property
     def empty_dir(self):
         if self.__dict__.get('_empty_dir') is None:
