diff --git a/cfg_checker/helpers/args_utils.py b/cfg_checker/helpers/args_utils.py
index 498ed30..7ac431c 100644
--- a/cfg_checker/helpers/args_utils.py
+++ b/cfg_checker/helpers/args_utils.py
@@ -2,7 +2,8 @@
 import os
 import sys
 
-from cfg_checker.common.exception import ConfigException
+from cfg_checker.common.exception import ConfigException, \
+    CommandTypeNotSupportedException, CheckerException
 
 
 class MyParser(argparse.ArgumentParser):
@@ -70,3 +71,61 @@
             return 'csv', args.csv
     else:
         raise ConfigException("Report type and filename not set")
+
+
+def check_supported_env(target_env, args, config):
+    def _raise_type_not_supported():
+        raise CommandTypeNotSupportedException(
+                "'{}' -> '{}' is not supported on any of "
+                "the currently detected environments: "
+                "{}".format(
+                    args.command,
+                    args.type,
+                    ",".join(config.detected_envs))
+        )
+
+    def _check_target_vs_used(_tenv):
+        if not hasattr(args, 'use_env'):
+            return _tenv
+        elif args.use_env == _tenv or not args.use_env:
+            return _tenv
+        else:
+            raise CommandTypeNotSupportedException(
+                    "'{}' -> '{}' is not supported "
+                    "for selected env of '{}'".format(
+                        args.command,
+                        args.type,
+                        args.use_env
+                        )
+            )
+
+    if isinstance(target_env, list):
+        _set = set(config.detected_envs).intersection(set(target_env))
+        if len(_set) < 1:
+            _raise_type_not_supported()
+        if len(_set) > 1:
+            if not hasattr(args, 'use_env'):
+                raise CheckerException(
+                    "Multiple envs detected: {}, use --use-env option".format(
+                        ",".join(list(_set))
+                    )
+                )
+            elif args.use_env and args.use_env in _set:
+                return args.use_env
+            else:
+                _raise_type_not_supported()
+        else:
+            return _check_target_vs_used(list(_set)[0])
+    elif isinstance(target_env, str):
+        if target_env not in config.detected_envs:
+            _raise_type_not_supported()
+        else:
+            return _check_target_vs_used(target_env)
+    else:
+        raise CheckerException(
+            "Unexpected target env type '{}' in '{}' -> '{}'".format(
+                target_env,
+                args.command,
+                args.type,
+            )
+        )
