diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0ad1d67a55c10c032a99cd5cd4e74baf07fc4bef..e9110c8f284ee709df4a8b56f63b3e7e9559822b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
 
 * added safe_listdir
 * fixed a bug occurring in Python 3.10 with whereis
+* DirectorySource will raise an exception if directory does not exist and on_fail is set to RAISE
 
 Build system
 ============
diff --git a/satella/__init__.py b/satella/__init__.py
index 507e1b6be362c54a8b3c4fbff9902325a760c53a..b8a2e669b691ad10da88afcdd72ca15a361fbfd7 100644
--- a/satella/__init__.py
+++ b/satella/__init__.py
@@ -1 +1 @@
-__version__ = '2.25.0a2'
+__version__ = '2.25.0a3'
diff --git a/satella/configuration/sources/file.py b/satella/configuration/sources/file.py
index 1c6732a850e45809a42cccc6897de97d3df1b94e..9a1607ee9c5b3321e02f0fcdc09a4598f9020953 100644
--- a/satella/configuration/sources/file.py
+++ b/satella/configuration/sources/file.py
@@ -30,9 +30,9 @@ class FileSource(BaseSource):
         """
         super().__init__()
         from .. import sources
-        self.source_classes = [  # type: tp.List[tp.Type[FormatSource]]
+        self.source_classes = [
             (p if not isinstance(p, str) else getattr(sources, p)) for p in
-            interpret_as]
+            interpret_as]        # type: tp.List[tp.Type[FormatSource]]
         self.path = path  # type: str
         self.encoding = encoding  # type: str
 
@@ -93,10 +93,13 @@ class DirectorySource(FileSource):
         try:
             files = self.filter(os.path.join(directory, x) for x in os.listdir(directory))
         except OSError as e:
-            logger.warning(
-                'OSError %s while accessing configuration directory %s, skipping files' % (
-                    e, directory))
-            return []
+            if self.on_fail == DirectorySource.SILENT:
+                logger.warning(
+                    'OSError %s while accessing configuration directory %s, skipping files' % (
+                        e, directory))
+                return []
+            else:
+                raise ConfigurationError(f'Directory {directory} does not exist')
 
         for file_name in files:
 
diff --git a/tests/test_configuration/test_sources/test_file.py b/tests/test_configuration/test_sources/test_file.py
index c27ff6768ef26e6c7120a5c1937ead96f0a8a7b8..a3ddf43e674543f04dc628010f6877e0c1d39044 100644
--- a/tests/test_configuration/test_sources/test_file.py
+++ b/tests/test_configuration/test_sources/test_file.py
@@ -5,6 +5,7 @@ import unittest
 from satella.coding import silence_excs
 from satella.configuration.sources import FileSource, FORMAT_SOURCES, \
     DirectorySource
+from satella.exceptions import ConfigurationError
 from .utils import SourceTestCase
 
 
@@ -54,6 +55,12 @@ class TestDirectorySource(SourceTestCase):
             self.assertEqual(self.ds.provide(),
                              {'amqp': 'amqp', 'logstash': {'host': 'localhost', 'port': 9600}})
 
+    def test_invalid_directory(self):
+        ds = DirectorySource('not-existing', on_fail=DirectorySource.SILENT)
+        self.assertEqual(ds.provide(), {})
+        ds = DirectorySource('not-existing', on_fail=DirectorySource.RAISE)
+        self.assertRaises(ConfigurationError, ds.provide)
+
     def test_directory_source(self):
         with tempfile.TemporaryDirectory() as outdir:
             self.filename = outdir