diff --git a/collectfast/__init__.py b/collectfast/__init__.py
index 67bc602..9c73af2 100644
--- a/collectfast/__init__.py
+++ b/collectfast/__init__.py
@@ -1,1 +1,1 @@
-__version__ = "1.3.0"
+__version__ = "1.3.1"
diff --git a/collectfast/management/commands/collectstatic.py b/collectfast/management/commands/collectstatic.py
index 040b4bd..d7a4433 100644
--- a/collectfast/management/commands/collectstatic.py
+++ b/collectfast/management/commands/collectstatic.py
@@ -2,6 +2,7 @@ from multiprocessing.dummy import Pool
 from typing import Any
 from typing import Dict
 from typing import List
+from typing import Optional
 from typing import Tuple
 from typing import Type
 
@@ -13,6 +14,7 @@ from django.core.management.base import CommandParser
 
 from collectfast import __version__
 from collectfast import settings
+from collectfast.strategies import DisabledStrategy
 from collectfast.strategies import guess_strategy
 from collectfast.strategies import load_strategy
 from collectfast.strategies import Strategy
@@ -27,7 +29,7 @@ class Command(collectstatic.Command):
         self.num_copied_files = 0
         self.tasks = []  # type: List[Task]
         self.collectfast_enabled = settings.enabled
-        self.strategy = self._load_strategy()(self.storage)
+        self.strategy = DisabledStrategy(Storage())  # type: Strategy
 
     @staticmethod
     def _load_strategy():
@@ -62,8 +64,11 @@ class Command(collectstatic.Command):
     def set_options(self, **options):
         # type: (Any) -> None
         """Set options and handle deprecation."""
-        disable = options.pop("disable_collectfast", False)
-        self.collectfast_enabled = not disable
+        self.collectfast_enabled = self.collectfast_enabled and not options.pop(
+            "disable_collectfast"
+        )
+        if self.collectfast_enabled:
+            self.strategy = self._load_strategy()(self.storage)
         super().set_options(**options)
 
     def collect(self):
@@ -73,14 +78,18 @@ class Command(collectstatic.Command):
         Command.copy_file() which is called by super().collect().
         """
         ret = super().collect()
+        if not self.collectfast_enabled:
+            return ret
         if settings.threads:
             Pool(settings.threads).map(self.maybe_copy_file, self.tasks)
         return ret
 
     def handle(self, *args, **options):
-        # type: (Any, Any) -> str
+        # type: (Any, Any) -> Optional[str]
         """Override handle to suppress summary output."""
-        super().handle(**options)
+        ret = super().handle(**options)
+        if not self.collectfast_enabled:
+            return ret
         return "{} static file{} copied.".format(
             self.num_copied_files, "" if self.num_copied_files == 1 else "s"
         )
@@ -90,9 +99,9 @@ class Command(collectstatic.Command):
         """Determine if file should be copied or not and handle exceptions."""
         path, prefixed_path, source_storage = args
 
-        self.strategy.pre_should_copy_hook()
-
         if self.collectfast_enabled and not self.dry_run:
+            self.strategy.pre_should_copy_hook()
+
             if not self.strategy.should_copy_file(path, prefixed_path, source_storage):
                 self.log("Skipping '%s'" % path)
                 return
@@ -107,7 +116,7 @@ class Command(collectstatic.Command):
         file with a blocking call.
         """
         args = (path, prefixed_path, source_storage)
-        if settings.threads:
+        if settings.threads and self.collectfast_enabled:
             self.tasks.append(args)
         else:
             self.maybe_copy_file(args)
diff --git a/collectfast/strategies/__init__.py b/collectfast/strategies/__init__.py
index 9d52a9d..4d93b5e 100644
--- a/collectfast/strategies/__init__.py
+++ b/collectfast/strategies/__init__.py
@@ -1,5 +1,6 @@
+from .base import DisabledStrategy
 from .base import guess_strategy
 from .base import load_strategy
 from .base import Strategy
 
