diff --git a/rsync_remote.py b/rsync_remote.py
index f3fd751..fe76bb7 100644
--- a/rsync_remote.py
+++ b/rsync_remote.py
@@ -76,16 +76,16 @@
         '''Removes file on rsync_url.'''
         report_name = filename
         dirname, filename = os.path.split(filename)
-        dirname = self.url.dirname(dirname)
-        source = self.url.dirname(self.tmp.empty_dir)
+        dirname = self.url.a_dir(dirname)
+        source = self.url.a_dir(self.tmp.empty_dir)
         opts = "-r --delete --include={} '--exclude=*'".format(filename)
         self.logger.info('Removing file "{}"'.format(report_name))
         return self._do_rsync(source=source, dest=dirname, opts=opts)
 
     def cleandir(self, dirname):
         '''Removes directories (recursive) on rsync_url'''
-        dirname = self.url.dirname(dirname)
-        source = self.url.dirname(self.tmp.empty_dir)
+        dirname = self.url.a_dir(dirname)
+        source = self.url.a_dir(self.tmp.empty_dir)
         opts = "-a --delete"
         self.logger.info('Cleaning directory "{}"'.format(dirname))
         return self._do_rsync(source=source, dest=dirname, opts=opts)
@@ -94,11 +94,11 @@
         '''Removes directories (recursive) on rsync_url'''
         self.logger.info('Removing directory "{}"'.format(dirname))
         self.cleandir(dirname)
-        return self.rmfile(self.url.filename(dirname))
+        return self.rmfile(self.url.a_file(dirname))
 
     def mkdir(self, dirname):
         '''Creates directories (recirsive, like mkdir -p) on rsync_url'''
-        source = self.url.dirname(self.tmp.get_temp_dir(dirname))
+        source = self.url.a_dir(self.tmp.get_temp_dir(dirname))
         opts = "-a"
         self.logger.info('Creating directory "{}"'.format(dirname))
         return self._do_rsync(source=source, opts=opts)
@@ -106,7 +106,7 @@
     def symlink(self, symlink, target):
         '''Creates symlink targeted to target'''
         source = self.tmp.get_symlink_to(target)
-        symlink = self.url.filename(symlink)
+        symlink = self.url.a_file(symlink)
         opts = "-l"
         self.rmfile(symlink)
         self.logger.info('Creating symlink "{}" -> "{}"'
diff --git a/rsync_url.py b/rsync_url.py
index e4fc55f..f69e93a 100644
--- a/rsync_url.py
+++ b/rsync_url.py
@@ -187,16 +187,16 @@
     def urljoin(self, *parts):
         return self._fn_join(self.url, *parts)
 
-    def dirname(self, *path):
+    def a_dir(self, *path):
         result = self._fn_join(*path)
         if not result.endswith('/'):
             result += '/'
         return result
 
     def url_in(self, *path):
-        return self.dirname(self.url, *path)
+        return self.a_dir(self.url, *path)
 
-    def filename(self, *path):
+    def a_file(self, *path):
         result = self._fn_join(*path)
         if len(result) > 1:
             while result.endswith(os.path.sep):
@@ -204,4 +204,4 @@
         return result
 
     def url_is(self, *path):
-        return self.filename(self.url, *path)
+        return self.a_file(self.url, *path)
diff --git a/rsync_versioned.py b/rsync_versioned.py
index 076d691..7cd9fe6 100644
--- a/rsync_versioned.py
+++ b/rsync_versioned.py
@@ -38,7 +38,7 @@
         self.logger = utils.logger.getChild('RsyncVersioned.' + rsync_url)
         self.timestamp = TimeStamp()
         self.logger.info('Using timestamp {}'.format(self.timestamp))
-        self.snapshot_dir = self.url.dirname(snapshot_dir)
+        self.snapshot_dir = self.url.a_dir(snapshot_dir)
         self.latest_successful_postfix = latest_successful_postfix
         self.save_latest_days = save_latest_days
 
@@ -58,18 +58,18 @@
         pass
 
     def push(self, source, repo_name, extra=None):
-        latest_path = self.url.filename(
+        latest_path = self.url.a_file(
             self.snapshot_dir,
-            '{}-{}'.format(self.url.filename(repo_name),
+            '{}-{}'.format(self.url.a_file(repo_name),
                            self.latest_successful_postfix)
         )
-        snapshot_name = self.url.filename(
-            '{}-{}'.format(self.url.filename(repo_name), self.timestamp)
+        snapshot_name = self.url.a_file(
+            '{}-{}'.format(self.url.a_file(repo_name), self.timestamp)
         )
-        repo_path = self.url.filename(self.snapshot_dir, snapshot_name)
+        repo_path = self.url.a_file(self.snapshot_dir, snapshot_name)
 
         extra = '--link-dest={}'.format(
-            self.url.filename(self.url.path, latest_path)
+            self.url.a_file(self.url.path, latest_path)
         )
         result = super(RsyncVersioned, self).push(source, repo_path, extra)
         super(RsyncVersioned, self).symlink(repo_name, repo_path)
diff --git a/test_rsync_url.py b/test_rsync_url.py
index 170f714..0eecbf4 100644
--- a/test_rsync_url.py
+++ b/test_rsync_url.py
@@ -71,13 +71,13 @@
             logger.info('par = "{}", er = "{}"'.format(par, er))
             self.assertEqual(url.urljoin(par), er)
 
-    def dirname(self, remote, expected_result):
+    def a_dir(self, remote, expected_result):
         logger.info('For "{}" should be {}'.format(remote, expected_result))
         url = rsync_url.RsyncUrl(remote)
         self.log_locals(url)
         for par, er in expected_result.items():
             logger.info('par = "{}", er = "{}"'.format(par, er))
-            self.assertEqual(url.dirname(par), er)
+            self.assertEqual(url.a_dir(par), er)
 
     def url_in(self, remote, expected_result):
         logger.info('For "{}" should be {}'.format(remote, expected_result))
@@ -87,13 +87,13 @@
             logger.info('par = "{}", er = "{}"'.format(par, er))
             self.assertEqual(url.url_in(par), er)
 
-    def filename(self, remote, expected_result):
+    def a_file(self, remote, expected_result):
         logger.info('For "{}" should be {}'.format(remote, expected_result))
         url = rsync_url.RsyncUrl(remote)
         self.log_locals(url)
         for par, er in expected_result.items():
             logger.info('par = "{}", er = "{}"'.format(par, er))
-            self.assertEqual(url.filename(par), er)
+            self.assertEqual(url.a_file(par), er)
 
     def url_is(self, remote, expected_result):
         logger.info('For "{}" should be {}'.format(remote, expected_result))
diff --git a/test_rsync_url.yaml b/test_rsync_url.yaml
index 2304740..b27f9e7 100644
--- a/test_rsync_url.yaml
+++ b/test_rsync_url.yaml
@@ -16,13 +16,13 @@
     '/': 'ubuntu@172.18.66.89:~/'
     '/first/level/': 'ubuntu@172.18.66.89:~/first/level/'
     'first/level': 'ubuntu@172.18.66.89:~/first/level'
-  dirname:
+  a_dir:
     null: '/'
     '': '/'
     '/': '/'
     '/first/level/': '/first/level/'
     'first/level': 'first/level/'
-  filename:
+  a_file:
     null: ''
     '': ''
     '/': '/'