-__all__ = ("load_strategy", "guess_strategy", "Strategy")
+__all__ = ("load_strategy", "guess_strategy", "Strategy", "DisabledStrategy")
diff --git a/collectfast/strategies/base.py b/collectfast/strategies/base.py
index 1705b3f..198e2d4 100644
--- a/collectfast/strategies/base.py
+++ b/collectfast/strategies/base.py
@@ -9,6 +9,7 @@ from functools import lru_cache
 from io import BytesIO
 from typing import ClassVar
 from typing import Generic
+from typing import NoReturn
 from typing import Optional
 from typing import Tuple
 from typing import Type
@@ -138,6 +139,16 @@ class CachingHashStrategy(HashStrategy[_RemoteStorage], abc.ABC):
         return str(file_hash)
 
 
+class DisabledStrategy(Strategy):
+    def should_copy_file(self, path, prefixed_path, local_storage):
+        # type: (str, str, Storage) -> NoReturn
+        raise NotImplementedError
+
+    def pre_should_copy_hook(self):
+        # type: () -> NoReturn
+        raise NotImplementedError
+
+
 def load_strategy(klass: Union[str, type, object]) -> Type[Strategy[Storage]]:
     if isinstance(klass, str):
         klass = pydoc.locate(klass)

Breaking behavior 1.0.0 -> 1.3.0 (COLLECTSTATIC_STRATEGY)
Not sure if bug or intentional, but `collectstatic` command will break if you don't define `COLLECTSTATIC_STRATEGY` or `STATICFILES_STORAGE` in your settings file (even if `COLLECTFAST_ENABLED = False`). 

![image](https://user-images.githubusercontent.com/2257119/67443243-dbaf5800-f5b8-11e9-9edd-4c26b2364136.png)

diff --git a/collectfast/tests/command/__init__.py b/collectfast/tests/command/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/collectfast/tests/test_command.py b/collectfast/tests/command/test_command.py
similarity index 76%
rename from collectfast/tests/test_command.py
rename to collectfast/tests/command/test_command.py
index c63908d..002f1a9 100644
--- a/collectfast/tests/test_command.py
+++ b/collectfast/tests/command/test_command.py
@@ -1,18 +1,17 @@
-from io import StringIO
-from typing import Any
 from unittest import TestCase
 
 from django.core.exceptions import ImproperlyConfigured
-from django.core.management import call_command
 from django.test import override_settings as override_django_settings
 
-from .utils import clean_static_dir
-from .utils import create_static_file
-from .utils import make_test
-from .utils import override_setting
-from .utils import override_storage_attr
-from .utils import test_many
+from .utils import call_collectstatic
 from collectfast.management.commands.collectstatic import Command
+from collectfast.tests.utils import clean_static_dir
+from collectfast.tests.utils import create_static_file
+from collectfast.tests.utils import make_test
+from collectfast.tests.utils import override_setting
+from collectfast.tests.utils import override_storage_attr
+from collectfast.tests.utils import test_many
+
 
 aws_backend_confs = {
     "boto3": override_django_settings(
@@ -43,15 +42,6 @@ make_test_aws_backends = test_many(**aws_backend_confs)
 make_test_all_backends = test_many(**all_backend_confs)
 
 
-def call_collectstatic(*args, **kwargs):
-    # type: (Any, Any) -> str
-    out = StringIO()
-    call_command(
-        "collectstatic", *args, verbosity=3, interactive=False, stdout=out, **kwargs
-    )
-    return out.getvalue()
-
-
 @make_test_all_backends
 def test_basics(case):
     # type: (TestCase) -> None
@@ -73,25 +63,6 @@ def test_threads(case):
     case.assertIn("0 static files copied.", call_collectstatic())
 
 
-@make_test
-@override_django_settings(
-    STATICFILES_STORAGE="django.contrib.staticfiles.storage.StaticFilesStorage"
-)
-def test_disable_collectfast_with_default_storage(case):
-    # type: (TestCase) -> None
-    clean_static_dir()
-    create_static_file()
-    case.assertIn("1 static file copied.", call_collectstatic(disable_collectfast=True))
-
-
-@make_test
-def test_disable_collectfast(case):
-    # type: (TestCase) -> None
-    clean_static_dir()
-    create_static_file()
-    case.assertIn("1 static file copied.", call_collectstatic(disable_collectfast=True))
-
-
 @make_test
 def test_dry_run(case):
     # type: (TestCase) -> None
diff --git a/collectfast/tests/command/test_disable.py b/collectfast/tests/command/test_disable.py
new file mode 100644
index 0000000..6a04820
--- /dev/null
+++ b/collectfast/tests/command/test_disable.py
@@ -0,0 +1,46 @@
+from unittest import mock
+from unittest import TestCase
+
+from django.test import override_settings as override_django_settings
+
+from .utils import call_collectstatic
+from collectfast.tests.utils import clean_static_dir
+from collectfast.tests.utils import create_static_file
+from collectfast.tests.utils import make_test
+from collectfast.tests.utils import override_setting
+
+
+@make_test
+@override_django_settings(
+    STATICFILES_STORAGE="django.contrib.staticfiles.storage.StaticFilesStorage"
+)
+def test_disable_collectfast_with_default_storage(case):
+    # type: (TestCase) -> None
+    clean_static_dir()
+    create_static_file()
+    case.assertIn("1 static file copied", call_collectstatic(disable_collectfast=True))
+
+
+@make_test
+def test_disable_collectfast(case):
+    # type: (TestCase) -> None
+    clean_static_dir()
+    create_static_file()
+    case.assertIn("1 static file copied.", call_collectstatic(disable_collectfast=True))
+
+
+@override_setting("enabled", False)
+@mock.patch("collectfast.management.commands.collectstatic.Command._load_strategy")
+def test_no_load_with_disable_setting(mocked_load_strategy):
+    # type: (mock.MagicMock) -> None
+    clean_static_dir()
+    call_collectstatic()
+    mocked_load_strategy.assert_not_called()
+
+
+@mock.patch("collectfast.management.commands.collectstatic.Command._load_strategy")
+def test_no_load_with_disable_flag(mocked_load_strategy):
+    # type: (mock.MagicMock) -> None
+    clean_static_dir()
+    call_collectstatic(disable_collectfast=True)
+    mocked_load_strategy.assert_not_called()
diff --git a/collectfast/tests/command/utils.py b/collectfast/tests/command/utils.py
new file mode 100644
index 0000000..64061e7
--- /dev/null
+++ b/collectfast/tests/command/utils.py
@@ -0,0 +1,13 @@
+from io import StringIO
+from typing import Any
+
+from django.core.management import call_command
+
+
+def call_collectstatic(*args, **kwargs):
+    # type: (Any, Any) -> str
+    out = StringIO()
+    call_command(
+        "collectstatic", *args, verbosity=3, interactive=False, stdout=out, **kwargs
+    )
+    return out.getvalue()

pip install -e .
parse_log_pytest
requirements.txt
pytest pytest-django mock coveralls boto3 boto google-cloud-storage typing typing-extensions
3.7
test-requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
asgiref==3.7.2
boto==2.49.0
boto3==1.33.13
botocore==1.33.13
cachetools==5.5.2
certifi @ file:///croot/certifi_1671487769961/work/certifi
charset-normalizer==3.4.1
-e git+https://github.com/antonagestam/collectfast.git@7608d4f5061e954e17753b4ff3997356a1ffde5d#egg=Collectfast
coverage==6.5.0
coveralls==3.3.1
Django==3.2.25
django-storages==1.14.5
docopt==0.6.2
exceptiongroup==1.2.2
google-api-core==2.24.2
google-auth==2.38.0
google-cloud-core==2.4.3
google-cloud-storage==3.1.0
google-crc32c==1.5.0
google-resumable-media==2.7.2
googleapis-common-protos==1.69.2
idna==3.10
importlib-metadata==6.7.0
iniconfig==2.0.0
jmespath==1.0.1
mock==5.2.0
packaging==24.0
pluggy==1.2.0
proto-plus==1.26.1
protobuf==4.24.4
pyasn1==0.5.1
pyasn1-modules==0.3.0
pytest==7.4.4
pytest-django==4.5.2
python-dateutil==2.9.0.post0
pytz==2025.2
requests==2.31.0
rsa==4.9
s3transfer==0.8.2
six==1.17.0
sqlparse==0.4.4
tomli==2.0.1
typing==3.7.4.3
typing_extensions==4.7.1
urllib3==1.26.20
zipp==3.15.0

name: collectfast
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - asgiref==3.7.2
      - boto==2.49.0
      - boto3==1.33.13
      - botocore==1.33.13
      - cachetools==5.5.2
      - charset-normalizer==3.4.1
      - coverage==6.5.0
      - coveralls==3.3.1
      - django==3.2.25
      - django-storages==1.14.5
      - docopt==0.6.2
      - exceptiongroup==1.2.2
      - google-api-core==2.24.2
      - google-auth==2.38.0
      - google-cloud-core==2.4.3
      - google-cloud-storage==3.1.0
      - google-crc32c==1.5.0
      - google-resumable-media==2.7.2
      - googleapis-common-protos==1.69.2
      - idna==3.10
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - jmespath==1.0.1
      - mock==5.2.0
      - packaging==24.0
      - pluggy==1.2.0
      - proto-plus==1.26.1
      - protobuf==4.24.4
      - pyasn1==0.5.1
      - pyasn1-modules==0.3.0
      - pytest==7.4.4
      - pytest-django==4.5.2
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - requests==2.31.0
      - rsa==4.9
      - s3transfer==0.8.2
      - six==1.17.0
      - sqlparse==0.4.4
      - tomli==2.0.1
      - typing==3.7.4.3
      - typing-extensions==4.7.1
      - urllib3==1.26.20
      - zipp==3.15.0
prefix: /opt/conda/envs/collectfast

collectfast/tests/command/test_disable.py::test_no_load_with_disable_setting collectfast/tests/command/test_disable.py::test_no_load_with_disable_flag
collectfast/tests/command/test_command.py::test_basics::test_boto collectfast/tests/command/test_command.py::test_basics::test_boto3 collectfast/tests/command/test_command.py::test_basics::test_gcloud collectfast/tests/command/test_command.py::test_threads::test_boto collectfast/tests/command/test_command.py::test_threads::test_boto3 collectfast/tests/command/test_command.py::test_threads::test_gcloud collectfast/tests/command/test_command.py::test_aws_is_gzipped::test_boto collectfast/tests/command/test_command.py::test_aws_is_gzipped::test_boto3 collectfast/tests/command/test_command.py::test_recognizes_boto_storage::test_recognizes_boto_storage collectfast/tests/command/test_disable.py::test_disable_collectfast::test_disable_collectfast
collectfast/tests/command/test_command.py::test_many collectfast/tests/command/test_command.py::test_basics::test_filesystem collectfast/tests/command/test_command.py::test_threads::test_filesystem collectfast/tests/command/test_command.py::test_dry_run::test_dry_run collectfast/tests/command/test_command.py::test_recognizes_boto3_storage::test_recognizes_boto3_storage collectfast/tests/command/test_command.py::test_raises_for_unrecognized_storage::test_raises_for_unrecognized_storage collectfast/tests/command/test_disable.py::test_disable_collectfast_with_default_storage::test_disable_collectfast_with_default_storage
collectfast/management/commands/collectstatic.py collectfast/__init__.py collectfast/strategies/__init__.py collectfast/strategies/base.py
collectfast/management/commands/collectstatic.py collectfast/__init__.py collectfast/strategies/__init__.py collectfast/strategies/base.py