Repository: almenscorner/IntuneCD (language: python)

Issue:
Entra
## New features
- Entra backup capabilities
   - App Registrations
   - Authentication Flows Policy
   - Authentication Methods
   - Authorization Policy
   - B2B Policy
   - Device Registration Policy
   - Domains
   - External Identities Policy
   - Group Settings
   - Roaming Settings
   - Security Defaults
   - SSPR
- Entra update capabilities
   - Authentication Flows Policy
   - Authentication Methods
   - Authorization Policy
   - B2B Policy
   - Device Registration Policy
   - Domains
   - External Identities Policy
   - Group Settings
   - Roaming Settings
   - Security Defaults
   - SSPR
- New backup argument, `--ignore-omasettings` allows you to skip encrypted OMA settings during backup. This allows you to run a backup with only read permissions.
- New backup and update arguments, `--entrabackup`, `--entraupdate` lets you backup and update Entra configurations
- `TENANT_ID` and `KEY` can be used when using local auth to authenticate to Azure APIs and store the refresh token in an encrypted cache file. If local auth is not used they need to be set as ENV vars.

## Other updates
- In the generated documentation, Intune and Entra will be split up by headers.


Discussion / hints:

Fix patch:
diff --git a/.pylintrc b/.pylintrc
index 3f1f656c..cefe575b 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -24,6 +24,12 @@ disable=
     unnecessary-lambda-assignment,
     wrong-import-position,
 ignore=
+    backup_intune.py,
+    backup_entra.py,
+    update_intune.py,
+    update_entra.py,
     run_backup.py,
     run_update.py,
+    document_intune.py,
+    document_entra.py,
     run_documentation.py,
diff --git a/codecov.yml b/codecov.yml
index 496e3890..b8a1e7b2 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -1,6 +1,12 @@
 ignore:
+  - "src/IntuneCD/backup_intune.py"
+  - "src/IntuneCD/backup_entra.py"
+  - "src/IntuneCD/update_intune.py"
+  - "src/IntuneCD/update_entra.py"
   - "src/IntuneCD/run_backup.py"
   - "src/IntuneCD/run_update.py"
+  - "src/IntuneCD/document_intune.py"
+  - "src/IntuneCD/document_entra.py"
   - "src/IntuneCD/run_documentation.py"
   - "src/IntuneCD/intunecdlib/get_accesstoken.py"
-  - "src/IntuneCD/backup/backup_autopilotDevices.py"
+  - "src/IntuneCD/backup/Intune/backup_autopilotDevices.py"
diff --git a/setup.cfg b/setup.cfg
index 5320c4d6..d1f54336 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = IntuneCD
-version = 2.0.4
+version = 2.0.5.beta2
 author = Tobias Almén
 author_email = almenscorner@outlook.com
 description = Tool to backup and update configurations in Intune
diff --git a/src/IntuneCD/backup/Entra/__init__.py b/src/IntuneCD/backup/Entra/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/src/IntuneCD/backup/Entra/backup_SSPR.py b/src/IntuneCD/backup/Entra/backup_SSPR.py
new file mode 100644
index 00000000..6c39fec8
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_SSPR.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up Security Defaults in Entra.
+"""
+
+from ...intunecdlib.azure_request import make_azure_request
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "PasswordReset/PasswordResetPolicies"
+
+
+# Get Security Defaults information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save Security Defaults to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/Password Reset Policies/"
+    data = make_azure_request(token, ENDPOINT)
+
+    if data:
+        results["config_count"] += 1
+        data = remove_keys(data)
+        print("Backing up Entra Password Reset Policies")
+
+        # Get filename without illegal characters
+        fname = "password_reset_policies"
+        # Save APNs as JSON or YAML depending on configured value in "-o"
+        save_output(output, configpath, fname, data)
+
+        results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Entra/backup_applications.py b/src/IntuneCD/backup/Entra/backup_applications.py
new file mode 100644
index 00000000..54ba5ab5
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_applications.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up Applications in Entra.
+"""
+
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "https://graph.microsoft.com/v1.0/myorganization/applications"
+
+
+# Get Applications information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save Applications to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/Applications/"
+    data = makeapirequest(ENDPOINT, token)
+
+    if data:
+        for app in data["value"]:
+            results["config_count"] += 1
+            data = remove_keys(app)
+            print(f'Backing up Entra Application {app["displayName"]}')
+
+            # Get filename without illegal characters
+            fname = clean_filename(app["displayName"])
+            # Save APNs as JSON or YAML depending on configured value in "-o"
+            save_output(output, configpath, fname, data)
+
+            results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Entra/backup_authenticationFlowsPolicy.py b/src/IntuneCD/backup/Entra/backup_authenticationFlowsPolicy.py
new file mode 100644
index 00000000..cb91e36c
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_authenticationFlowsPolicy.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up External Collaboration Settings in Entra.
+"""
+
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "https://graph.microsoft.com/beta/policies/authenticationFlowsPolicy"
+
+
+# Get External Collaboration Settings information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save External Collaboration Settings to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/Authentication Flows Policy/"
+    data = makeapirequest(ENDPOINT, token)
+
+    if data:
+        results["config_count"] += 1
+        data = remove_keys(data)
+        print("Backing up Entra Authentication Flows Policy")
+
+        # Get filename without illegal characters
+        fname = "authentication_flows_policy"
+        # Save APNs as JSON or YAML depending on configured value in "-o"
+        save_output(output, configpath, fname, data)
+
+        results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Entra/backup_authenticationMethods.py b/src/IntuneCD/backup/Entra/backup_authenticationMethods.py
new file mode 100644
index 00000000..0414e36c
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_authenticationMethods.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up Authentication Methods in Entra.
+"""
+
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "https://graph.microsoft.com/beta/policies/authenticationmethodspolicy"
+
+
+# Get Authentication Methods information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save Authentication Methods to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/Authentication Methods/"
+    data = makeapirequest(ENDPOINT, token)
+
+    if data:
+        results["config_count"] += 1
+        data = remove_keys(data)
+        print("Backing up Entra Authentication Methods")
+
+        # Get filename without illegal characters
+        fname = "authentication_methods"
+        # Save APNs as JSON or YAML depending on configured value in "-o"
+        save_output(output, configpath, fname, data)
+
+        results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Entra/backup_authorizationPolicy.py b/src/IntuneCD/backup/Entra/backup_authorizationPolicy.py
new file mode 100644
index 00000000..1d1cb2c3
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_authorizationPolicy.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up External Collaboration Settings in Entra.
+"""
+
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "https://graph.microsoft.com/beta/policies/authorizationPolicy"
+
+
+# Get External Collaboration Settings information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save External Collaboration Settings to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/Authorization Policy/"
+    data = makeapirequest(ENDPOINT, token)
+
+    if data:
+        results["config_count"] += 1
+        data = remove_keys(data)
+        print("Backing up Entra Authorization Policy")
+
+        # Get filename without illegal characters
+        fname = "authorization_policy"
+        # Save APNs as JSON or YAML depending on configured value in "-o"
+        save_output(output, configpath, fname, data["value"][0])
+
+        results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Entra/backup_b2bPolicy.py b/src/IntuneCD/backup/Entra/backup_b2bPolicy.py
new file mode 100644
index 00000000..fbc1f33e
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_b2bPolicy.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up Security Defaults in Entra.
+"""
+
+from ...intunecdlib.azure_request import make_azure_request
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "B2B/b2bPolicy"
+
+
+# Get Security Defaults information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save Security Defaults to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/External Collaboration Settings/"
+    data = make_azure_request(token, ENDPOINT)
+
+    if data:
+        results["config_count"] += 1
+        data = remove_keys(data)
+        print("Backing up Entra External Collaboration Settings B2B Policy")
+
+        # Get filename without illegal characters
+        fname = "b2b_policy"
+        # Save APNs as JSON or YAML depending on configured value in "-o"
+        save_output(output, configpath, fname, data)
+
+        results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Entra/backup_deviceRegistrationPolicy.py b/src/IntuneCD/backup/Entra/backup_deviceRegistrationPolicy.py
new file mode 100644
index 00000000..6a3e8b04
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_deviceRegistrationPolicy.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up Device Registration settings in Entra.
+"""
+
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "https://graph.microsoft.com/beta/policies/deviceRegistrationPolicy"
+
+
+# Get Device Registration information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save Device Registration Policy settings to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/Device Registration Policy/"
+    data = makeapirequest(ENDPOINT, token)
+
+    if data:
+        results["config_count"] += 1
+        data = remove_keys(data)
+        print("Backing up Entra Device Registration Policy")
+
+        # Get filename without illegal characters
+        fname = "device_registration_policy"
+        # Save APNs as JSON or YAML depending on configured value in "-o"
+        save_output(output, configpath, fname, data)
+
+        results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Entra/backup_domains.py b/src/IntuneCD/backup/Entra/backup_domains.py
new file mode 100644
index 00000000..3abcddac
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_domains.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up Domains in Entra.
+"""
+
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "https://graph.microsoft.com/beta/domains"
+
+
+# Get Domains information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save Domains to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/Domains/"
+    data = makeapirequest(ENDPOINT, token)
+
+    if data:
+        for domain in data["value"]:
+            results["config_count"] += 1
+            data = domain
+            print("Backing up Entra Domains")
+
+            # Get filename without illegal characters
+            fname = clean_filename(domain["id"])
+            # Save APNs as JSON or YAML depending on configured value in "-o"
+            save_output(output, configpath, fname, data)
+
+            results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Entra/backup_externalIdentitiesPolicy.py b/src/IntuneCD/backup/Entra/backup_externalIdentitiesPolicy.py
new file mode 100644
index 00000000..ad182cdd
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_externalIdentitiesPolicy.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up External Collaboration Settings in Entra.
+"""
+
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "https://graph.microsoft.com/beta/policies/externalidentitiespolicy"
+
+
+# Get External Collaboration Settings information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save External Collaboration Settings to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/External Collaboration Settings/"
+    data = makeapirequest(ENDPOINT, token)
+
+    if data:
+        results["config_count"] += 1
+        data = remove_keys(data)
+        print(
+            "Backing up Entra External Collaboration Settings External Identity Policy"
+        )
+
+        # Get filename without illegal characters
+        fname = "external_identities_policy"
+        # Save APNs as JSON or YAML depending on configured value in "-o"
+        save_output(output, configpath, fname, data)
+
+        results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Entra/backup_groupSettings.py b/src/IntuneCD/backup/Entra/backup_groupSettings.py
new file mode 100644
index 00000000..4aed843c
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_groupSettings.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up Group settings in Entra.
+"""
+
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "https://graph.microsoft.com/v1.0/groupSettings"
+
+
+# Get Group Settings information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save Group settings to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/Group Settings/"
+    data = makeapirequest(ENDPOINT, token)
+
+    if data:
+        for setting in data["value"]:
+            results["config_count"] += 1
+            data = remove_keys(setting)
+            print(f"Backing up Entra Group Setting {setting['displayName']}")
+
+            # Get filename without illegal characters
+            fname = clean_filename(setting["displayName"])
+            # Save APNs as JSON or YAML depending on configured value in "-o"
+            save_output(output, configpath, fname, data)
+
+            results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Entra/backup_roamingSettings.py b/src/IntuneCD/backup/Entra/backup_roamingSettings.py
new file mode 100644
index 00000000..2b5e42ca
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_roamingSettings.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up Enterprise State Roaming in Entra.
+"""
+
+from ...intunecdlib.azure_request import make_azure_request
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "RoamingSettings"
+
+
+# Get Enterprise State Roaming information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save Enterprise State Roaming to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/Roaming Settings/"
+    data = make_azure_request(token, ENDPOINT, "?ESRV2=true")
+
+    if data:
+        results["config_count"] += 1
+        data = remove_keys(data)
+        print("Backing up Entra Enterprise State Roaming Settings")
+
+        # Get filename without illegal characters
+        fname = "roaming_settings"
+        # Save APNs as JSON or YAML depending on configured value in "-o"
+        save_output(output, configpath, fname, data)
+
+        results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Entra/backup_securityDefaults.py b/src/IntuneCD/backup/Entra/backup_securityDefaults.py
new file mode 100644
index 00000000..51ccfaa5
--- /dev/null
+++ b/src/IntuneCD/backup/Entra/backup_securityDefaults.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module backs up Security Defaults in Entra.
+"""
+
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
+
+# Set MS Graph endpoint
+ENDPOINT = "https://graph.microsoft.com/v1.0/policies/identitySecurityDefaultsEnforcementPolicy"
+
+
+# Get Security Defaults information and save in specified path
+def savebackup(path, output, token):
+    """
+    Save Security Defaults to a JSON or YAML file.
+
+    :param path: Path to save the backup to
+    :param output: Format the backup will be saved as
+    :param token: Token to use for authenticating the request
+    """
+
+    results = {"config_count": 0, "outputs": []}
+
+    configpath = path + "/" + "Entra/Security Defaults/"
+    data = makeapirequest(ENDPOINT, token)
+
+    if data:
+        results["config_count"] += 1
+        data = remove_keys(data)
+        print("Backing up Entra Security Defaults")
+
+        # Get filename without illegal characters
+        fname = "security_defaults"
+        # Save APNs as JSON or YAML depending on configured value in "-o"
+        save_output(output, configpath, fname, data)
+
+        results["outputs"].append(fname)
+
+    return results
diff --git a/src/IntuneCD/backup/Intune/__init__.py b/src/IntuneCD/backup/Intune/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/src/IntuneCD/backup/backup_AppProtection.py b/src/IntuneCD/backup/Intune/backup_AppProtection.py
similarity index 86%
rename from src/IntuneCD/backup/backup_AppProtection.py
rename to src/IntuneCD/backup/Intune/backup_AppProtection.py
index f686b662..dbd3cda8 100644
--- a/src/IntuneCD/backup/backup_AppProtection.py
+++ b/src/IntuneCD/backup/Intune/backup_AppProtection.py
@@ -5,12 +5,12 @@
 This module backs up all App Protection Polices in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceAppManagement/managedAppPolicies"
diff --git a/src/IntuneCD/backup/backup_apns.py b/src/IntuneCD/backup/Intune/backup_apns.py
similarity index 84%
rename from src/IntuneCD/backup/backup_apns.py
rename to src/IntuneCD/backup/Intune/backup_apns.py
index 356af0f5..0a8703b9 100644
--- a/src/IntuneCD/backup/backup_apns.py
+++ b/src/IntuneCD/backup/Intune/backup_apns.py
@@ -5,10 +5,10 @@
 This module backs up Apple Push Notification setting in Intune.
 """
 
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = (
diff --git a/src/IntuneCD/backup/backup_appConfiguration.py b/src/IntuneCD/backup/Intune/backup_appConfiguration.py
similarity index 90%
rename from src/IntuneCD/backup/backup_appConfiguration.py
rename to src/IntuneCD/backup/Intune/backup_appConfiguration.py
index df70a495..8174c916 100644
--- a/src/IntuneCD/backup/backup_appConfiguration.py
+++ b/src/IntuneCD/backup/Intune/backup_appConfiguration.py
@@ -8,12 +8,12 @@
 import base64
 import json
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = (
diff --git a/src/IntuneCD/backup/backup_appleEnrollmentProfile.py b/src/IntuneCD/backup/Intune/backup_appleEnrollmentProfile.py
similarity index 85%
rename from src/IntuneCD/backup/backup_appleEnrollmentProfile.py
rename to src/IntuneCD/backup/Intune/backup_appleEnrollmentProfile.py
index b7f788df..8303d228 100644
--- a/src/IntuneCD/backup/backup_appleEnrollmentProfile.py
+++ b/src/IntuneCD/backup/Intune/backup_appleEnrollmentProfile.py
@@ -5,12 +5,12 @@
 This module backs up all Apple Enrollment Profiles in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_request
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_request
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/depOnboardingSettings/"
diff --git a/src/IntuneCD/backup/backup_applications.py b/src/IntuneCD/backup/Intune/backup_applications.py
similarity index 93%
rename from src/IntuneCD/backup/backup_applications.py
rename to src/IntuneCD/backup/Intune/backup_applications.py
index 7520f726..8dde705d 100644
--- a/src/IntuneCD/backup/backup_applications.py
+++ b/src/IntuneCD/backup/Intune/backup_applications.py
@@ -7,11 +7,11 @@
 
 import re
 
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 q_param = {
diff --git a/src/IntuneCD/backup/backup_assignmentFilters.py b/src/IntuneCD/backup/Intune/backup_assignmentFilters.py
similarity index 84%
rename from src/IntuneCD/backup/backup_assignmentFilters.py
rename to src/IntuneCD/backup/Intune/backup_assignmentFilters.py
index 073c3745..5540977a 100644
--- a/src/IntuneCD/backup/backup_assignmentFilters.py
+++ b/src/IntuneCD/backup/Intune/backup_assignmentFilters.py
@@ -5,11 +5,11 @@
 This module backs up all Filters in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/assignmentFilters"
diff --git a/src/IntuneCD/backup/backup_autopilotDevices.py b/src/IntuneCD/backup/Intune/backup_autopilotDevices.py
similarity index 85%
rename from src/IntuneCD/backup/backup_autopilotDevices.py
rename to src/IntuneCD/backup/Intune/backup_autopilotDevices.py
index 5a2ac26f..c4cd5038 100644
--- a/src/IntuneCD/backup/backup_autopilotDevices.py
+++ b/src/IntuneCD/backup/Intune/backup_autopilotDevices.py
@@ -5,9 +5,9 @@
 This module backs up all Autopilot devices in Intune.
 """
 
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = (
diff --git a/src/IntuneCD/backup/backup_compliance.py b/src/IntuneCD/backup/Intune/backup_compliance.py
similarity index 87%
rename from src/IntuneCD/backup/backup_compliance.py
rename to src/IntuneCD/backup/Intune/backup_compliance.py
index 31446078..70099ab2 100644
--- a/src/IntuneCD/backup/backup_compliance.py
+++ b/src/IntuneCD/backup/Intune/backup_compliance.py
@@ -5,12 +5,12 @@
 This module backs up all Compliance Polices in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceCompliancePolicies"
diff --git a/src/IntuneCD/backup/backup_compliancePartner.py b/src/IntuneCD/backup/Intune/backup_compliancePartner.py
similarity index 86%
rename from src/IntuneCD/backup/backup_compliancePartner.py
rename to src/IntuneCD/backup/Intune/backup_compliancePartner.py
index 9395122c..26557416 100644
--- a/src/IntuneCD/backup/backup_compliancePartner.py
+++ b/src/IntuneCD/backup/Intune/backup_compliancePartner.py
@@ -5,10 +5,10 @@
 This module backs up all Compliance Partners in Intune.
 """
 
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = (
diff --git a/src/IntuneCD/backup/backup_conditionalAccess.py b/src/IntuneCD/backup/Intune/backup_conditionalAccess.py
similarity index 86%
rename from src/IntuneCD/backup/backup_conditionalAccess.py
rename to src/IntuneCD/backup/Intune/backup_conditionalAccess.py
index 8d61e58f..bbdbe7f7 100644
--- a/src/IntuneCD/backup/backup_conditionalAccess.py
+++ b/src/IntuneCD/backup/Intune/backup_conditionalAccess.py
@@ -5,11 +5,11 @@
 This module backs up all Conditional Access in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
diff --git a/src/IntuneCD/backup/backup_configurationPolicies.py b/src/IntuneCD/backup/Intune/backup_configurationPolicies.py
similarity index 86%
rename from src/IntuneCD/backup/backup_configurationPolicies.py
rename to src/IntuneCD/backup/Intune/backup_configurationPolicies.py
index 0cdf084a..36ce6f2d 100644
--- a/src/IntuneCD/backup/backup_configurationPolicies.py
+++ b/src/IntuneCD/backup/Intune/backup_configurationPolicies.py
@@ -5,17 +5,17 @@
 This module backs up all Configuration Policies in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import (
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import (
     batch_assignment,
     batch_request,
     get_object_assignment,
     get_object_details,
 )
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph base endpoint
 BASE_ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement"
diff --git a/src/IntuneCD/backup/backup_customAttributeShellScript.py b/src/IntuneCD/backup/Intune/backup_customAttributeShellScript.py
similarity index 90%
rename from src/IntuneCD/backup/backup_customAttributeShellScript.py
rename to src/IntuneCD/backup/Intune/backup_customAttributeShellScript.py
index aeee6038..5905442d 100644
--- a/src/IntuneCD/backup/backup_customAttributeShellScript.py
+++ b/src/IntuneCD/backup/Intune/backup_customAttributeShellScript.py
@@ -8,16 +8,16 @@
 import base64
 import os
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import (
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import (
     batch_assignment,
     batch_request,
     get_object_assignment,
 )
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceCustomAttributeShellScripts/"
diff --git a/src/IntuneCD/backup/backup_deviceCategories.py b/src/IntuneCD/backup/Intune/backup_deviceCategories.py
similarity index 84%
rename from src/IntuneCD/backup/backup_deviceCategories.py
rename to src/IntuneCD/backup/Intune/backup_deviceCategories.py
index 9a48e085..da40d0f6 100644
--- a/src/IntuneCD/backup/backup_deviceCategories.py
+++ b/src/IntuneCD/backup/Intune/backup_deviceCategories.py
@@ -5,11 +5,11 @@
 This module backs up Device Categories in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceCategories"
diff --git a/src/IntuneCD/backup/backup_deviceManagementSettings.py b/src/IntuneCD/backup/Intune/backup_deviceManagementSettings.py
similarity index 83%
rename from src/IntuneCD/backup/backup_deviceManagementSettings.py
rename to src/IntuneCD/backup/Intune/backup_deviceManagementSettings.py
index f9804d1d..fe7d948d 100644
--- a/src/IntuneCD/backup/backup_deviceManagementSettings.py
+++ b/src/IntuneCD/backup/Intune/backup_deviceManagementSettings.py
@@ -5,10 +5,10 @@
 This module backs up Device Management settings in Intune.
 """
 
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/settings"
diff --git a/src/IntuneCD/backup/backup_enrollmentConfigurations.py b/src/IntuneCD/backup/Intune/backup_enrollmentConfigurations.py
similarity index 87%
rename from src/IntuneCD/backup/backup_enrollmentConfigurations.py
rename to src/IntuneCD/backup/Intune/backup_enrollmentConfigurations.py
index d7e955af..30aa462d 100644
--- a/src/IntuneCD/backup/backup_enrollmentConfigurations.py
+++ b/src/IntuneCD/backup/Intune/backup_enrollmentConfigurations.py
@@ -7,12 +7,12 @@
 
 import re
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = (
diff --git a/src/IntuneCD/backup/backup_enrollmentStatusPage.py b/src/IntuneCD/backup/Intune/backup_enrollmentStatusPage.py
similarity index 89%
rename from src/IntuneCD/backup/backup_enrollmentStatusPage.py
rename to src/IntuneCD/backup/Intune/backup_enrollmentStatusPage.py
index bc4267fa..daf2ed99 100644
--- a/src/IntuneCD/backup/backup_enrollmentStatusPage.py
+++ b/src/IntuneCD/backup/Intune/backup_enrollmentStatusPage.py
@@ -5,12 +5,12 @@
 This module backs up all Windows Enrollment Status Page profiles.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = (
diff --git a/src/IntuneCD/backup/backup_groupPolicyConfiguration.py b/src/IntuneCD/backup/Intune/backup_groupPolicyConfiguration.py
similarity index 87%
rename from src/IntuneCD/backup/backup_groupPolicyConfiguration.py
rename to src/IntuneCD/backup/Intune/backup_groupPolicyConfiguration.py
index 3f477f14..f4aecd8f 100644
--- a/src/IntuneCD/backup/backup_groupPolicyConfiguration.py
+++ b/src/IntuneCD/backup/Intune/backup_groupPolicyConfiguration.py
@@ -5,12 +5,12 @@
 This module backs up Group Policy Configurations in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/groupPolicyConfigurations"
diff --git a/src/IntuneCD/backup/backup_managedGPlay.py b/src/IntuneCD/backup/Intune/backup_managedGPlay.py
similarity index 86%
rename from src/IntuneCD/backup/backup_managedGPlay.py
rename to src/IntuneCD/backup/Intune/backup_managedGPlay.py
index eacc9c01..4b12d0c5 100644
--- a/src/IntuneCD/backup/backup_managedGPlay.py
+++ b/src/IntuneCD/backup/Intune/backup_managedGPlay.py
@@ -5,10 +5,10 @@
 This module backs up Managed Google Play setting in Intune.
 """
 
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/androidManagedStoreAccountEnterpriseSettings"
diff --git a/src/IntuneCD/backup/backup_managementIntents.py b/src/IntuneCD/backup/Intune/backup_managementIntents.py
similarity index 90%
rename from src/IntuneCD/backup/backup_managementIntents.py
rename to src/IntuneCD/backup/Intune/backup_managementIntents.py
index 420247ba..97636202 100644
--- a/src/IntuneCD/backup/backup_managementIntents.py
+++ b/src/IntuneCD/backup/Intune/backup_managementIntents.py
@@ -5,15 +5,15 @@
 This module backs up all Intents in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import (
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import (
     batch_assignment,
     batch_intents,
     get_object_assignment,
 )
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph base endpoint
 BASE_ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement"
diff --git a/src/IntuneCD/backup/backup_managementPartner.py b/src/IntuneCD/backup/Intune/backup_managementPartner.py
similarity index 86%
rename from src/IntuneCD/backup/backup_managementPartner.py
rename to src/IntuneCD/backup/Intune/backup_managementPartner.py
index 42399fd0..b9ef13e5 100644
--- a/src/IntuneCD/backup/backup_managementPartner.py
+++ b/src/IntuneCD/backup/Intune/backup_managementPartner.py
@@ -5,10 +5,10 @@
 This module backs up all Management Partners in Intune.
 """
 
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceManagementPartners"
diff --git a/src/IntuneCD/backup/backup_notificationTemplate.py b/src/IntuneCD/backup/Intune/backup_notificationTemplate.py
similarity index 87%
rename from src/IntuneCD/backup/backup_notificationTemplate.py
rename to src/IntuneCD/backup/Intune/backup_notificationTemplate.py
index 1624043e..46ebd02b 100644
--- a/src/IntuneCD/backup/backup_notificationTemplate.py
+++ b/src/IntuneCD/backup/Intune/backup_notificationTemplate.py
@@ -5,11 +5,11 @@
 This module backs up all Notification Templates in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = (
diff --git a/src/IntuneCD/backup/backup_powershellScripts.py b/src/IntuneCD/backup/Intune/backup_powershellScripts.py
similarity index 90%
rename from src/IntuneCD/backup/backup_powershellScripts.py
rename to src/IntuneCD/backup/Intune/backup_powershellScripts.py
index ca2f5a72..57e9804a 100644
--- a/src/IntuneCD/backup/backup_powershellScripts.py
+++ b/src/IntuneCD/backup/Intune/backup_powershellScripts.py
@@ -8,16 +8,16 @@
 import base64
 import os
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import (
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import (
     batch_assignment,
     batch_request,
     get_object_assignment,
 )
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceManagementScripts/"
diff --git a/src/IntuneCD/backup/backup_proactiveRemediation.py b/src/IntuneCD/backup/Intune/backup_proactiveRemediation.py
similarity index 92%
rename from src/IntuneCD/backup/backup_proactiveRemediation.py
rename to src/IntuneCD/backup/Intune/backup_proactiveRemediation.py
index b5935479..20915bb2 100644
--- a/src/IntuneCD/backup/backup_proactiveRemediation.py
+++ b/src/IntuneCD/backup/Intune/backup_proactiveRemediation.py
@@ -8,16 +8,16 @@
 import base64
 import os
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import (
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import (
     batch_assignment,
     batch_request,
     get_object_assignment,
 )
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceHealthScripts"
diff --git a/src/IntuneCD/backup/backup_profiles.py b/src/IntuneCD/backup/Intune/backup_profiles.py
similarity index 66%
rename from src/IntuneCD/backup/backup_profiles.py
rename to src/IntuneCD/backup/Intune/backup_profiles.py
index 8fdeb740..4f30bf65 100644
--- a/src/IntuneCD/backup/backup_profiles.py
+++ b/src/IntuneCD/backup/Intune/backup_profiles.py
@@ -8,19 +8,19 @@
 import base64
 import os
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations"
 
 
 # Get all Device Configurations and save them in specified path
-def savebackup(path, output, exclude, token, prefix, append_id):
+def savebackup(path, output, exclude, token, prefix, append_id, ignore_omasettings):
     """
     Saves all Device Configurations in Intune to a JSON or YAML file and custom macOS/iOS to .mobileconfig.
 
@@ -90,27 +90,31 @@ def savebackup(path, output, exclude, token, prefix, append_id):
         ] == "#microsoft.graph.windows10CustomConfiguration" and profile.get(
             "omaSettings"
         ):
-            omas = []
-            for setting in profile["omaSettings"]:
-                if setting.get("isEncrypted"):
-                    decoded_oma = {}
-                    decoded_oma["@odata.type"] = setting["@odata.type"]
-                    decoded_oma["displayName"] = setting["displayName"]
-                    decoded_oma["description"] = setting["description"]
-                    decoded_oma["omaUri"] = setting["omaUri"]
-                    decoded_oma["isEncrypted"] = False
-                    decoded_oma["secretReferenceValueId"] = None
-                    oma_value = makeapirequest(
-                        ENDPOINT
-                        + "/"
-                        + pid
-                        + "/getOmaSettingPlainTextValue(secretReferenceValueId='"
-                        + setting["secretReferenceValueId"]
-                        + "')",
-                        token,
-                    )
-                    decoded_oma["value"] = oma_value
-                    omas.append(decoded_oma)
+            if not ignore_omasettings:
+                omas = []
+                for setting in profile["omaSettings"]:
+                    if setting.get("isEncrypted"):
+                        decoded_oma = {}
+                        decoded_oma["@odata.type"] = setting["@odata.type"]
+                        decoded_oma["displayName"] = setting["displayName"]
+                        decoded_oma["description"] = setting["description"]
+                        decoded_oma["omaUri"] = setting["omaUri"]
+                        decoded_oma["isEncrypted"] = False
+                        decoded_oma["secretReferenceValueId"] = None
+                        oma_value = makeapirequest(
+                            ENDPOINT
+                            + "/"
+                            + pid
+                            + "/getOmaSettingPlainTextValue(secretReferenceValueId='"
+                            + setting["secretReferenceValueId"]
+                            + "')",
+                            token,
+                        )
+                        decoded_oma["value"] = oma_value
+                        omas.append(decoded_oma)
+
+            else:
+                omas = profile["omaSettings"]
 
             profile["omaSettings"] = omas
 
diff --git a/src/IntuneCD/backup/backup_remoteAssistancePartner.py b/src/IntuneCD/backup/Intune/backup_remoteAssistancePartner.py
similarity index 87%
rename from src/IntuneCD/backup/backup_remoteAssistancePartner.py
rename to src/IntuneCD/backup/Intune/backup_remoteAssistancePartner.py
index 73589f49..6208183f 100644
--- a/src/IntuneCD/backup/backup_remoteAssistancePartner.py
+++ b/src/IntuneCD/backup/Intune/backup_remoteAssistancePartner.py
@@ -5,10 +5,10 @@
 This module backs up all Remote Assistance Partners in Intune.
 """
 
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/remoteAssistancePartners"
diff --git a/src/IntuneCD/backup/backup_shellScripts.py b/src/IntuneCD/backup/Intune/backup_shellScripts.py
similarity index 90%
rename from src/IntuneCD/backup/backup_shellScripts.py
rename to src/IntuneCD/backup/Intune/backup_shellScripts.py
index 7c015b8c..5472e85b 100644
--- a/src/IntuneCD/backup/backup_shellScripts.py
+++ b/src/IntuneCD/backup/Intune/backup_shellScripts.py
@@ -8,16 +8,16 @@
 import base64
 import os
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import (
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import (
     batch_assignment,
     batch_request,
     get_object_assignment,
 )
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceShellScripts/"
diff --git a/src/IntuneCD/backup/backup_vppTokens.py b/src/IntuneCD/backup/Intune/backup_vppTokens.py
similarity index 85%
rename from src/IntuneCD/backup/backup_vppTokens.py
rename to src/IntuneCD/backup/Intune/backup_vppTokens.py
index 5628f19b..378d478a 100644
--- a/src/IntuneCD/backup/backup_vppTokens.py
+++ b/src/IntuneCD/backup/Intune/backup_vppTokens.py
@@ -5,10 +5,10 @@
 This module backs up all VPP tokens in Intune.
 """
 
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceAppManagement/vppTokens"
diff --git a/src/IntuneCD/backup/backup_windowsDriverUpdates.py b/src/IntuneCD/backup/Intune/backup_windowsDriverUpdates.py
similarity index 84%
rename from src/IntuneCD/backup/backup_windowsDriverUpdates.py
rename to src/IntuneCD/backup/Intune/backup_windowsDriverUpdates.py
index b2074672..4b7fa714 100644
--- a/src/IntuneCD/backup/backup_windowsDriverUpdates.py
+++ b/src/IntuneCD/backup/Intune/backup_windowsDriverUpdates.py
@@ -5,12 +5,12 @@
 This module backs up all Windows Driver Update Profiles in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = (
diff --git a/src/IntuneCD/backup/backup_windowsEnrollmentProfile.py b/src/IntuneCD/backup/Intune/backup_windowsEnrollmentProfile.py
similarity index 84%
rename from src/IntuneCD/backup/backup_windowsEnrollmentProfile.py
rename to src/IntuneCD/backup/Intune/backup_windowsEnrollmentProfile.py
index 5369b9fc..0a4272e9 100644
--- a/src/IntuneCD/backup/backup_windowsEnrollmentProfile.py
+++ b/src/IntuneCD/backup/Intune/backup_windowsEnrollmentProfile.py
@@ -5,12 +5,12 @@
 This module backs up all Windows Enrollment Profiles in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/windowsAutopilotDeploymentProfiles"
diff --git a/src/IntuneCD/backup/backup_windowsFeatureUpdates.py b/src/IntuneCD/backup/Intune/backup_windowsFeatureUpdates.py
similarity index 84%
rename from src/IntuneCD/backup/backup_windowsFeatureUpdates.py
rename to src/IntuneCD/backup/Intune/backup_windowsFeatureUpdates.py
index abc7867d..88f3ed20 100644
--- a/src/IntuneCD/backup/backup_windowsFeatureUpdates.py
+++ b/src/IntuneCD/backup/Intune/backup_windowsFeatureUpdates.py
@@ -5,12 +5,12 @@
 This module backs up all Windows Feature Update Profiles in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = (
diff --git a/src/IntuneCD/backup/backup_windowsQualityUpdates.py b/src/IntuneCD/backup/Intune/backup_windowsQualityUpdates.py
similarity index 84%
rename from src/IntuneCD/backup/backup_windowsQualityUpdates.py
rename to src/IntuneCD/backup/Intune/backup_windowsQualityUpdates.py
index ac9db47a..b2f893dd 100644
--- a/src/IntuneCD/backup/backup_windowsQualityUpdates.py
+++ b/src/IntuneCD/backup/Intune/backup_windowsQualityUpdates.py
@@ -5,12 +5,12 @@
 This module backs up all Windows Quality Update Profiles in Intune.
 """
 
-from ..intunecdlib.check_prefix import check_prefix_match
-from ..intunecdlib.clean_filename import clean_filename
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import makeapirequest
-from ..intunecdlib.remove_keys import remove_keys
-from ..intunecdlib.save_output import save_output
+from ...intunecdlib.check_prefix import check_prefix_match
+from ...intunecdlib.clean_filename import clean_filename
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import makeapirequest
+from ...intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.save_output import save_output
 
 # Set MS Graph endpoint
 ENDPOINT = (
diff --git a/src/IntuneCD/backup_entra.py b/src/IntuneCD/backup_entra.py
new file mode 100644
index 00000000..67da2303
--- /dev/null
+++ b/src/IntuneCD/backup_entra.py
@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+def backup_entra(results, path, output, token, azure_token, args, exclude):
+    """
+    Imports all the backup functions and runs them
+    """
+    if args.interactiveauth:
+        from .backup.Entra.backup_deviceRegistrationPolicy import savebackup
+
+        results.append(savebackup(path, output, token))
+
+    else:
+        print(
+            "***Device Registration Policy is only available with interactive auth***"
+        )
+
+    # Payloads that uses Graph API's
+
+    if "entraAuthenticationMethods" not in exclude:
+        from .backup.Entra.backup_authenticationMethods import savebackup
+
+        results.append(savebackup(path, output, token))
+
+    if "entraAuthorizationPolicy" not in exclude:
+        from .backup.Entra.backup_authorizationPolicy import savebackup
+
+        results.append(savebackup(path, output, token))
+
+    if "entraAuthenticationFlowsPolicy" not in exclude:
+        from .backup.Entra.backup_authenticationFlowsPolicy import savebackup
+
+        results.append(savebackup(path, output, token))
+
+    if "entraDomains" not in exclude:
+        from .backup.Entra.backup_domains import savebackup
+
+        results.append(savebackup(path, output, token))
+
+    if "entraExternalIdentitiesPolicy" not in exclude:
+        from .backup.Entra.backup_externalIdentitiesPolicy import savebackup
+
+        results.append(savebackup(path, output, token))
+
+    if "entraB2BPolicy" not in exclude:
+        from .backup.Entra.backup_b2bPolicy import savebackup
+
+        results.append(savebackup(path, output, azure_token))
+
+    if "entraApplications" not in exclude:
+        from .backup.Entra.backup_applications import savebackup
+
+        results.append(savebackup(path, output, token))
+
+    if "entraGroupSettings" not in exclude:
+        from .backup.Entra.backup_groupSettings import savebackup
+
+        results.append(savebackup(path, output, token))
+
+    if "entraSecurityDefaults" not in exclude:
+        from .backup.Entra.backup_securityDefaults import savebackup
+
+        results.append(savebackup(path, output, token))
+
+    if "entraSSPR" not in exclude:
+        from .backup.Entra.backup_SSPR import savebackup
+
+        results.append(savebackup(path, output, azure_token))
+
+    if "entraRoamingSettings" not in exclude:
+        from .backup.Entra.backup_roamingSettings import savebackup
+
+        results.append(savebackup(path, output, azure_token))
diff --git a/src/IntuneCD/backup_intune.py b/src/IntuneCD/backup_intune.py
new file mode 100644
index 00000000..cfa993e6
--- /dev/null
+++ b/src/IntuneCD/backup_intune.py
@@ -0,0 +1,163 @@
+# -*- coding: utf-8 -*-
+def backup_intune(results, path, output, exclude, token, prefix, append_id, args):
+    """
+    Imports all the backup functions and runs them
+    """
+    if "AppConfigurations" not in exclude:
+        from .backup.Intune.backup_appConfiguration import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "AppProtection" not in exclude:
+        from .backup.Intune.backup_AppProtection import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "APNs" not in exclude:
+        from .backup.Intune.backup_apns import savebackup
+
+        results.append(savebackup(path, output, token))
+
+    if "VPP" not in exclude:
+        from .backup.Intune.backup_vppTokens import savebackup
+
+        results.append(savebackup(path, output, token, append_id))
+
+    if "Applications" not in exclude:
+        from .backup.Intune.backup_applications import savebackup
+
+        results.append(savebackup(path, output, exclude, token, append_id))
+
+    if "Compliance" not in exclude:
+        from .backup.Intune.backup_compliance import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "DeviceManagementSettings" not in exclude:
+        from .backup.Intune.backup_deviceManagementSettings import savebackup
+
+        results.append(savebackup(path, output, token))
+
+    if "DeviceCategories" not in exclude:
+        from .backup.Intune.backup_deviceCategories import savebackup
+
+        results.append(savebackup(path, output, token, prefix, append_id))
+
+    if "NotificationTemplate" not in exclude:
+        from .backup.Intune.backup_notificationTemplate import savebackup
+
+        results.append(savebackup(path, output, token, prefix, append_id))
+
+    if "Profiles" not in exclude:
+        from .backup.Intune.backup_profiles import savebackup
+
+        results.append(
+            savebackup(
+                path, output, exclude, token, prefix, append_id, args.ignore_omasettings
+            )
+        )
+
+    if "GPOConfigurations" not in exclude:
+        from .backup.Intune.backup_groupPolicyConfiguration import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "AppleEnrollmentProfile" not in exclude:
+        from .backup.Intune.backup_appleEnrollmentProfile import savebackup
+
+        results.append(savebackup(path, output, token, prefix, append_id))
+
+    if "WindowsEnrollmentProfile" not in exclude:
+        from .backup.Intune.backup_windowsEnrollmentProfile import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "EnrollmentStatusPage" not in exclude:
+        from .backup.Intune.backup_enrollmentStatusPage import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "EnrollmentConfigurations" not in exclude:
+        from .backup.Intune.backup_enrollmentConfigurations import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if args.autopilot == "True":
+        from .backup.Intune.backup_autopilotDevices import savebackup
+
+        savebackup(path, output, token)
+
+    if "Filters" not in exclude:
+        from .backup.Intune.backup_assignmentFilters import savebackup
+
+        results.append(savebackup(path, output, token, prefix, append_id))
+
+    if "ManagedGooglePlay" not in exclude:
+        from .backup.Intune.backup_managedGPlay import savebackup
+
+        results.append(savebackup(path, output, token, append_id))
+
+    if "Intents" not in exclude:
+        from .backup.Intune.backup_managementIntents import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "CompliancePartner" not in exclude:
+        from .backup.Intune.backup_compliancePartner import savebackup
+
+        results.append(savebackup(path, output, token, append_id))
+
+    if "ManagementPartner" not in exclude:
+        from .backup.Intune.backup_managementPartner import savebackup
+
+        results.append(savebackup(path, output, token, append_id))
+
+    if "RemoteAssistancePartner" not in exclude:
+        from .backup.Intune.backup_remoteAssistancePartner import savebackup
+
+        results.append(savebackup(path, output, token, append_id))
+
+    if "ProactiveRemediation" not in exclude:
+        from .backup.Intune.backup_proactiveRemediation import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "PowershellScripts" not in exclude:
+        from .backup.Intune.backup_powershellScripts import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "ShellScripts" not in exclude:
+        from .backup.Intune.backup_shellScripts import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "CustomAttributes" not in exclude:
+        from .backup.Intune.backup_customAttributeShellScript import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "ConfigurationPolicies" not in exclude:
+        from .backup.Intune.backup_configurationPolicies import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "ConditionalAccess" not in exclude:
+        from .backup.Intune.backup_conditionalAccess import savebackup
+
+        results.append(savebackup(path, output, token, prefix, append_id))
+
+    if "WindowsDriverUpdates" not in exclude:
+        from .backup.Intune.backup_windowsDriverUpdates import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "WindowsFeatureUpdates" not in exclude:
+        from .backup.Intune.backup_windowsFeatureUpdates import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
+
+    if "WindowsQualityUpdates" not in exclude:
+        from .backup.Intune.backup_windowsQualityUpdates import savebackup
+
+        results.append(savebackup(path, output, exclude, token, prefix, append_id))
diff --git a/src/IntuneCD/document_entra.py b/src/IntuneCD/document_entra.py
new file mode 100644
index 00000000..39b79560
--- /dev/null
+++ b/src/IntuneCD/document_entra.py
@@ -0,0 +1,117 @@
+# -*- coding: utf-8 -*-
+from .intunecdlib.documentation_functions import document_configs
+
+
+def document_entra(configpath, outpath, maxlength, split, cleanup, decode):
+    """
+    This function is used to document Entra settings.
+    """
+    document_configs(
+        f"{configpath}/Entra/Applications",
+        outpath,
+        "Applications",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    document_configs(
+        f"{configpath}/Entra/Authentication Methods",
+        outpath,
+        "Authentication Methods",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    document_configs(
+        f"{configpath}/Entra/Authentication Flows Policy",
+        outpath,
+        "Authentication Flows Policy",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    document_configs(
+        f"{configpath}/Entra/Authorization Policy",
+        outpath,
+        "Authorization Policy",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    document_configs(
+        f"{configpath}/Entra/Device Registration Policy",
+        outpath,
+        "Device Registration Policy",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    document_configs(
+        f"{configpath}/Entra/Domains",
+        outpath,
+        "Domains",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    document_configs(
+        f"{configpath}/Entra/External Collaboration Settings",
+        outpath,
+        "External Collaboration Settings",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    document_configs(
+        f"{configpath}/Entra/Group Settings",
+        outpath,
+        "Group Settings",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    document_configs(
+        f"{configpath}/Entra/Password Reset Policies",
+        outpath,
+        "Password Reset Policies",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    document_configs(
+        f"{configpath}/Entra/Roaming Settings",
+        outpath,
+        "Roaming Settings",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    document_configs(
+        f"{configpath}/Entra/Security Defaults",
+        outpath,
+        "Security Defaults",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
diff --git a/src/IntuneCD/document_intune.py b/src/IntuneCD/document_intune.py
new file mode 100644
index 00000000..5032202b
--- /dev/null
+++ b/src/IntuneCD/document_intune.py
@@ -0,0 +1,367 @@
+# -*- coding: utf-8 -*-
+from .intunecdlib.documentation_functions import (
+    document_configs,
+    document_management_intents,
+)
+
+
+def document_intune(configpath, outpath, maxlength, split, cleanup, decode):
+    """
+    This function is used to document Intune configuration.
+    """
+    # Document App Configuration
+    document_configs(
+        f"{configpath}/App Configuration",
+        outpath,
+        "App Configuration",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document App Protection
+    document_configs(
+        f"{configpath}/App Protection",
+        outpath,
+        "App Protection",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Apple Push Notification
+    document_configs(
+        f"{configpath}/Apple Push Notification",
+        outpath,
+        "Apple Push Notification",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Apple VPP Tokens
+    document_configs(
+        f"{configpath}/Apple VPP Tokens",
+        outpath,
+        "Apple VPP Tokens",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document iOS Applications
+    document_configs(
+        f"{configpath}/Applications/iOS",
+        outpath,
+        "iOS Applications",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document macOS Applications
+    document_configs(
+        f"{configpath}/Applications/macOS",
+        outpath,
+        "macOS Applications",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Android Applications
+    document_configs(
+        f"{configpath}/Applications/Android",
+        outpath,
+        "Android Applications",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Windows Applications
+    document_configs(
+        f"{configpath}/Applications/Windows",
+        outpath,
+        "Windows Applications",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Web Apps
+    document_configs(
+        f"{configpath}/Applications/Web App",
+        outpath,
+        "Web Applications",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Office Suite apps
+    document_configs(
+        f"{configpath}/Applications/Office Suite",
+        outpath,
+        "Office Suite Applications",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document compliance
+    document_configs(
+        f"{configpath}/Compliance Policies/Policies",
+        outpath,
+        "Compliance Policies",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Message Templates
+    document_configs(
+        f"{configpath}/Compliance Policies/Message Templates",
+        outpath,
+        "Message Templates",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Conditional Access
+    document_configs(
+        f"{configpath}/Conditional Access",
+        outpath,
+        "Conditional Access",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document profiles
+    document_configs(
+        f"{configpath}/Device Configurations",
+        outpath,
+        "Configuration Profiles",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Device Management Settings
+    document_configs(
+        f"{configpath}/Device Management Settings",
+        outpath,
+        "Device Management Settings",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Group Policy Configurations
+    document_configs(
+        f"{configpath}/Group Policy Configurations",
+        outpath,
+        "Group Policy Configurations",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Apple Enrollment Profiles
+    document_configs(
+        f"{configpath}/Enrollment Profiles/Apple",
+        outpath,
+        "Apple Enrollment Profiles",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Windows Enrollment Profiles
+    document_configs(
+        f"{configpath}/Enrollment Profiles/Windows",
+        outpath,
+        "Windows Enrollment Profiles",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Enrollment Status Page profiles
+    document_configs(
+        f"{configpath}/Enrollment Profiles/Windows/ESP",
+        outpath,
+        "Enrollment Status Page",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Enrollment Configurations
+    document_configs(
+        f"{configpath}/Enrollment Configurations",
+        outpath,
+        "Enrollment Configurations",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Device Categories
+    document_configs(
+        f"{configpath}/Device Categories",
+        outpath,
+        "Device Categories",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document filters
+    document_configs(
+        f"{configpath}/Filters",
+        outpath,
+        "Filters",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Managed Google Play
+    document_configs(
+        f"{configpath}/Managed Google Play",
+        outpath,
+        "Managed Google Play",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Intents
+    document_management_intents(
+        f"{configpath}/Management Intents/", outpath, "Management Intents", split
+    )
+
+    # Document Partner Connections
+    document_configs(
+        f"{configpath}/Partner Connections/",
+        outpath,
+        "Partner Connections",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Proactive Remediations
+    document_configs(
+        f"{configpath}/Proactive Remediations",
+        outpath,
+        "Proactive Remediations",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Shell Scripts
+    document_configs(
+        f"{configpath}/Scripts/Shell",
+        outpath,
+        "Shell Scripts",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Custom Attributes
+    document_configs(
+        f"{configpath}/Custom Attributes",
+        outpath,
+        "Custom Attributes",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Powershell Scripts
+    document_configs(
+        f"{configpath}/Scripts/Powershell",
+        outpath,
+        "Powershell Scripts",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Settings Catalog
+    document_configs(
+        f"{configpath}/Settings Catalog",
+        outpath,
+        "Settings Catalog",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Windows Driver Update Profiles
+    document_configs(
+        f"{configpath}/Driver Updates",
+        outpath,
+        "Windows Driver Updates",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Windows Feature Update Profiles
+    document_configs(
+        f"{configpath}/Feature Updates",
+        outpath,
+        "Windows Feature Updates",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
+
+    # Document Windows Quality Update Profiles
+    document_configs(
+        f"{configpath}/Quality Updates",
+        outpath,
+        "Windows Quality Updates",
+        maxlength,
+        split,
+        cleanup,
+        decode,
+    )
diff --git a/src/IntuneCD/intunecdlib/assignment_report.py b/src/IntuneCD/intunecdlib/assignment_report.py
index b8710034..006e3268 100644
--- a/src/IntuneCD/intunecdlib/assignment_report.py
+++ b/src/IntuneCD/intunecdlib/assignment_report.py
@@ -79,11 +79,7 @@ def process_file(path, name, payload_type, groups):
                     break
 
     def collect_groups(path):
-        exclude = set(
-            [
-                "__archive__",
-            ]
-        )
+        exclude = set(["__archive__", "Entra"])
         groups = []
         slash = "/"
         run_os = platform.uname().system
diff --git a/src/IntuneCD/intunecdlib/azure_request.py b/src/IntuneCD/intunecdlib/azure_request.py
new file mode 100644
index 00000000..fefa1382
--- /dev/null
+++ b/src/IntuneCD/intunecdlib/azure_request.py
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+import json
+from uuid import uuid4
+
+import requests
+
+BASE_URL = "https://main.iam.ad.ext.azure.com/api/"
+
+
+def make_azure_request(token, api_endpoint, q_param=None) -> dict:
+    """Make a request to the Azure API.
+
+    Args:
+        token (str): The token to use for authenticating the request.
+        api_endpoint (str): The endpoint to make the request to.
+        q_param (str, optional): Query parameter to use. Defaults to None.
+
+    Raises:
+        requests.exceptions.HTTPError: If the request fails.
+
+    Returns:
+        dict: The response from the request.
+    """
+    header = {
+        "Authorization": f"Bearer {token}",
+        "Content-Type": "application/json",
+        "x-ms-client-request-id": str(uuid4()),
+        "x-ms-correlation-id": str(uuid4()),
+        "host": "main.iam.ad.ext.azure.com",
+    }
+
+    if q_param:
+        response = requests.get(
+            f"{BASE_URL}{api_endpoint}", headers=header, params=q_param
+        )
+    else:
+        response = requests.get(f"{BASE_URL}{api_endpoint}", headers=header)
+
+    if response.status_code == 200:
+        return json.loads(response.text)
+    if response.status_code == 404:
+        print(f"Resource not found in Azure: {api_endpoint}")
+    else:
+        raise requests.exceptions.HTTPError(
+            f"Failed to get data from {api_endpoint} - {response.text}"
+        )
+
+
+def make_azure_request_put(token, api_endpoint, data, q_param=None, status_code=204):
+    """Make a request to the Azure API.
+
+    Args:
+        token (str): The token to use for authenticating the request.
+        api_endpoint (str): The endpoint to make the request to.
+        q_param (str, optional): Query parameter to use. Defaults to None.
+        status_code (int, optional): The status code to expect from the request. Defaults to 204.
+
+    Raises:
+        requests.exceptions.HTTPError: If the request fails.
+    """
+    header = {
+        "Authorization": f"Bearer {token}",
+        "Content-Type": "application/json",
+        "x-ms-client-request-id": str(uuid4()),
+        "x-ms-correlation-id": str(uuid4()),
+        "host": "main.iam.ad.ext.azure.com",
+    }
+
+    if q_param:
+        response = requests.put(
+            f"{BASE_URL}{api_endpoint}", headers=header, params=q_param, data=data
+        )
+    else:
+        response = requests.put(f"{BASE_URL}{api_endpoint}", headers=header, data=data)
+
+    if response.status_code == status_code:
+        pass
+    else:
+        raise requests.exceptions.HTTPError(
+            f"Failed to post data {api_endpoint} - {response.text}"
+        )
+
+
+def make_azure_request_post(token, api_endpoint, data, q_param=None, status_code=204):
+    """Make a request to the Azure API.
+
+    Args:
+        token (str): The token to use for authenticating the request.
+        api_endpoint (str): The endpoint to make the request to.
+        q_param (str, optional): Query parameter to use. Defaults to None.
+        status_code (int, optional): The status code to expect from the request. Defaults to 204.
+
+    Raises:
+        requests.exceptions.HTTPError: If the request fails.
+    """
+    header = {
+        "Authorization": f"Bearer {token}",
+        "Content-Type": "application/json",
+        "x-ms-client-request-id": str(uuid4()),
+        "x-ms-correlation-id": str(uuid4()),
+        "host": "main.iam.ad.ext.azure.com",
+    }
+
+    if q_param:
+        response = requests.post(
+            f"{BASE_URL}{api_endpoint}", headers=header, params=q_param, data=data
+        )
+    else:
+        response = requests.post(f"{BASE_URL}{api_endpoint}", headers=header, data=data)
+
+    if response.status_code == status_code:
+        pass
+    else:
+        raise requests.exceptions.HTTPError(
+            f"Failed to post data {api_endpoint} - {response.text}"
+        )
+
+
+def make_azure_request_patch(token, api_endpoint, data, q_param=None, status_code=204):
+    """Make a request to the Azure API.
+
+    Args:
+        token (str): The token to use for authenticating the request.
+        api_endpoint (str): The endpoint to make the request to.
+        q_param (str, optional): Query parameter to use. Defaults to None.
+        status_code (int, optional): The status code to expect from the request. Defaults to 204.
+
+    Raises:
+        requests.exceptions.HTTPError: If the request fails.
+    """
+    header = {
+        "Authorization": f"Bearer {token}",
+        "Content-Type": "application/json",
+        "x-ms-client-request-id": str(uuid4()),
+        "x-ms-correlation-id": str(uuid4()),
+        "host": "main.iam.ad.ext.azure.com",
+    }
+
+    if q_param:
+        response = requests.patch(
+            f"{BASE_URL}{api_endpoint}", headers=header, params=q_param, data=data
+        )
+    else:
+        response = requests.patch(
+            f"{BASE_URL}{api_endpoint}", headers=header, data=data
+        )
+
+    if response.status_code == status_code:
+        pass
+    else:
+        raise requests.exceptions.HTTPError(
+            f"Failed to post data {api_endpoint} - {response.text}"
+        )
diff --git a/src/IntuneCD/intunecdlib/diff_summary.py b/src/IntuneCD/intunecdlib/diff_summary.py
index f3d68b09..5e1f8f1d 100644
--- a/src/IntuneCD/intunecdlib/diff_summary.py
+++ b/src/IntuneCD/intunecdlib/diff_summary.py
@@ -46,7 +46,10 @@ def __post_init__(self):
             self.diffs.append(vals)
 
         if self.diffs and not self.message:
-            print(f"Updating {self.type}: {self.name}, values changed:")
+            if self.name:
+                print(f"Updating {self.type}: {self.name}, values changed:")
+            else:
+                print(f"Updating {self.type}, values changed:")
             for item in self.diffs:
                 print(
                     f"Setting: {item['setting']}, New Value: {item['new_val']}, Old Value: {item['old_val']}"
diff --git a/src/IntuneCD/intunecdlib/documentation_functions.py b/src/IntuneCD/intunecdlib/documentation_functions.py
index 1c28da17..8c4a4fc6 100644
--- a/src/IntuneCD/intunecdlib/documentation_functions.py
+++ b/src/IntuneCD/intunecdlib/documentation_functions.py
@@ -145,7 +145,10 @@ def is_base64(s):
     """Check if a string is a valid base64-encoded string"""
     try:
         # Attempt to decode the string
-        decoded = base64.b64decode(s)
+        if isinstance(s, str):
+            decoded = base64.b64decode(s.encode())
+        else:
+            decoded = base64.b64decode(s)
         # If decoding succeeds and the decoded bytes match the original string, it's a valid base64-encoded string
         return decoded == s.encode()
     except (TypeError, binascii.Error):
@@ -264,6 +267,18 @@ def string(s) -> str:
     return values
 
 
+def write_type_header(split, outpath, header):
+    """
+    This function writes the header to the Markdown document.
+
+    :param outpath: The path to save the Markdown document to
+    :param header: Header of the configuration being documented
+    """
+    if not split:
+        with open(outpath, "a", encoding="utf-8") as md:
+            md.write("# " + header + "\n")
+
+
 def document_configs(configpath, outpath, header, max_length, split, cleanup, decode):
     """
     This function documents the configuration.
@@ -282,7 +297,7 @@ def document_configs(configpath, outpath, header, max_length, split, cleanup, de
             outpath = configpath + "/" + header + ".md"
             md_file(outpath)
         with open(outpath, "a", encoding="utf-8") as md:
-            md.write("# " + header + "\n")
+            md.write("## " + header + "\n")
 
         pattern = configpath + "*/*"
         for filename in sorted(glob.glob(pattern, recursive=True), key=str.casefold):
@@ -345,15 +360,26 @@ def document_configs(configpath, outpath, header, max_length, split, cleanup, de
                 # Write data to file
                 with open(outpath, "a", encoding="utf-8") as md:
                     if "displayName" in repo_data:
-                        md.write("## " + repo_data["displayName"] + "\n")
+                        md.write("### " + repo_data["displayName"] + "\n")
                     if "name" in repo_data:
-                        md.write("## " + repo_data["name"] + "\n")
+                        md.write("### " + repo_data["name"] + "\n")
+                    if "displayName" not in repo_data and "name" not in repo_data:
+                        # Remove the file extension
+                        filename_without_ext = os.path.splitext(filename)[0]
+                        # Get basename
+                        filename_without_ext = os.path.basename(filename_without_ext)
+                        # Replace underscores with spaces
+                        formatted_filename = filename_without_ext.replace(
+                            "_", " "
+                        ).title()
+                        if formatted_filename != header:
+                            md.write("### " + formatted_filename + "\n")
                     if description:
                         md.write(f"Description: {escape_markdown(description)} \n")
                     if assignments_table:
-                        md.write("### Assignments \n")
+                        md.write("#### Assignments \n")
                         md.write(str(assignments_table) + "\n")
-                    md.write("### Configuration \n")
+                    md.write("#### Configuration \n")
                     md.write(str(config_table) + "\n")
 
 
@@ -373,7 +399,7 @@ def document_management_intents(configpath, outpath, header, split):
             outpath = configpath + "/" + header + ".md"
             md_file(outpath)
         with open(outpath, "a", encoding="utf-8") as md:
-            md.write("# " + header + "\n")
+            md.write("## " + header + "\n")
 
         pattern = configpath + "*/*"
         for filename in sorted(glob.glob(pattern, recursive=True), key=str.casefold):
@@ -455,15 +481,15 @@ def document_management_intents(configpath, outpath, header, split):
                 # Write data to file
                 with open(outpath, "a", encoding="utf-8") as md:
                     if "displayName" in repo_data:
-                        md.write("## " + repo_data["displayName"] + "\n")
+                        md.write("### " + repo_data["displayName"] + "\n")
                     if "name" in repo_data:
-                        md.write("## " + repo_data["name"] + "\n")
+                        md.write("### " + repo_data["name"] + "\n")
                     if description:
                         md.write(f"Description: {escape_markdown(description)} \n")
                     if assignments_table:
-                        md.write("### Assignments \n")
+                        md.write("#### Assignments \n")
                         md.write(str(assignments_table) + "\n")
-                    md.write("### Configuration \n")
+                    md.write("#### Configuration \n")
                     md.write(str(config_table) + "\n")
 
 
diff --git a/src/IntuneCD/intunecdlib/get_accesstoken.py b/src/IntuneCD/intunecdlib/get_accesstoken.py
index 25f1540c..20f7d2bf 100644
--- a/src/IntuneCD/intunecdlib/get_accesstoken.py
+++ b/src/IntuneCD/intunecdlib/get_accesstoken.py
@@ -5,7 +5,12 @@
 This module contains the functions used to get the access token for MS Graph.
 """
 
+import json
+import os
+from time import sleep
 
+import requests
+from cryptography.fernet import Fernet
 from msal import ConfidentialClientApplication, PublicClientApplication
 
 AUTHORITY = "https://login.microsoftonline.com/"
@@ -128,3 +133,112 @@ def obtain_accesstoken_interactive(TENANT_NAME, CLIENT_ID):
         raise ValueError("Error obtaining access token: " + str(e))
 
     return token
+
+
+def obtain_azure_token(TENANT_ID: str, PATH: str) -> str:
+    """Obtains an access token for use with Azure internal APIs.
+       If a key is provided, the refresh token will be encrypted and stored in a cache file.
+
+    Args:
+        TENANT_ID (str): ID of the tenant
+        PATH (str): Path to the backup folder
+
+    Raises:
+        ValueError: If no tenant ID is provided
+        TimeoutError: Timed out waiting for token
+
+    Returns:
+        str: The access token
+    """
+    if not TENANT_ID:
+        raise ValueError("No tenant ID provided")
+
+    client_id = "1950a258-227b-4e31-a9cf-717495945fc2"
+    # refresh_token = os.environ.get("REFRESH_TOKEN")
+    key = os.environ.get("KEY")
+
+    def _write_refresh_token(refresh_token):
+        cipher_suite = Fernet(key)
+        cipher_text = cipher_suite.encrypt(refresh_token.encode("utf-8"))
+
+        with open(f"{PATH}/cache.bin", "wb") as f:
+            f.write(cipher_text)
+
+    def _read_refresh_token():
+        cipher_suite = Fernet(key)
+
+        if not os.path.exists(f"{PATH}/cache.bin"):
+            return None
+
+        with open(f"{PATH}/cache.bin", "rb") as f:
+            cipher_text = f.read()
+
+        plain_text = cipher_suite.decrypt(cipher_text)
+
+        token = plain_text.decode()
+
+        return token
+
+    def _get_device_code():
+        body = {
+            "resource": "74658136-14ec-4630-ad9b-26e160ff0fc6",
+            "client_id": client_id,
+        }
+
+        try:
+            code = requests.post(
+                f"https://login.microsoftonline.com/{TENANT_ID}/oauth2/devicecode",
+                data=body,
+            )
+            json_code_data = json.loads(code.text)
+            print(
+                f'Go to {json_code_data["verification_url"]} and enter {json_code_data["user_code"]}'
+            )
+
+            body = {
+                "grant_type": "urn:ietf:params:oauth:grant-type:device_code",
+                "client_id": client_id,
+                "code": json_code_data["device_code"],
+            }
+
+            return body
+
+        except ValueError as e:
+            print("Failed to get device code: ", e)
+
+    refresh_token = _read_refresh_token() if key else None
+
+    if refresh_token:
+        body = {
+            "grant_type": "refresh_token",
+            "client_id": client_id,
+            "refresh_token": refresh_token,
+        }
+    else:
+        body = _get_device_code()
+
+    try:
+        try_count = 0
+        while try_count < 10:
+            token = requests.post(
+                f"https://login.microsoftonline.com/{TENANT_ID}/oauth2/token", data=body
+            )
+            json_token_data = json.loads(token.text)
+            sleep(5)
+            if body.get("grant_type") == "refresh_token" and token.status_code == 400:
+                body = _get_device_code()
+
+            if json_token_data.get("access_token"):
+                break
+            try_count += 1
+
+        if try_count == 10:
+            raise TimeoutError("Timed out waiting for token")
+
+        if key:
+            _write_refresh_token(json_token_data["refresh_token"])
+
+        return json_token_data["access_token"]
+
+    except ValueError as e:
+        print("Failed to get token: ", e)
diff --git a/src/IntuneCD/intunecdlib/get_authparams.py b/src/IntuneCD/intunecdlib/get_authparams.py
index dd317bdb..9cf5c466 100644
--- a/src/IntuneCD/intunecdlib/get_authparams.py
+++ b/src/IntuneCD/intunecdlib/get_authparams.py
@@ -15,7 +15,7 @@
 )
 
 
-def getAuth(mode, localauth, certauth, interactiveauth, tenant):
+def getAuth(mode, localauth, certauth, interactiveauth, entra, tenant):
     """
     This function authenticates to MS Graph and returns the access token.
 
@@ -52,10 +52,15 @@ def getAuth(mode, localauth, certauth, interactiveauth, tenant):
                 tenant_TENANT_NAME = auth_dict["params"][tenant + "_TENANT_NAME"]
                 tenant_CLIENT_ID = auth_dict["params"][tenant + "_CLIENT_ID"]
                 tenant_CLIENT_SECRET = auth_dict["params"][tenant + "_CLIENT_SECRET"]
+                if entra:
+                    os.environ["TENANT_ID"] = auth_dict["params"][tenant + "_TENANT_ID"]
+                    os.environ["KEY"] = auth_dict["params"].get("KEY")
             else:
                 tenant_TENANT_NAME = os.environ.get(tenant + "_TENANT_NAME")
                 tenant_CLIENT_ID = os.environ.get(tenant + "_CLIENT_ID")
                 tenant_CLIENT_SECRET = os.environ.get(tenant + "_CLIENT_SECRET")
+                if entra:
+                    os.environ["TENANT_ID"] = os.environ.get(tenant + "_TENANT_ID")
             if not all([tenant_TENANT_NAME, tenant_CLIENT_ID, tenant_CLIENT_SECRET]):
                 raise ValueError(
                     "One or more os.environ variables for " + tenant + " not set"
@@ -72,10 +77,15 @@ def getAuth(mode, localauth, certauth, interactiveauth, tenant):
                 TENANT_NAME = auth_dict["params"]["TENANT_NAME"]
                 CLIENT_ID = auth_dict["params"]["CLIENT_ID"]
                 CLIENT_SECRET = auth_dict["params"]["CLIENT_SECRET"]
+                if entra:
+                    os.environ["TENANT_ID"] = auth_dict["params"]["TENANT_ID"]
+                    os.environ["KEY"] = auth_dict["params"].get("KEY")
             else:
                 TENANT_NAME = os.environ.get("TENANT_NAME")
                 CLIENT_ID = os.environ.get("CLIENT_ID")
                 CLIENT_SECRET = os.environ.get("CLIENT_SECRET")
+                if entra:
+                    os.environ["TENANT_ID"] = os.environ.get("TENANT_ID")
             if not all([TENANT_NAME, CLIENT_ID, CLIENT_SECRET]):
                 raise ValueError("One or more os.environ variables not set")
 
diff --git a/src/IntuneCD/run_backup.py b/src/IntuneCD/run_backup.py
index db07c455..8859df0f 100644
--- a/src/IntuneCD/run_backup.py
+++ b/src/IntuneCD/run_backup.py
@@ -27,7 +27,10 @@
 import sys
 from io import StringIO
 
+from .backup_entra import backup_entra
+from .backup_intune import backup_intune
 from .intunecdlib.archive import move_to_archive
+from .intunecdlib.get_accesstoken import obtain_azure_token
 from .intunecdlib.get_authparams import getAuth
 
 REPO_DIR = os.environ.get("REPO_DIR")
@@ -118,6 +121,19 @@ def start():
             "windowsDriverUpdates",
             "windowsFeatuteUpdates",
             "windowsQualityUpdates",
+            "entraApplications",
+            "entraAuthenticationFlowsPolicy",
+            "entraAuthenticationMethods",
+            "entraAuthorizationPolicy",
+            "entraB2BPolicy",
+            "entraDeviceRegistrationPolicy",
+            "entraExternalIdentitiesPolicy",
+            "entraGroupSettings",
+            "entraRoamingSettings",
+            "entraSecurityDefaults",
+            "entraSSPR",
+            "entraUserSettings",
+            "entraDomains",
         ],
         nargs="+",
     )
@@ -147,6 +163,16 @@ def start():
         help="When set, the id of the configuration will be appended to the name of the exported file",
         action="store_true",
     )
+    parser.add_argument(
+        "--entrabackup",
+        help="When set, backs up Entra configurations",
+        action="store_true",
+    )
+    parser.add_argument(
+        "--ignore-omasettings",
+        help="When set, ignores encrypted OMA Settings configuration type. Useful if you only want read permissions to Graph API.",
+        action="store_true",
+    )
 
     args = parser.parse_args()
 
@@ -172,166 +198,24 @@ def selected_mode(argument):
         args.localauth,
         args.certauth,
         args.interactiveauth,
+        args.entrabackup,
         tenant="DEV",
     )
 
+    if args.entrabackup:
+        azure_token = obtain_azure_token(os.environ.get("TENANT_ID"), args.path)
+
     def run_backup(path, output, exclude, token, prefix, append_id):
         results = []
 
-        if "AppConfigurations" not in exclude:
-            from .backup.backup_appConfiguration import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "AppProtection" not in exclude:
-            from .backup.backup_AppProtection import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "APNs" not in exclude:
-            from .backup.backup_apns import savebackup
-
-            results.append(savebackup(path, output, token))
-
-        if "VPP" not in exclude:
-            from .backup.backup_vppTokens import savebackup
-
-            results.append(savebackup(path, output, token, append_id))
-
-        if "Applications" not in exclude:
-            from .backup.backup_applications import savebackup
-
-            results.append(savebackup(path, output, exclude, token, append_id))
-
-        if "Compliance" not in exclude:
-            from .backup.backup_compliance import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "DeviceManagementSettings" not in exclude:
-            from .backup.backup_deviceManagementSettings import savebackup
-
-            results.append(savebackup(path, output, token))
-
-        if "DeviceCategories" not in exclude:
-            from .backup.backup_deviceCategories import savebackup
-
-            results.append(savebackup(path, output, token, prefix, append_id))
-
-        if "NotificationTemplate" not in exclude:
-            from .backup.backup_notificationTemplate import savebackup
-
-            results.append(savebackup(path, output, token, prefix, append_id))
-
-        if "Profiles" not in exclude:
-            from .backup.backup_profiles import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "GPOConfigurations" not in exclude:
-            from .backup.backup_groupPolicyConfiguration import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "AppleEnrollmentProfile" not in exclude:
-            from .backup.backup_appleEnrollmentProfile import savebackup
-
-            results.append(savebackup(path, output, token, prefix, append_id))
-
-        if "WindowsEnrollmentProfile" not in exclude:
-            from .backup.backup_windowsEnrollmentProfile import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "EnrollmentStatusPage" not in exclude:
-            from .backup.backup_enrollmentStatusPage import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "EnrollmentConfigurations" not in exclude:
-            from .backup.backup_enrollmentConfigurations import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if args.autopilot == "True":
-            from .backup.backup_autopilotDevices import savebackup
-
-            savebackup(path, output, token)
-
-        if "Filters" not in exclude:
-            from .backup.backup_assignmentFilters import savebackup
-
-            results.append(savebackup(path, output, token, prefix, append_id))
-
-        if "ManagedGooglePlay" not in exclude:
-            from .backup.backup_managedGPlay import savebackup
-
-            results.append(savebackup(path, output, token, append_id))
-
-        if "Intents" not in exclude:
-            from .backup.backup_managementIntents import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "CompliancePartner" not in exclude:
-            from .backup.backup_compliancePartner import savebackup
-
-            results.append(savebackup(path, output, token, append_id))
-
-        if "ManagementPartner" not in exclude:
-            from .backup.backup_managementPartner import savebackup
-
-            results.append(savebackup(path, output, token, append_id))
-
-        if "RemoteAssistancePartner" not in exclude:
-            from .backup.backup_remoteAssistancePartner import savebackup
-
-            results.append(savebackup(path, output, token, append_id))
-
-        if "ProactiveRemediation" not in exclude:
-            from .backup.backup_proactiveRemediation import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "PowershellScripts" not in exclude:
-            from .backup.backup_powershellScripts import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "ShellScripts" not in exclude:
-            from .backup.backup_shellScripts import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "CustomAttributes" not in exclude:
-            from .backup.backup_customAttributeShellScript import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "ConfigurationPolicies" not in exclude:
-            from .backup.backup_configurationPolicies import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "ConditionalAccess" not in exclude:
-            from .backup.backup_conditionalAccess import savebackup
-
-            results.append(savebackup(path, output, token, prefix, append_id))
-
-        if "WindowsDriverUpdates" not in exclude:
-            from .backup.backup_windowsDriverUpdates import savebackup
-
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
-
-        if "WindowsFeatureUpdates" not in exclude:
-            from .backup.backup_windowsFeatureUpdates import savebackup
+        if args.entrabackup:
+            print("***Entra backup***")
 
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
+            backup_entra(results, path, output, token, azure_token, args, exclude)
 
-        if "WindowsQualityUpdates" not in exclude:
-            from .backup.backup_windowsQualityUpdates import savebackup
+            print("***Intune backup***")
 
-            results.append(savebackup(path, output, exclude, token, prefix, append_id))
+        backup_intune(results, path, output, exclude, token, prefix, append_id, args)
 
         from .intunecdlib.assignment_report import get_group_report
 
diff --git a/src/IntuneCD/run_documentation.py b/src/IntuneCD/run_documentation.py
index 546e2e82..aad20a1b 100644
--- a/src/IntuneCD/run_documentation.py
+++ b/src/IntuneCD/run_documentation.py
@@ -27,11 +27,12 @@
 
 from markdown_toclify import markdown_toclify
 
+from .document_entra import document_entra
+from .document_intune import document_intune
 from .intunecdlib.documentation_functions import (
-    document_configs,
-    document_management_intents,
     get_md_files,
     md_file,
+    write_type_header,
 )
 
 REPO_DIR = os.environ.get("REPO_DIR")
@@ -104,362 +105,13 @@ def run_documentation(
         if not split:
             md_file(outpath)
 
-        # Document App Configuration
-        document_configs(
-            f"{configpath}/App Configuration",
-            outpath,
-            "App Configuration",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
+        write_type_header(split, outpath, "Intune")
 
-        # Document App Protection
-        document_configs(
-            f"{configpath}/App Protection",
-            outpath,
-            "App Protection",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
+        document_intune(configpath, outpath, maxlength, split, cleanup, decode)
 
-        # Document Apple Push Notification
-        document_configs(
-            f"{configpath}/Apple Push Notification",
-            outpath,
-            "Apple Push Notification",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
+        write_type_header(split, outpath, "Entra")
 
-        # Document Apple VPP Tokens
-        document_configs(
-            f"{configpath}/Apple VPP Tokens",
-            outpath,
-            "Apple VPP Tokens",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document iOS Applications
-        document_configs(
-            f"{configpath}/Applications/iOS",
-            outpath,
-            "iOS Applications",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document macOS Applications
-        document_configs(
-            f"{configpath}/Applications/macOS",
-            outpath,
-            "macOS Applications",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Android Applications
-        document_configs(
-            f"{configpath}/Applications/Android",
-            outpath,
-            "Android Applications",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Windows Applications
-        document_configs(
-            f"{configpath}/Applications/Windows",
-            outpath,
-            "Windows Applications",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Web Apps
-        document_configs(
-            f"{configpath}/Applications/Web App",
-            outpath,
-            "Web Applications",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Office Suite apps
-        document_configs(
-            f"{configpath}/Applications/Office Suite",
-            outpath,
-            "Office Suite Applications",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document compliance
-        document_configs(
-            f"{configpath}/Compliance Policies/Policies",
-            outpath,
-            "Compliance Policies",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Message Templates
-        document_configs(
-            f"{configpath}/Compliance Policies/Message Templates",
-            outpath,
-            "Message Templates",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Conditional Access
-        document_configs(
-            f"{configpath}/Conditional Access",
-            outpath,
-            "Conditional Access",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document profiles
-        document_configs(
-            f"{configpath}/Device Configurations",
-            outpath,
-            "Configuration Profiles",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Device Management Settings
-        document_configs(
-            f"{configpath}/Device Management Settings",
-            outpath,
-            "Device Management Settings",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Group Policy Configurations
-        document_configs(
-            f"{configpath}/Group Policy Configurations",
-            outpath,
-            "Group Policy Configurations",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Apple Enrollment Profiles
-        document_configs(
-            f"{configpath}/Enrollment Profiles/Apple",
-            outpath,
-            "Apple Enrollment Profiles",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Windows Enrollment Profiles
-        document_configs(
-            f"{configpath}/Enrollment Profiles/Windows",
-            outpath,
-            "Windows Enrollment Profiles",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Enrollment Status Page profiles
-        document_configs(
-            f"{configpath}/Enrollment Profiles/Windows/ESP",
-            outpath,
-            "Enrollment Status Page",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Enrollment Configurations
-        document_configs(
-            f"{configpath}/Enrollment Configurations",
-            outpath,
-            "Enrollment Configurations",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Device Categories
-        document_configs(
-            f"{configpath}/Device Categories",
-            outpath,
-            "Device Categories",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document filters
-        document_configs(
-            f"{configpath}/Filters",
-            outpath,
-            "Filters",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Managed Google Play
-        document_configs(
-            f"{configpath}/Managed Google Play",
-            outpath,
-            "Managed Google Play",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Intents
-        document_management_intents(
-            f"{configpath}/Management Intents/", outpath, "Management Intents", split
-        )
-
-        # Document Partner Connections
-        document_configs(
-            f"{configpath}/Partner Connections/",
-            outpath,
-            "Partner Connections",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Proactive Remediations
-        document_configs(
-            f"{configpath}/Proactive Remediations",
-            outpath,
-            "Proactive Remediations",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Shell Scripts
-        document_configs(
-            f"{configpath}/Scripts/Shell",
-            outpath,
-            "Shell Scripts",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Custom Attributes
-        document_configs(
-            f"{configpath}/Custom Attributes",
-            outpath,
-            "Custom Attributes",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Powershell Scripts
-        document_configs(
-            f"{configpath}/Scripts/Powershell",
-            outpath,
-            "Powershell Scripts",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Settings Catalog
-        document_configs(
-            f"{configpath}/Settings Catalog",
-            outpath,
-            "Settings Catalog",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Windows Driver Update Profiles
-        document_configs(
-            f"{configpath}/Driver Updates",
-            outpath,
-            "Windows Driver Updates",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Windows Feature Update Profiles
-        document_configs(
-            f"{configpath}/Feature Updates",
-            outpath,
-            "Windows Feature Updates",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
-
-        # Document Windows Quality Update Profiles
-        document_configs(
-            f"{configpath}/Quality Updates",
-            outpath,
-            "Windows Quality Updates",
-            maxlength,
-            split,
-            cleanup,
-            decode,
-        )
+        document_entra(configpath, outpath, maxlength, split, cleanup, decode)
 
         if jsondata:
             json_dict = json.loads(jsondata)
@@ -509,9 +161,7 @@ def run_documentation(
                     )
 
         else:
-            document = markdown_toclify(
-                input_file=outpath, back_to_top=True, exclude_h=[3]
-            )
+            document = markdown_toclify(input_file=outpath, back_to_top=True)
             with open(outpath, "w") as doc:
                 l1 = f"# {title} \n\n"
                 l2 = f"{intro} \n\n"
diff --git a/src/IntuneCD/run_update.py b/src/IntuneCD/run_update.py
index c0695593..edd94dbb 100644
--- a/src/IntuneCD/run_update.py
+++ b/src/IntuneCD/run_update.py
@@ -27,7 +27,10 @@
 import sys
 from io import StringIO
 
+from .intunecdlib.get_accesstoken import obtain_azure_token
 from .intunecdlib.get_authparams import getAuth
+from .update_entra import update_entra
+from .update_intune import update_intune
 
 REPO_DIR = os.environ.get("REPO_DIR")
 
@@ -105,6 +108,18 @@ def start():
             "DeviceManagementSettings",
             "CustomAttributes",
             "DeviceCategories",
+            "entraAuthenticationFlowsPolicy",
+            "entraAuthenticationMethods",
+            "entraAuthorizationPolicy",
+            "entraB2BPolicy",
+            "entraDeviceRegistrationPolicy",
+            "entraExternalIdentitiesPolicy",
+            "entraGroupSettings",
+            "entraRoamingSettings",
+            "entraSecurityDefaults",
+            "entraSSPR",
+            "entraAuthenticationMethodsConfigurations",
+            "entraDomains",
         ],
         nargs="+",
     )
@@ -136,6 +151,11 @@ def start():
         help="***This parameter is deprecated and will be removed in a future release***",
         type=str,
     )
+    parser.add_argument(
+        "--entraupdate",
+        help="When this parameter is set, the script will also update Entra configurations",
+        action="store_true",
+    )
 
     args = parser.parse_args()
 
@@ -161,165 +181,36 @@ def selected_mode(argument):
         args.localauth,
         args.certauth,
         args.interactiveauth,
+        args.entraupdate,
         tenant="PROD",
     )
 
+    if args.entraupdate:
+        azure_token = obtain_azure_token(os.environ.get("TENANT_ID"), args.path)
+
     def run_update(path, token, assignment, exclude, report, create_groups, remove):
         diff_count = 0
         diff_summary = []
 
-        if "AppConfigurations" not in exclude:
-            from .update.update_appConfiguration import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "AppProtection" not in exclude:
-            from .update.update_appProtection import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
+        if args.entraupdate:
+            print("***Entra update***")
 
-        if "Compliance" not in exclude:
-            from .update.update_compliance import update
+            update_entra(diff_summary, path, token, azure_token, report, args, exclude)
 
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "DeviceManagementSettings" not in exclude and args.interactiveauth is True:
-            from .update.update_deviceManagementSettings import update
-
-            diff_summary.append(update(path, token, report))
-        else:
             print("-" * 90)
-            print(
-                "***Device Management Settings is only available with interactive auth***"
-            )
-
-        if "DeviceCategories" not in exclude:
-            from .update.update_deviceCategories import update
-
-            diff_summary.append(update(path, token, report, remove))
-
-        if "NotificationTemplate" not in exclude:
-            from .update.update_notificationTemplate import update
-
-            diff_summary.append(update(path, token, report, remove))
-
-        if "Profiles" not in exclude:
-            from .update.update_profiles import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "GPOConfigurations" not in exclude:
-            from .update.update_groupPolicyConfiguration import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "AppleEnrollmentProfile" not in exclude:
-            from .update.update_appleEnrollmentProfile import update
-
-            diff_summary.append(update(path, token, report))
-
-        if "WindowsEnrollmentProfile" not in exclude:
-            from .update.update_windowsEnrollmentProfile import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "EnrollmentStatusPage" not in exclude:
-            from .update.update_enrollmentStatusPage import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "EnrollmentConfigurations" not in exclude:
-            from .update.update_enrollmentConfigurations import update
+            print("***Intune update***")
 
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "Filters" not in exclude:
-            from .update.update_assignmentFilter import update
-
-            diff_summary.append(update(path, token, report))
-
-        if "Intents" not in exclude:
-            from .update.update_managementIntents import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "ProactiveRemediation" not in exclude:
-            from .update.update_proactiveRemediation import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "PowershellScripts" not in exclude:
-            from .update.update_powershellScripts import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "ShellScripts" not in exclude:
-            from .update.update_shellScripts import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "CustomAttribute" not in exclude:
-            from .update.update_customAttributeShellScript import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "ConfigurationPolicies" not in exclude:
-            from .update.update_configurationPolicies import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "ConditionalAccess" not in exclude:
-            from .update.update_conditionalAccess import update
-
-            diff_count += update(path, token, report, remove)
-
-        if "WindowsDriverUpdateProfiles" not in exclude:
-            from .update.update_windowsDriverUpdates import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "windowsFeatureUpdates" not in exclude:
-            from .update.update_windowsFeatureUpdates import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
-            )
-
-        if "windowsQualityUpdates" not in exclude:
-            from .update.update_windowsQualityUpdates import update
-
-            diff_summary.append(
-                update(path, token, assignment, report, create_groups, remove)
+            update_intune(
+                diff_summary,
+                diff_count,
+                path,
+                token,
+                assignment,
+                report,
+                create_groups,
+                remove,
+                exclude,
+                args,
             )
 
         for sum in diff_summary:
diff --git a/src/IntuneCD/update/Entra/__init__.py b/src/IntuneCD/update/Entra/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/src/IntuneCD/update/Entra/update_SSPR.py b/src/IntuneCD/update/Entra/update_SSPR.py
new file mode 100644
index 00000000..b426d386
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_SSPR.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all SSPR Settings in Entra.
+"""
+
+import glob
+import json
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.azure_request import make_azure_request, make_azure_request_put
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+ENDPOINT = "PasswordReset/PasswordResetPolicies"
+
+
+def update(path, token, report):
+    """
+    This function updates all SSPR Settings in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set SSPR Settings path
+    configpath = path + "/Entra/Password Reset Policies/" + "password_reset_policies.*"
+
+    file = glob.glob(configpath)
+    # If SSPR path exists, continue
+    if file:
+        # get all SSPR Settings
+        entra_data = make_azure_request(token, ENDPOINT)
+
+        file = check_file(
+            path + "/Entra/Password Reset Policies/", file[0].split("/")[-1]
+        )
+        if file is False:
+            return diff_summary
+        # Check which format the file is saved as then open file, load data
+        # and set query parameter
+        with open(file, encoding="utf-8") as f:
+            repo_data = load_file(file, f)
+
+        if entra_data:
+            print("-" * 90)
+            diff = DeepDiff(
+                entra_data,
+                repo_data,
+                ignore_order=True,
+            ).get("values_changed", {})
+
+            # If any changed values are found, push them to Entra
+            if diff and report is False:
+                request_data = json.dumps(repo_data)
+                make_azure_request_put(
+                    token, ENDPOINT, data=request_data, q_param=None, status_code=200
+                )
+
+            diff_config = DiffSummary(
+                data=diff,
+                name="",
+                type="Password Reset Settings",
+            )
+
+            diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Entra/update_authenticationFlowsPolicy.py b/src/IntuneCD/update/Entra/update_authenticationFlowsPolicy.py
new file mode 100644
index 00000000..3f6a1102
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_authenticationFlowsPolicy.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all External Collaboration Settings in Entra.
+"""
+
+import glob
+import json
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPatch
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+BASE_ENDPOINT = "https://graph.microsoft.com/beta/policies/authenticationFlowsPolicy"
+
+
+def update(path, token, report):
+    """
+    This function updates all External Collaboration Settings in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set External Collaboration Settings path
+    configpath = (
+        path
+        + "/Entra/External Collaboration Settings/"
+        + "authentication_flows_policy.*"
+    )
+
+    file = glob.glob(configpath)
+    # If authentication flows policy path exists, continue
+    if file:
+        # get all External Collaboration Settings
+        entra_data = makeapirequest(BASE_ENDPOINT, token)
+
+        file = check_file(
+            path + "/Entra/External Collaboration Settings/", file[0].split("/")[-1]
+        )
+        if file is False:
+            return diff_summary
+        # Check which format the file is saved as then open file, load data
+        # and set query parameter
+        with open(file, encoding="utf-8") as f:
+            repo_data = load_file(file, f)
+
+        if entra_data:
+            print("-" * 90)
+            diff = DeepDiff(
+                entra_data["selfServiceSignUp"],
+                repo_data["selfServiceSignUp"],
+                ignore_order=True,
+            ).get("values_changed", {})
+
+            # If any changed values are found, push them to Entra
+            if diff and report is False:
+                request_data = json.dumps(
+                    {"selfServiceSignUp": repo_data["selfServiceSignUp"]}
+                )
+                makeapirequestPatch(
+                    BASE_ENDPOINT,
+                    token,
+                    q_param=None,
+                    jdata=request_data,
+                    status_code=204,
+                )
+
+            diff_config = DiffSummary(
+                data=diff,
+                name="Authentication Flows Policy",
+                type="External Collaboration Settings",
+            )
+
+            diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Entra/update_authenticationMethodsConfigurations.py b/src/IntuneCD/update/Entra/update_authenticationMethodsConfigurations.py
new file mode 100644
index 00000000..0eea290a
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_authenticationMethodsConfigurations.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all Authentication Methods in Entra.
+"""
+
+import glob
+import json
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPatch
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+BASE_ENDPOINT = "https://graph.microsoft.com/beta/policies/authenticationMethodsPolicy"
+
+
+def update(path, token, report):
+    """
+    This function updates all Authentication Methods in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set Authentication Methods path
+    configpath = path + "/Entra/Authentication Methods/" + "authentication_methods.*"
+
+    file = glob.glob(configpath)
+    # If authentication methods path exists, continue
+    if file:
+        # get all Authentication Methods
+        entra_data = makeapirequest(BASE_ENDPOINT, token)
+
+        file = check_file(
+            path + "/Entra/Authentication Methods/", file[0].split("/")[-1]
+        )
+        if file is False:
+            return diff_summary
+        # Check which format the file is saved as then open file, load data
+        # and set query parameter
+        with open(file, encoding="utf-8") as f:
+            repo_data = load_file(file, f)
+
+        if entra_data:
+            for entra_config, repo_config in zip(
+                entra_data["authenticationMethodConfigurations"],
+                repo_data["authenticationMethodConfigurations"],
+            ):
+                if repo_config["id"] == entra_config["id"]:
+                    print("-" * 90)
+                    entra_config.get("featureSettings", {}).pop(
+                        "numberMatchingRequiredState", None
+                    )
+                    repo_config.get("featureSettings", {}).pop(
+                        "numberMatchingRequiredState", None
+                    )
+                    diff = DeepDiff(
+                        entra_config,
+                        repo_config,
+                        ignore_order=True,
+                    ).get("values_changed", {})
+
+                    # If any changed values are found, push them to Entra
+                    if diff and report is False:
+                        request_data = json.dumps(repo_config)
+                        makeapirequestPatch(
+                            f"{BASE_ENDPOINT}/authenticationMethodConfigurations/{repo_config['id'].lower()}",
+                            token,
+                            q_param=None,
+                            jdata=request_data,
+                            status_code=204,
+                        )
+
+                    diff_config = DiffSummary(
+                        data=diff,
+                        name=repo_config["id"],
+                        type="Authentication Methods Configuration",
+                    )
+
+                    diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Entra/update_authenticationMethodsPolicy.py b/src/IntuneCD/update/Entra/update_authenticationMethodsPolicy.py
new file mode 100644
index 00000000..6e58ea52
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_authenticationMethodsPolicy.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all Authentication Methods in Entra.
+"""
+
+import glob
+import json
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPatch
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+BASE_ENDPOINT = "https://graph.microsoft.com/beta/policies/authenticationMethodsPolicy"
+
+
+def update(path, token, report):
+    """
+    This function updates all Authentication Methods in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set Authentication Methods path
+    configpath = path + "/Entra/Authentication Methods/" + "authentication_methods.*"
+
+    file = glob.glob(configpath)
+    # If authentication methods path exists, continue
+    if file:
+        # get all Authentication Methods
+        entra_data = makeapirequest(BASE_ENDPOINT, token)
+
+        file = check_file(
+            path + "/Entra/Authentication Methods/", file[0].split("/")[-1]
+        )
+        if file is False:
+            return diff_summary
+        # Check which format the file is saved as then open file, load data
+        # and set query parameter
+        with open(file, encoding="utf-8") as f:
+            repo_data = load_file(file, f)
+
+        if entra_data:
+            print("-" * 90)
+            entra_data.pop("authenticationMethodConfigurations", None)
+            entra_data.pop("policyMigrationState", None)
+            repo_data.pop("authenticationMethodConfigurations", None)
+            repo_data.pop("policyMigrationState", None)
+
+            diff = DeepDiff(
+                entra_data,
+                repo_data,
+                ignore_order=True,
+            ).get("values_changed", {})
+
+            # If any changed values are found, push them to Entra
+            if diff and report is False:
+                request_data = json.dumps(repo_data)
+                makeapirequestPatch(
+                    BASE_ENDPOINT,
+                    token,
+                    q_param=None,
+                    jdata=request_data,
+                    status_code=204,
+                )
+
+            diff_config = DiffSummary(
+                data=diff,
+                name="",
+                type="Authentication Methods Policy",
+            )
+
+            diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Entra/update_authorizationPolicy.py b/src/IntuneCD/update/Entra/update_authorizationPolicy.py
new file mode 100644
index 00000000..e8430076
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_authorizationPolicy.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all External Collaboration Settings in Entra.
+"""
+
+import glob
+import json
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPatch
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+BASE_ENDPOINT = "https://graph.microsoft.com/beta/policies/authorizationPolicy"
+
+
+def update(path, token, report):
+    """
+    This function updates all External Collaboration Settings in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set External Collaboration Settings path
+    configpath = path + "/Entra/Authorization Policy/" + "authorization_policy.*"
+
+    file = glob.glob(configpath)
+    # If authorization policy path exists, continue
+    if file:
+        # get all External Collaboration Settings
+        entra_data = makeapirequest(BASE_ENDPOINT, token)
+
+        file = check_file(path + "/Entra/Authorization Policy/", file[0].split("/")[-1])
+        if file is False:
+            return diff_summary
+        # Check which format the file is saved as then open file, load data
+        # and set query parameter
+        with open(file, encoding="utf-8") as f:
+            repo_data = load_file(file, f)
+
+        if entra_data and entra_data.get("value"):
+            print("-" * 90)
+            diff = DeepDiff(
+                entra_data["value"][0],
+                repo_data,
+                ignore_order=True,
+            ).get("values_changed", {})
+
+            # If any changed values are found, push them to Entra
+            if diff and report is False:
+                request_data = json.dumps(repo_data)
+                makeapirequestPatch(
+                    BASE_ENDPOINT + "/authorizationPolicy",
+                    token,
+                    q_param=None,
+                    jdata=request_data,
+                    status_code=204,
+                )
+
+            diff_config = DiffSummary(
+                data=diff,
+                name="Authorization Policy",
+                type="External Collaboration Settings",
+            )
+
+            diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Entra/update_b2bPolicy.py b/src/IntuneCD/update/Entra/update_b2bPolicy.py
new file mode 100644
index 00000000..b020549d
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_b2bPolicy.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all b2bpolicy Settings in Entra.
+"""
+
+import glob
+import json
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.azure_request import make_azure_request, make_azure_request_post
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+ENDPOINT = "B2B/b2bPolicy"
+
+
+def update(path, token, report):
+    """
+    This function updates all b2bpolicy Settings in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set b2bpolicy Settings path
+    configpath = path + "/Entra/External Collaboration Settings/" + "b2b_policy.*"
+
+    file = glob.glob(configpath)
+    # If b2bpolicy path exists, continue
+    if file:
+        # get all b2bpolicy Settings
+        entra_data = make_azure_request(token, ENDPOINT)
+
+        file = check_file(
+            path + "/Entra/External Collaboration Settings/", file[0].split("/")[-1]
+        )
+        if file is False:
+            return diff_summary
+        # Check which format the file is saved as then open file, load data
+        # and set query parameter
+        with open(file, encoding="utf-8") as f:
+            repo_data = load_file(file, f)
+
+        if entra_data:
+            print("-" * 90)
+            diff = DeepDiff(
+                entra_data,
+                repo_data,
+                ignore_order=True,
+            ).get("values_changed", {})
+
+            # If any changed values are found, push them to Entra
+            if diff and report is False:
+                request_data = json.dumps(repo_data)
+                make_azure_request_post(
+                    token, ENDPOINT, data=request_data, q_param=None, status_code=200
+                )
+
+            diff_config = DiffSummary(
+                data=diff,
+                name="b2bpolicy",
+                type="External Collaboration Settings",
+            )
+
+            diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Entra/update_deviceRegistrationPolicy.py b/src/IntuneCD/update/Entra/update_deviceRegistrationPolicy.py
new file mode 100644
index 00000000..cf7b75b4
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_deviceRegistrationPolicy.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all Device Registration Policy in Entra.
+"""
+
+import glob
+import json
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPut
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+BASE_ENDPOINT = "https://graph.microsoft.com/beta/policies/deviceRegistrationPolicy"
+
+
+def update(path, token, report):
+    """
+    This function updates all Device Registration Policy in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set Device Registration Policy path
+    configpath = (
+        path + "/Entra/Device Registration Policy/" + "device_registration_policy.*"
+    )
+
+    file = glob.glob(configpath)
+    # If device registration policy path exists, continue
+    if file:
+        # get all Device Registration Policy
+        entra_data = makeapirequest(BASE_ENDPOINT, token)
+
+        file = check_file(
+            path + "/Entra/Device Registration Policy/", file[0].split("/")[-1]
+        )
+        if file is False:
+            return diff_summary
+        # Check which format the file is saved as then open file, load data
+        # and set query parameter
+        with open(file, encoding="utf-8") as f:
+            repo_data = load_file(file, f)
+
+        if entra_data:
+            print("-" * 90)
+            diff = DeepDiff(
+                entra_data,
+                repo_data,
+                ignore_order=True,
+            ).get("values_changed", {})
+
+            # If any changed values are found, push them to Entra
+            if diff and report is False:
+                request_data = json.dumps(repo_data)
+                makeapirequestPut(
+                    BASE_ENDPOINT,
+                    token,
+                    q_param=None,
+                    jdata=request_data,
+                )
+
+            diff_config = DiffSummary(
+                data=diff,
+                name="",
+                type="Device Registration Policy",
+            )
+
+            diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Entra/update_domains.py b/src/IntuneCD/update/Entra/update_domains.py
new file mode 100644
index 00000000..2a290867
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_domains.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all Domains in Entra.
+"""
+
+import json
+import os
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPatch
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+BASE_ENDPOINT = "https://graph.microsoft.com/beta/domains"
+
+
+def update(path, token, report):
+    """
+    This function updates all Domains in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set Domains path
+    configpath = path + "/Entra/Domains/"
+    if os.path.exists(configpath):
+        for filename in os.listdir(configpath):
+            file = check_file(configpath, filename)
+            if file is False:
+                continue
+            with open(file, encoding="utf-8") as f:
+                repo_data = load_file(filename, f)
+
+            entra_data = makeapirequest(
+                BASE_ENDPOINT, token, q_param=f"?$filter=id eq '{repo_data['id']}'"
+            )
+
+            if entra_data and entra_data.get("value"):
+                print("-" * 90)
+                diff = DeepDiff(
+                    entra_data["value"][0],
+                    repo_data,
+                    ignore_order=True,
+                ).get("values_changed", {})
+
+                # If any changed values are found, push them to Entra
+                if diff and report is False:
+                    request_data = json.dumps(repo_data)
+                    makeapirequestPatch(
+                        BASE_ENDPOINT + "/" + repo_data["id"],
+                        token,
+                        q_param=None,
+                        jdata=request_data,
+                        status_code=204,
+                    )
+
+                diff_config = DiffSummary(
+                    data=diff,
+                    name=repo_data["id"],
+                    type="Domains",
+                )
+
+                diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Entra/update_externalIdentitiesPolicy.py b/src/IntuneCD/update/Entra/update_externalIdentitiesPolicy.py
new file mode 100644
index 00000000..08b17287
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_externalIdentitiesPolicy.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all External Collaboration Settings in Entra.
+"""
+
+import glob
+import json
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPatch
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+BASE_ENDPOINT = "https://graph.microsoft.com/beta/policies/externalidentitiespolicy"
+
+
+def update(path, token, report):
+    """
+    This function updates all External Collaboration Settings in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set External Collaboration Settings path
+    configpath = (
+        path
+        + "/Entra/External Collaboration Settings/"
+        + "external_identities_policy.*"
+    )
+
+    file = glob.glob(configpath)
+    # If external identities policy path exists, continue
+    if file:
+        # get all External Collaboration Settings
+        entra_data = makeapirequest(BASE_ENDPOINT, token)
+
+        file = check_file(
+            path + "/Entra/External Collaboration Settings/", file[0].split("/")[-1]
+        )
+        if file is False:
+            return diff_summary
+        # Check which format the file is saved as then open file, load data
+        # and set query parameter
+        with open(file, encoding="utf-8") as f:
+            repo_data = load_file(file, f)
+
+        if entra_data:
+            print("-" * 90)
+            diff = DeepDiff(
+                entra_data,
+                repo_data,
+                ignore_order=True,
+            ).get("values_changed", {})
+
+            # If any changed values are found, push them to Entra
+            if diff and report is False:
+                request_data = json.dumps(
+                    {
+                        "allowDeletedIdentitiesDataRemoval": repo_data[
+                            "allowDeletedIdentitiesDataRemoval"
+                        ],
+                        "allowExternalIdentitiesToLeave": repo_data[
+                            "allowExternalIdentitiesToLeave"
+                        ],
+                    }
+                )
+                makeapirequestPatch(
+                    BASE_ENDPOINT,
+                    token,
+                    q_param=None,
+                    jdata=request_data,
+                    status_code=204,
+                )
+
+            diff_config = DiffSummary(
+                data=diff,
+                name="External Identities Policy",
+                type="External Collaboration Settings",
+            )
+
+            diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Entra/update_groupSettings.py b/src/IntuneCD/update/Entra/update_groupSettings.py
new file mode 100644
index 00000000..bce23b7d
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_groupSettings.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all Group Settings in Entra.
+"""
+
+import json
+import os
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPatch
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+BASE_ENDPOINT = "https://graph.microsoft.com/v1.0/groupSettings"
+
+
+def update(path, token, report):
+    """
+    This function updates all Group Settings in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set Group Settings path
+    configpath = path + "/Entra/Group Settings/"
+    if os.path.exists(configpath):
+        for filename in os.listdir(configpath):
+            file = check_file(configpath, filename)
+            if file is False:
+                continue
+            with open(file, encoding="utf-8") as f:
+                repo_data = load_file(filename, f)
+
+            entra_data = makeapirequest(BASE_ENDPOINT, token)
+
+            if entra_data and entra_data.get("value"):
+                for entra_value in entra_data["value"]:
+                    if repo_data["templateId"] == entra_value["templateId"]:
+                        print("-" * 90)
+                        diff = DeepDiff(
+                            entra_value["values"],
+                            repo_data["values"],
+                            ignore_order=True,
+                        ).get("values_changed", {})
+
+                        # If any changed values are found, push them to Entra
+                        if diff and report is False:
+                            request_data = json.dumps(repo_data)
+                            makeapirequestPatch(
+                                BASE_ENDPOINT + "/" + entra_value["id"],
+                                token,
+                                q_param=None,
+                                jdata=request_data,
+                                status_code=204,
+                            )
+
+                        diff_config = DiffSummary(
+                            data=diff,
+                            name=repo_data["displayName"],
+                            type="Group Settings",
+                        )
+
+                        diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Entra/update_roamingSettings.py b/src/IntuneCD/update/Entra/update_roamingSettings.py
new file mode 100644
index 00000000..7f10b5b6
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_roamingSettings.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all Group Settings in Entra.
+"""
+
+import glob
+import json
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.azure_request import make_azure_request, make_azure_request_put
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+ENDPOINT = "RoamingSettings"
+
+
+def update(path, token, report):
+    """
+    This function updates all Group Settings in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set Group Settings path
+    configpath = path + "/Entra/Roaming Settings/" + "roaming_settings.*"
+
+    file = glob.glob(configpath)
+    # If roaming settings path exists, continue
+    if file:
+        # get all Group Settings
+        entra_data = make_azure_request(token, ENDPOINT, "?ESRV2=true")
+
+        file = check_file(path + "/Entra/Roaming Settings/", file[0].split("/")[-1])
+        if file is False:
+            return diff_summary
+        # Check which format the file is saved as then open file, load data
+        # and set query parameter
+        with open(file, encoding="utf-8") as f:
+            repo_data = load_file(file, f)
+
+        if entra_data:
+            print("-" * 90)
+            diff = DeepDiff(
+                entra_data,
+                repo_data,
+                ignore_order=True,
+            ).get("values_changed", {})
+
+            # If any changed values are found, push them to Entra
+            if diff and report is False:
+                request_data = json.dumps(repo_data)
+                make_azure_request_put(
+                    token, ENDPOINT, data=request_data, q_param="?ESRV2=true"
+                )
+
+            diff_config = DiffSummary(
+                data=diff,
+                name="",
+                type="Roaming Settings",
+            )
+
+            diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Entra/update_securityDefaults.py b/src/IntuneCD/update/Entra/update_securityDefaults.py
new file mode 100644
index 00000000..a1fcd98f
--- /dev/null
+++ b/src/IntuneCD/update/Entra/update_securityDefaults.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module is used to update all Group Settings in Entra.
+"""
+
+import glob
+import json
+
+from deepdiff import DeepDiff
+
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPatch
+from ...intunecdlib.load_file import load_file
+
+# Set MS Graph endpoint
+ENDPOINT = "https://graph.microsoft.com/v1.0/policies/identitySecurityDefaultsEnforcementPolicy"
+
+
+def update(path, token, report):
+    """
+    This function updates all Group Settings in Entra if the configuration in Entra differs from the JSON/YAML file.
+
+    :param path: Path to where the backup is saved
+    :param token: Token to use for authenticating the request
+    """
+
+    diff_summary = []
+    # Set Group Settings path
+    configpath = path + "/Entra/Security Defaults/" + "security_defaults.*"
+
+    file = glob.glob(configpath)
+    # If security defaults path exists, continue
+    if file:
+        # get all Group Settings
+        entra_data = makeapirequest(ENDPOINT, token)
+
+        file = check_file(path + "/Entra/Security Defaults/", file[0].split("/")[-1])
+        if file is False:
+            return diff_summary
+        # Check which format the file is saved as then open file, load data
+        # and set query parameter
+        with open(file, encoding="utf-8") as f:
+            repo_data = load_file(file, f)
+
+        if entra_data:
+            print("-" * 90)
+            entra_data.pop("securityDefaultsUpsell", None)
+            repo_data.pop("securityDefaultsUpsell", None)
+            diff = DeepDiff(
+                entra_data,
+                repo_data,
+                ignore_order=True,
+            ).get("values_changed", {})
+
+            # If any changed values are found, push them to Entra
+            if diff and report is False:
+                repo_data.pop("displayName")
+                repo_data.pop("description")
+                repo_data.pop("controlTypes")
+                request_data = json.dumps(repo_data)
+                makeapirequestPatch(
+                    ENDPOINT,
+                    token,
+                    q_param=None,
+                    jdata=request_data,
+                    status_code=204,
+                )
+
+            diff_config = DiffSummary(
+                data=diff,
+                name="",
+                type="Security Defaults",
+            )
+
+            diff_summary.append(diff_config)
+
+    return diff_summary
diff --git a/src/IntuneCD/update/Intune/__init__.py b/src/IntuneCD/update/Intune/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/src/IntuneCD/update/update_appConfiguration.py b/src/IntuneCD/update/Intune/update_appConfiguration.py
similarity index 96%
rename from src/IntuneCD/update/update_appConfiguration.py
rename to src/IntuneCD/update/Intune/update_appConfiguration.py
index 092b844e..62d69ec7 100644
--- a/src/IntuneCD/update/update_appConfiguration.py
+++ b/src/IntuneCD/update/Intune/update_appConfiguration.py
@@ -11,17 +11,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_appProtection.py b/src/IntuneCD/update/Intune/update_appProtection.py
similarity index 95%
rename from src/IntuneCD/update/update_appProtection.py
rename to src/IntuneCD/update/Intune/update_appProtection.py
index 9367a4b4..27a0aa95 100644
--- a/src/IntuneCD/update/update_appProtection.py
+++ b/src/IntuneCD/update/Intune/update_appProtection.py
@@ -10,17 +10,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_appleEnrollmentProfile.py b/src/IntuneCD/update/Intune/update_appleEnrollmentProfile.py
similarity index 91%
rename from src/IntuneCD/update/update_appleEnrollmentProfile.py
rename to src/IntuneCD/update/Intune/update_appleEnrollmentProfile.py
index b295272f..be2ad06e 100644
--- a/src/IntuneCD/update/update_appleEnrollmentProfile.py
+++ b/src/IntuneCD/update/Intune/update_appleEnrollmentProfile.py
@@ -10,11 +10,11 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_request import makeapirequest, makeapirequestPatch
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPatch
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/depOnboardingSettings/"
diff --git a/src/IntuneCD/update/update_assignment.py b/src/IntuneCD/update/Intune/update_assignment.py
similarity index 98%
rename from src/IntuneCD/update/update_assignment.py
rename to src/IntuneCD/update/Intune/update_assignment.py
index c8952694..76d60bac 100644
--- a/src/IntuneCD/update/update_assignment.py
+++ b/src/IntuneCD/update/Intune/update_assignment.py
@@ -10,7 +10,7 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.graph_request import makeapirequest, makeapirequestPost
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPost
 
 
 def get_added_removed(diff_object) -> list:
diff --git a/src/IntuneCD/update/update_assignmentFilter.py b/src/IntuneCD/update/Intune/update_assignmentFilter.py
similarity index 93%
rename from src/IntuneCD/update/update_assignmentFilter.py
rename to src/IntuneCD/update/Intune/update_assignmentFilter.py
index 45f38702..da2dc8cb 100644
--- a/src/IntuneCD/update/update_assignmentFilter.py
+++ b/src/IntuneCD/update/Intune/update_assignmentFilter.py
@@ -10,15 +10,15 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/assignmentFilters"
diff --git a/src/IntuneCD/update/update_compliance.py b/src/IntuneCD/update/Intune/update_compliance.py
similarity index 96%
rename from src/IntuneCD/update/update_compliance.py
rename to src/IntuneCD/update/Intune/update_compliance.py
index 3d6bf6d8..80b8f9c1 100644
--- a/src/IntuneCD/update/update_compliance.py
+++ b/src/IntuneCD/update/Intune/update_compliance.py
@@ -10,17 +10,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_conditionalAccess.py b/src/IntuneCD/update/Intune/update_conditionalAccess.py
similarity index 97%
rename from src/IntuneCD/update/update_conditionalAccess.py
rename to src/IntuneCD/update/Intune/update_conditionalAccess.py
index 2a39199c..e88993ec 100644
--- a/src/IntuneCD/update/update_conditionalAccess.py
+++ b/src/IntuneCD/update/Intune/update_conditionalAccess.py
@@ -10,15 +10,15 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
diff --git a/src/IntuneCD/update/update_configurationPolicies.py b/src/IntuneCD/update/Intune/update_configurationPolicies.py
similarity index 93%
rename from src/IntuneCD/update/update_configurationPolicies.py
rename to src/IntuneCD/update/Intune/update_configurationPolicies.py
index a35cba79..ee6d0457 100644
--- a/src/IntuneCD/update/update_configurationPolicies.py
+++ b/src/IntuneCD/update/Intune/update_configurationPolicies.py
@@ -10,16 +10,16 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPost,
     makeapirequestPut,
 )
-from ..intunecdlib.load_file import load_file
+from ...intunecdlib.load_file import load_file
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_customAttributeShellScript.py b/src/IntuneCD/update/Intune/update_customAttributeShellScript.py
similarity index 96%
rename from src/IntuneCD/update/update_customAttributeShellScript.py
rename to src/IntuneCD/update/Intune/update_customAttributeShellScript.py
index 9a429223..b6d407c4 100644
--- a/src/IntuneCD/update/update_customAttributeShellScript.py
+++ b/src/IntuneCD/update/Intune/update_customAttributeShellScript.py
@@ -11,17 +11,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_deviceCategories.py b/src/IntuneCD/update/Intune/update_deviceCategories.py
similarity index 94%
rename from src/IntuneCD/update/update_deviceCategories.py
rename to src/IntuneCD/update/Intune/update_deviceCategories.py
index 5adf453e..029095ee 100644
--- a/src/IntuneCD/update/update_deviceCategories.py
+++ b/src/IntuneCD/update/Intune/update_deviceCategories.py
@@ -10,16 +10,16 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/deviceCategories"
diff --git a/src/IntuneCD/update/update_deviceManagementSettings.py b/src/IntuneCD/update/Intune/update_deviceManagementSettings.py
similarity index 89%
rename from src/IntuneCD/update/update_deviceManagementSettings.py
rename to src/IntuneCD/update/Intune/update_deviceManagementSettings.py
index 81d250d2..6d5fa860 100644
--- a/src/IntuneCD/update/update_deviceManagementSettings.py
+++ b/src/IntuneCD/update/Intune/update_deviceManagementSettings.py
@@ -10,11 +10,11 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_request import makeapirequest, makeapirequestPatch
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import makeapirequest, makeapirequestPatch
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 
 # Set MS Graph endpoint
 ENDPOINT = "https://graph.microsoft.com/beta/deviceManagement/"
diff --git a/src/IntuneCD/update/update_enrollmentConfigurations.py b/src/IntuneCD/update/Intune/update_enrollmentConfigurations.py
similarity index 97%
rename from src/IntuneCD/update/update_enrollmentConfigurations.py
rename to src/IntuneCD/update/Intune/update_enrollmentConfigurations.py
index 9357d08b..6020a942 100644
--- a/src/IntuneCD/update/update_enrollmentConfigurations.py
+++ b/src/IntuneCD/update/Intune/update_enrollmentConfigurations.py
@@ -11,17 +11,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_enrollmentStatusPage.py b/src/IntuneCD/update/Intune/update_enrollmentStatusPage.py
similarity index 96%
rename from src/IntuneCD/update/update_enrollmentStatusPage.py
rename to src/IntuneCD/update/Intune/update_enrollmentStatusPage.py
index c673eb49..c67e96d9 100644
--- a/src/IntuneCD/update/update_enrollmentStatusPage.py
+++ b/src/IntuneCD/update/Intune/update_enrollmentStatusPage.py
@@ -10,17 +10,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_groupPolicyConfiguration.py b/src/IntuneCD/update/Intune/update_groupPolicyConfiguration.py
similarity index 98%
rename from src/IntuneCD/update/update_groupPolicyConfiguration.py
rename to src/IntuneCD/update/Intune/update_groupPolicyConfiguration.py
index 79c93a9b..9cfa3fba 100644
--- a/src/IntuneCD/update/update_groupPolicyConfiguration.py
+++ b/src/IntuneCD/update/Intune/update_groupPolicyConfiguration.py
@@ -10,17 +10,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_managementIntents.py b/src/IntuneCD/update/Intune/update_managementIntents.py
similarity index 97%
rename from src/IntuneCD/update/update_managementIntents.py
rename to src/IntuneCD/update/Intune/update_managementIntents.py
index 189ac762..46c16bbb 100644
--- a/src/IntuneCD/update/update_managementIntents.py
+++ b/src/IntuneCD/update/Intune/update_managementIntents.py
@@ -11,18 +11,18 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import (
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import (
     batch_assignment,
     batch_intents,
     get_object_assignment,
 )
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
+from ...intunecdlib.load_file import load_file
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph base endpoint
diff --git a/src/IntuneCD/update/update_notificationTemplate.py b/src/IntuneCD/update/Intune/update_notificationTemplate.py
similarity index 96%
rename from src/IntuneCD/update/update_notificationTemplate.py
rename to src/IntuneCD/update/Intune/update_notificationTemplate.py
index 289126a3..a7b669ea 100644
--- a/src/IntuneCD/update/update_notificationTemplate.py
+++ b/src/IntuneCD/update/Intune/update_notificationTemplate.py
@@ -10,16 +10,16 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 
 # Set MS Graph endpoint
 ENDPOINT = (
diff --git a/src/IntuneCD/update/update_powershellScripts.py b/src/IntuneCD/update/Intune/update_powershellScripts.py
similarity index 96%
rename from src/IntuneCD/update/update_powershellScripts.py
rename to src/IntuneCD/update/Intune/update_powershellScripts.py
index 86211abe..99a5d6d2 100644
--- a/src/IntuneCD/update/update_powershellScripts.py
+++ b/src/IntuneCD/update/Intune/update_powershellScripts.py
@@ -11,17 +11,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_proactiveRemediation.py b/src/IntuneCD/update/Intune/update_proactiveRemediation.py
similarity index 97%
rename from src/IntuneCD/update/update_proactiveRemediation.py
rename to src/IntuneCD/update/Intune/update_proactiveRemediation.py
index dd28c5f2..5414c054 100644
--- a/src/IntuneCD/update/update_proactiveRemediation.py
+++ b/src/IntuneCD/update/Intune/update_proactiveRemediation.py
@@ -11,17 +11,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_profiles.py b/src/IntuneCD/update/Intune/update_profiles.py
similarity index 97%
rename from src/IntuneCD/update/update_profiles.py
rename to src/IntuneCD/update/Intune/update_profiles.py
index 24c3f919..3bc4a764 100644
--- a/src/IntuneCD/update/update_profiles.py
+++ b/src/IntuneCD/update/Intune/update_profiles.py
@@ -13,17 +13,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_shellScripts.py b/src/IntuneCD/update/Intune/update_shellScripts.py
similarity index 96%
rename from src/IntuneCD/update/update_shellScripts.py
rename to src/IntuneCD/update/Intune/update_shellScripts.py
index 0833ec06..f7938ebf 100644
--- a/src/IntuneCD/update/update_shellScripts.py
+++ b/src/IntuneCD/update/Intune/update_shellScripts.py
@@ -11,17 +11,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_windowsDriverUpdates.py b/src/IntuneCD/update/Intune/update_windowsDriverUpdates.py
similarity index 95%
rename from src/IntuneCD/update/update_windowsDriverUpdates.py
rename to src/IntuneCD/update/Intune/update_windowsDriverUpdates.py
index ee6b9179..e50f0646 100644
--- a/src/IntuneCD/update/update_windowsDriverUpdates.py
+++ b/src/IntuneCD/update/Intune/update_windowsDriverUpdates.py
@@ -10,17 +10,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_windowsEnrollmentProfile.py b/src/IntuneCD/update/Intune/update_windowsEnrollmentProfile.py
similarity index 95%
rename from src/IntuneCD/update/update_windowsEnrollmentProfile.py
rename to src/IntuneCD/update/Intune/update_windowsEnrollmentProfile.py
index d6f3f32c..470fc22f 100644
--- a/src/IntuneCD/update/update_windowsEnrollmentProfile.py
+++ b/src/IntuneCD/update/Intune/update_windowsEnrollmentProfile.py
@@ -10,17 +10,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_windowsFeatureUpdates.py b/src/IntuneCD/update/Intune/update_windowsFeatureUpdates.py
similarity index 95%
rename from src/IntuneCD/update/update_windowsFeatureUpdates.py
rename to src/IntuneCD/update/Intune/update_windowsFeatureUpdates.py
index 5d4c481c..6dbd9101 100644
--- a/src/IntuneCD/update/update_windowsFeatureUpdates.py
+++ b/src/IntuneCD/update/Intune/update_windowsFeatureUpdates.py
@@ -10,17 +10,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update/update_windowsQualityUpdates.py b/src/IntuneCD/update/Intune/update_windowsQualityUpdates.py
similarity index 95%
rename from src/IntuneCD/update/update_windowsQualityUpdates.py
rename to src/IntuneCD/update/Intune/update_windowsQualityUpdates.py
index dfecb1d9..69d7a514 100644
--- a/src/IntuneCD/update/update_windowsQualityUpdates.py
+++ b/src/IntuneCD/update/Intune/update_windowsQualityUpdates.py
@@ -10,17 +10,17 @@
 
 from deepdiff import DeepDiff
 
-from ..intunecdlib.check_file import check_file
-from ..intunecdlib.diff_summary import DiffSummary
-from ..intunecdlib.graph_batch import batch_assignment, get_object_assignment
-from ..intunecdlib.graph_request import (
+from ...intunecdlib.check_file import check_file
+from ...intunecdlib.diff_summary import DiffSummary
+from ...intunecdlib.graph_batch import batch_assignment, get_object_assignment
+from ...intunecdlib.graph_request import (
     makeapirequest,
     makeapirequestDelete,
     makeapirequestPatch,
     makeapirequestPost,
 )
-from ..intunecdlib.load_file import load_file
-from ..intunecdlib.remove_keys import remove_keys
+from ...intunecdlib.load_file import load_file
+from ...intunecdlib.remove_keys import remove_keys
 from .update_assignment import post_assignment_update, update_assignment
 
 # Set MS Graph endpoint
diff --git a/src/IntuneCD/update_entra.py b/src/IntuneCD/update_entra.py
new file mode 100644
index 00000000..69c1c5e3
--- /dev/null
+++ b/src/IntuneCD/update_entra.py
@@ -0,0 +1,68 @@
+# -*- coding: utf-8 -*-
+def update_entra(diff_summary, path, token, azure_token, report, args, exclude):
+    """
+    Imports all the update functions and runs them
+    """
+    if args.interactiveauth:
+        from .update.Entra.update_deviceRegistrationPolicy import update
+
+        diff_summary.append(update(path, token, report))
+    else:
+        print(
+            "***Device Registration Policy is only available with interactive auth***"
+        )
+
+    if "entraAuthenticationMethodsPolicy" not in exclude:
+        from .update.Entra.update_authenticationMethodsPolicy import update
+
+        diff_summary.append(update(path, token, report))
+
+    if "entraAuthenticationMethodsConfigurations" not in exclude:
+        from .update.Entra.update_authenticationMethodsConfigurations import update
+
+        diff_summary.append(update(path, token, report))
+
+    if "entraAuthorizationPolicy" not in exclude:
+        from .update.Entra.update_authorizationPolicy import update
+
+        diff_summary.append(update(path, token, report))
+
+    if "entraAuthenticationFlowsPolicy" not in exclude:
+        from .update.Entra.update_authenticationFlowsPolicy import update
+
+        diff_summary.append(update(path, token, report))
+
+    if "entraDomains" not in exclude:
+        from .update.Entra.update_domains import update
+
+        diff_summary.append(update(path, token, report))
+
+    if "entraExternalIdentitiesPolicy" not in exclude:
+        from .update.Entra.update_externalIdentitiesPolicy import update
+
+        diff_summary.append(update(path, token, report))
+
+    if "entraB2BPolicy" not in exclude:
+        from .update.Entra.update_b2bPolicy import update
+
+        diff_summary.append(update(path, azure_token, report))
+
+    if "entraGroupSettings" not in exclude:
+        from .update.Entra.update_groupSettings import update
+
+        diff_summary.append(update(path, token, report))
+
+    if "entraSecurityDefaults" not in exclude:
+        from .update.Entra.update_securityDefaults import update
+
+        diff_summary.append(update(path, token, report))
+
+    if "entraRoamingSettings" not in exclude:
+        from .update.Entra.update_roamingSettings import update
+
+        diff_summary.append(update(path, azure_token, report))
+
+    if "entraSSPR" not in exclude:
+        from .update.Entra.update_SSPR import update
+
+        diff_summary.append(update(path, azure_token, report))
diff --git a/src/IntuneCD/update_intune.py b/src/IntuneCD/update_intune.py
new file mode 100644
index 00000000..d070f4bc
--- /dev/null
+++ b/src/IntuneCD/update_intune.py
@@ -0,0 +1,169 @@
+# -*- coding: utf-8 -*-
+def update_intune(
+    diff_summary,
+    diff_count,
+    path,
+    token,
+    assignment,
+    report,
+    create_groups,
+    remove,
+    exclude,
+    args,
+):
+    """
+    Imports all the update functions and runs them
+    """
+    if "AppConfigurations" not in exclude:
+        from .update.Intune.update_appConfiguration import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "AppProtection" not in exclude:
+        from .update.Intune.update_appProtection import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "Compliance" not in exclude:
+        from .update.Intune.update_compliance import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "DeviceManagementSettings" not in exclude and args.interactiveauth is True:
+        from .update.Intune.update_deviceManagementSettings import update
+
+        diff_summary.append(update(path, token, report))
+    else:
+        print("-" * 90)
+        print(
+            "***Device Management Settings is only available with interactive auth***"
+        )
+
+    if "DeviceCategories" not in exclude:
+        from .update.Intune.update_deviceCategories import update
+
+        diff_summary.append(update(path, token, report, remove))
+
+    if "NotificationTemplate" not in exclude:
+        from .update.Intune.update_notificationTemplate import update
+
+        diff_summary.append(update(path, token, report, remove))
+
+    if "Profiles" not in exclude:
+        from .update.Intune.update_profiles import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "GPOConfigurations" not in exclude:
+        from .update.Intune.update_groupPolicyConfiguration import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "AppleEnrollmentProfile" not in exclude:
+        from .update.Intune.update_appleEnrollmentProfile import update
+
+        diff_summary.append(update(path, token, report))
+
+    if "WindowsEnrollmentProfile" not in exclude:
+        from .update.Intune.update_windowsEnrollmentProfile import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "EnrollmentStatusPage" not in exclude:
+        from .update.Intune.update_enrollmentStatusPage import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "EnrollmentConfigurations" not in exclude:
+        from .update.Intune.update_enrollmentConfigurations import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "Filters" not in exclude:
+        from .update.Intune.update_assignmentFilter import update
+
+        diff_summary.append(update(path, token, report))
+
+    if "Intents" not in exclude:
+        from .update.Intune.update_managementIntents import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "ProactiveRemediation" not in exclude:
+        from .update.Intune.update_proactiveRemediation import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "PowershellScripts" not in exclude:
+        from .update.Intune.update_powershellScripts import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "ShellScripts" not in exclude:
+        from .update.Intune.update_shellScripts import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "CustomAttribute" not in exclude:
+        from .update.Intune.update_customAttributeShellScript import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "ConfigurationPolicies" not in exclude:
+        from .update.Intune.update_configurationPolicies import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "ConditionalAccess" not in exclude:
+        from .update.Intune.update_conditionalAccess import update
+
+        diff_count += update(path, token, report, remove)
+
+    if "WindowsDriverUpdateProfiles" not in exclude:
+        from .update.Intune.update_windowsDriverUpdates import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "windowsFeatureUpdates" not in exclude:
+        from .update.Intune.update_windowsFeatureUpdates import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )
+
+    if "windowsQualityUpdates" not in exclude:
+        from .update.Intune.update_windowsQualityUpdates import update
+
+        diff_summary.append(
+            update(path, token, assignment, report, create_groups, remove)
+        )


Test patch:
diff --git a/tests/Backup/Entra/test_backup_SSPR.py b/tests/Backup/Entra/test_backup_SSPR.py
new file mode 100644
index 00000000..be4966a7
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_SSPR.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up SSPR."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_SSPR import savebackup
+
+
+class TestBackupSSPR(unittest.TestCase):
+    """Test class for backup_SSPR."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = f"{self.directory.path}/Entra/Password Reset Policies/password_reset_policies."
+        self.expected_data = {
+            "objectId": "default",
+            "enablementType": 2,
+            "numberOfAuthenticationMethodsRequired": 1,
+            "emailOptionEnabled": True,
+            "mobilePhoneOptionEnabled": True,
+            "officePhoneOptionEnabled": False,
+            "securityQuestionsOptionEnabled": False,
+            "mobileAppNotificationEnabled": False,
+            "mobileAppCodeEnabled": False,
+            "numberOfQuestionsToRegister": 5,
+        }
+        self.SSPR = self.expected_data
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_SSPR.make_azure_request"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.SSPR
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(
+            Path(f"{self.directory.path}/Entra/Password Reset Policies").exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.SSPR
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(
+            Path(f"{self.directory.path}/Entra/Password Reset Policies").exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Entra/test_backup_applications.py b/tests/Backup/Entra/test_backup_applications.py
new file mode 100644
index 00000000..0fb5b150
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_applications.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up applications."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_applications import savebackup
+
+
+class TestBackupApplications(unittest.TestCase):
+    """Test class for backup_applications."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = f"{self.directory.path}/Entra/Applications/icd."
+        self.expected_data = {
+            "deletedDateTime": None,
+            "appId": "5ba7f2e6-933d-44d9-b336-659a47381877",
+            "applicationTemplateId": None,
+            "disabledByMicrosoftStatus": None,
+            "displayName": "icd",
+            "description": None,
+        }
+        self.applications = {
+            "value": [
+                {
+                    "deletedDateTime": None,
+                    "appId": "5ba7f2e6-933d-44d9-b336-659a47381877",
+                    "applicationTemplateId": None,
+                    "disabledByMicrosoftStatus": None,
+                    "displayName": "icd",
+                    "description": None,
+                }
+            ]
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_applications.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.applications
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(Path(f"{self.directory.path}/Entra/Applications").exists())
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.applications
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(Path(f"{self.directory.path}/Entra/Applications").exists())
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Entra/test_backup_authenticationFlowsPolicy.py b/tests/Backup/Entra/test_backup_authenticationFlowsPolicy.py
new file mode 100644
index 00000000..0db392db
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_authenticationFlowsPolicy.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up authenticationFlowsPolicy."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_authenticationFlowsPolicy import savebackup
+
+
+class TestBackupAuthenticationFlowsPolicy(unittest.TestCase):
+    """Test class for backup_authenticationFlowsPolicy."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = f"{self.directory.path}/Entra/Authentication Flows Policy/authentication_flows_policy."
+        self.expected_data = {
+            "displayName": "Authentication flows policy",
+            "description": "Authentication flows policy allows modification of settings related to authentication flows in AAD tenant, such as self-service sign up configuration.",
+            "selfServiceSignUp": {"isEnabled": False},
+        }
+        self.authenticationFlowsPolicy = {
+            "displayName": "Authentication flows policy",
+            "description": "Authentication flows policy allows modification of settings related to authentication flows in AAD tenant, such as self-service sign up configuration.",
+            "selfServiceSignUp": {"isEnabled": False},
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_authenticationFlowsPolicy.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.authenticationFlowsPolicy
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(
+            Path(f"{self.directory.path}/Entra/Authentication Flows Policy").exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.authenticationFlowsPolicy
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(
+            Path(f"{self.directory.path}/Entra/Authentication Flows Policy").exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Entra/test_backup_authenticationMethods.py b/tests/Backup/Entra/test_backup_authenticationMethods.py
new file mode 100644
index 00000000..0a5e7e33
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_authenticationMethods.py
@@ -0,0 +1,110 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up authenticationMethods."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_authenticationMethods import savebackup
+
+
+class TestBackupauthenticationMethods(unittest.TestCase):
+    """Test class for backup_authenticationMethods."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = f"{self.directory.path}/Entra/Authentication Methods/authentication_methods."
+        self.expected_data = {
+            "displayName": "Authentication Methods Policy",
+            "description": "The tenant-wide policy that controls which authentication methods are allowed in the tenant, authentication method registration requirements, and self-service password reset settings",
+            "policyVersion": "1.4",
+            "policyMigrationState": "preMigration",
+            "registrationEnforcement": {
+                "authenticationMethodsRegistrationCampaign": {
+                    "snoozeDurationInDays": 1,
+                    "enforceRegistrationAfterAllowedSnoozes": True,
+                    "state": "default",
+                    "excludeTargets": [],
+                    "includeTargets": [
+                        {
+                            "id": "all_users",
+                            "targetType": "group",
+                            "targetedAuthenticationMethod": "microsoftAuthenticator",
+                        }
+                    ],
+                }
+            },
+            "systemCredentialPreferences": {
+                "state": "default",
+                "excludeTargets": [],
+                "includeTargets": [{"id": "all_users", "targetType": "group"}],
+            },
+            "reportSuspiciousActivitySettings": {
+                "state": "default",
+                "voiceReportingCode": 0,
+                "includeTarget": {"id": "all_users", "targetType": "group"},
+            },
+            "authenticationMethodConfigurations@odata.context": "https://graph.microsoft.com/beta/$metadata#policies/authenticationMethodsPolicy/authenticationMethodConfigurations",
+            "authenticationMethodConfigurations": [],
+        }
+        self.authenticationMethods = self.expected_data
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_authenticationMethods.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.authenticationMethods
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(
+            Path(f"{self.directory.path}/Entra/Authentication Methods").exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.authenticationMethods
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(
+            Path(f"{self.directory.path}/Entra/Authentication Methods").exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Entra/test_backup_authorizationPolicy.py b/tests/Backup/Entra/test_backup_authorizationPolicy.py
new file mode 100644
index 00000000..e8aef23d
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_authorizationPolicy.py
@@ -0,0 +1,102 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up authorizationPolicy."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_authorizationPolicy import savebackup
+
+
+class TestBackupAuthorizationPolicy(unittest.TestCase):
+    """Test class for backup_authorizationPolicy."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = (
+            f"{self.directory.path}/Entra/Authorization Policy/authorization_policy."
+        )
+        self.expected_data = {
+            "id": "authorizationPolicy",
+            "allowInvitesFrom": "none",
+            "allowedToSignUpEmailBasedSubscriptions": True,
+            "allowedToUseSSPR": True,
+            "allowEmailVerifiedUsersToJoinOrganization": False,
+            "allowUserConsentForRiskyApps": False,
+            "blockMsolPowerShell": False,
+            "description": "Used to manage authorization related settings across the company.",
+            "displayName": "Authorization Policy",
+            "enabledPreviewFeatures": [],
+            "guestUserRoleId": "10dae51f-b6af-4016-8d66-8c2a99b929b3",
+            "permissionGrantPolicyIdsAssignedToDefaultUserRole": [
+                "ManagePermissionGrantsForSelf.microsoft-user-default-legacy"
+            ],
+            "defaultUserRolePermissions": {
+                "allowedToCreateApps": True,
+                "allowedToCreateSecurityGroups": True,
+                "allowedToCreateTenants": True,
+                "allowedToReadBitlockerKeysForOwnedDevice": True,
+                "allowedToReadOtherUsers": True,
+            },
+        }
+        self.authorizationPolicy = {"value": [self.expected_data]}
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_authorizationPolicy.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.authorizationPolicy
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(
+            Path(f"{self.directory.path}/Entra/Authorization Policy").exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.authorizationPolicy
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(
+            Path(f"{self.directory.path}/Entra/Authorization Policy").exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Entra/test_backup_b2bPolicy.py b/tests/Backup/Entra/test_backup_b2bPolicy.py
new file mode 100644
index 00000000..928d26d7
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_b2bPolicy.py
@@ -0,0 +1,91 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up b2bPolicy."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_b2bPolicy import savebackup
+
+
+class TestBackupB2bPolicy(unittest.TestCase):
+    """Test class for backup_b2bPolicy."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = (
+            f"{self.directory.path}/Entra/External Collaboration Settings/b2b_policy."
+        )
+        self.expected_data = {
+            "targetedDomains": ["hej.com"],
+            "hasListEntries": True,
+            "isAllowlist": False,
+            "otpEnabled": False,
+            "adminConsentedForUsersIntoTenantIds": [],
+            "noAADConsentForUsersFromTenantsIds": [],
+        }
+        self.b2bPolicy = self.expected_data
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_b2bPolicy.make_azure_request"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.b2bPolicy
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(
+            Path(
+                f"{self.directory.path}/Entra/External Collaboration Settings"
+            ).exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.b2bPolicy
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(
+            Path(
+                f"{self.directory.path}/Entra/External Collaboration Settings"
+            ).exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Entra/test_backup_deviceRegistrationPolicy.py b/tests/Backup/Entra/test_backup_deviceRegistrationPolicy.py
new file mode 100644
index 00000000..9d6a85d2
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_deviceRegistrationPolicy.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up deviceRegistrationPolicy."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_deviceRegistrationPolicy import savebackup
+
+
+class TestBackupDeviceRegistrationPolicy(unittest.TestCase):
+    """Test class for backup_deviceRegistrationPolicy."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = f"{self.directory.path}/Entra/Device Registration Policy/device_registration_policy."
+        self.expected_data = {
+            "multiFactorAuthConfiguration": "1",
+            "displayName": "Device Registration Policy",
+            "description": "Tenant-wide policy that manages initial provisioning controls using quota restrictions, additional authentication and authorization checks",
+            "userDeviceQuota": 50,
+            "azureADRegistration": {
+                "appliesTo": "1",
+                "allowedUsers": [],
+                "allowedGroups": [],
+                "isAdminConfigurable": False,
+            },
+            "azureADJoin": {
+                "appliesTo": "1",
+                "allowedUsers": [],
+                "allowedGroups": [],
+                "isAdminConfigurable": True,
+            },
+            "localAdminPassword": {"isEnabled": False},
+        }
+        self.deviceRegistrationPolicy = self.expected_data
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_deviceRegistrationPolicy.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.deviceRegistrationPolicy
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(
+            Path(f"{self.directory.path}/Entra/Device Registration Policy").exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.deviceRegistrationPolicy
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(
+            Path(f"{self.directory.path}/Entra/Device Registration Policy").exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Entra/test_backup_domains.py b/tests/Backup/Entra/test_backup_domains.py
new file mode 100644
index 00000000..1437b703
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_domains.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up domains."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_domains import savebackup
+
+
+class TestBackupDomains(unittest.TestCase):
+    """Test class for backup_domains."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = f"{self.directory.path}/Entra/Domains/test.onmicrosoft.com."
+        self.expected_data = {
+            "authenticationType": "Managed",
+            "availabilityStatus": None,
+            "id": "test.onmicrosoft.com",
+            "isAdminManaged": True,
+            "isDefault": True,
+            "isInitial": True,
+            "isRoot": True,
+            "isVerified": True,
+            "supportedServices": ["Email", "OfficeCommunicationsOnline"],
+            "passwordValidityPeriodInDays": 2147483647,
+            "passwordNotificationWindowInDays": 14,
+            "state": None,
+        }
+        self.domains = {
+            "value": [
+                {
+                    "authenticationType": "Managed",
+                    "availabilityStatus": None,
+                    "id": "test.onmicrosoft.com",
+                    "isAdminManaged": True,
+                    "isDefault": True,
+                    "isInitial": True,
+                    "isRoot": True,
+                    "isVerified": True,
+                    "supportedServices": ["Email", "OfficeCommunicationsOnline"],
+                    "passwordValidityPeriodInDays": 2147483647,
+                    "passwordNotificationWindowInDays": 14,
+                    "state": None,
+                }
+            ]
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_domains.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.domains
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(Path(f"{self.directory.path}/Entra/Domains").exists())
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.domains
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(Path(f"{self.directory.path}/Entra/Domains").exists())
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Entra/test_backup_externalIdentitiesPolicy.py b/tests/Backup/Entra/test_backup_externalIdentitiesPolicy.py
new file mode 100644
index 00000000..b0e1be7a
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_externalIdentitiesPolicy.py
@@ -0,0 +1,87 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up externalIdentitiesPolicy."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_externalIdentitiesPolicy import savebackup
+
+
+class TestBackupExternalIdentitiesPolicy(unittest.TestCase):
+    """Test class for backup_externalIdentitiesPolicy."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = f"{self.directory.path}/Entra/External Collaboration Settings/external_identities_policy."
+        self.expected_data = {
+            "deletedDateTime": None,
+            "allowExternalIdentitiesToLeave": True,
+            "allowDeletedIdentitiesDataRemoval": False,
+            "displayName": "External Identities Policy",
+        }
+        self.externalIdentitiesPolicy = self.expected_data
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_externalIdentitiesPolicy.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.externalIdentitiesPolicy
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(
+            Path(
+                f"{self.directory.path}/Entra/External Collaboration Settings"
+            ).exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.externalIdentitiesPolicy
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(
+            Path(
+                f"{self.directory.path}/Entra/External Collaboration Settings"
+            ).exists()
+        )
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Entra/test_backup_groupSettings.py b/tests/Backup/Entra/test_backup_groupSettings.py
new file mode 100644
index 00000000..ae829af2
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_groupSettings.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up groupSettings."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_groupSettings import savebackup
+
+
+class TestBackupGroupSettings(unittest.TestCase):
+    """Test class for backup_groupSettings."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = (
+            f"{self.directory.path}/Entra/Group Settings/Consent Policy Settings."
+        )
+        self.expected_data = {
+            "displayName": "Consent Policy Settings",
+            "templateId": "dffd5d46-495d-40a9-8e21-954ff55e198a",
+            "values": [
+                {"name": "EnableGroupSpecificConsent", "value": "true"},
+                {"name": "BlockUserConsentForRiskyApps", "value": "True"},
+                {"name": "EnableAdminConsentRequests", "value": "true"},
+                {
+                    "name": "ConstrainGroupSpecificConsentToMembersOfGroupId",
+                    "value": "",
+                },
+            ],
+        }
+        self.groupSettings = {"value": [self.expected_data]}
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_groupSettings.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.groupSettings
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(Path(f"{self.directory.path}/Entra/Group Settings").exists())
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.groupSettings
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(Path(f"{self.directory.path}/Entra/Group Settings").exists())
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Entra/test_backup_roamingSettings.py b/tests/Backup/Entra/test_backup_roamingSettings.py
new file mode 100644
index 00000000..3ac6715d
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_roamingSettings.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up roamingSettings."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_roamingSettings import savebackup
+
+
+class TestBackupRoamingSettings(unittest.TestCase):
+    """Test class for backup_roamingSettings."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = (
+            f"{self.directory.path}/Entra/Roaming Settings/roaming_settings."
+        )
+        self.expected_data = {
+            "syncSetting": 1,
+            "isAdminConfigurable": True,
+            "isRoamingSettingChanged": False,
+            "syncSelectedUsers": [
+                {
+                    "id": "5279e130-ee8b-4b78-8b55-d18b774e676c",
+                    "email": None,
+                    "displayName": None,
+                    "type": 2,
+                    "hasThumbnail": False,
+                    "imageUrl": None,
+                }
+            ],
+        }
+        self.roamingSettings = self.expected_data
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_roamingSettings.make_azure_request"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.roamingSettings
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(Path(f"{self.directory.path}/Entra/Roaming Settings").exists())
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.roamingSettings
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(Path(f"{self.directory.path}/Entra/Roaming Settings").exists())
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Entra/test_backup_securityDefaults.py b/tests/Backup/Entra/test_backup_securityDefaults.py
new file mode 100644
index 00000000..812572a1
--- /dev/null
+++ b/tests/Backup/Entra/test_backup_securityDefaults.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""This module tests backing up securityDefaults."""
+
+import json
+import unittest
+from pathlib import Path
+from unittest.mock import patch
+
+import yaml
+from testfixtures import TempDirectory
+
+from src.IntuneCD.backup.Entra.backup_securityDefaults import savebackup
+
+
+class TestBackupsecurityDefaults(unittest.TestCase):
+    """Test class for backup_securityDefaults."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.token = "token"
+        self.append_id = False
+        self.saved_path = (
+            f"{self.directory.path}/Entra/Security Defaults/security_defaults."
+        )
+        self.expected_data = {
+            "displayName": "Security Defaults",
+            "description": "Security defaults is a set of basic identity security mechanisms recommended by Microsoft. When enabled, these recommendations will be automatically enforced in your organization. Administrators and users will be better protected from common identity related attacks.",
+            "isEnabled": False,
+            "controlTypes": [],
+            "securityDefaultsUpsell": {
+                "action": "none",
+                "dueDateTime": "2023-10-30T16:14:05.0071203Z",
+            },
+        }
+        self.securityDefaults = self.expected_data
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.backup.Entra.backup_securityDefaults.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+
+    def test_backup_yml(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.securityDefaults
+        self.count = savebackup(self.directory.path, "yaml", self.token)
+
+        with open(self.saved_path + "yaml", "r", encoding="utf-8") as f:
+            data = json.dumps(yaml.safe_load(f))
+            saved_data = json.loads(data)
+
+        self.assertTrue(Path(f"{self.directory.path}/Entra/Security Defaults").exists())
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_json(self):
+        """The folder should be created, the file should have the expected contents, and the count should be 1."""
+
+        self.makeapirequest.return_value = self.securityDefaults
+        self.count = savebackup(self.directory.path, "json", self.token)
+
+        with open(self.saved_path + "json", "r", encoding="utf-8") as f:
+            saved_data = json.load(f)
+
+        self.assertTrue(Path(f"{self.directory.path}/Entra/Security Defaults").exists())
+        self.assertEqual(self.expected_data, saved_data)
+        self.assertEqual(1, self.count["config_count"])
+
+    def test_backup_with_no_return_data(self):
+        """The count should be 0 if no data is returned."""
+
+        self.makeapirequest.return_value = None
+        self.count = savebackup(self.directory.path, "json", self.token)
+        self.assertEqual(0, self.count["config_count"])
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Backup/Intune/__init__.py b/tests/Backup/Intune/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Backup/test_backup_apns.py b/tests/Backup/Intune/test_backup_apns.py
similarity index 96%
rename from tests/Backup/test_backup_apns.py
rename to tests/Backup/Intune/test_backup_apns.py
index dc0b92d5..53536d38 100644
--- a/tests/Backup/test_backup_apns.py
+++ b/tests/Backup/Intune/test_backup_apns.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_apns import savebackup
+from src.IntuneCD.backup.Intune.backup_apns import savebackup
 
 
 class TestBackupAPNS(unittest.TestCase):
@@ -46,7 +46,7 @@ def setUp(self):
         }
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_apns.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_apns.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
 
diff --git a/tests/Backup/test_backup_appConfiguration.py b/tests/Backup/Intune/test_backup_appConfiguration.py
similarity index 94%
rename from tests/Backup/test_backup_appConfiguration.py
rename to tests/Backup/Intune/test_backup_appConfiguration.py
index 2d73bfe9..ad28f66b 100644
--- a/tests/Backup/test_backup_appConfiguration.py
+++ b/tests/Backup/Intune/test_backup_appConfiguration.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_appConfiguration import savebackup
+from src.IntuneCD.backup.Intune.backup_appConfiguration import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -76,19 +76,19 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_appConfiguration.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_appConfiguration.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_appConfiguration.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_appConfiguration.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_appConfiguration.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_appConfiguration.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = self.app_config, self.app_data
diff --git a/tests/Backup/test_backup_appProtection.py b/tests/Backup/Intune/test_backup_appProtection.py
similarity index 95%
rename from tests/Backup/test_backup_appProtection.py
rename to tests/Backup/Intune/test_backup_appProtection.py
index f457bdb1..c5f9d5bc 100644
--- a/tests/Backup/test_backup_appProtection.py
+++ b/tests/Backup/Intune/test_backup_appProtection.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_AppProtection import savebackup
+from src.IntuneCD.backup.Intune.backup_AppProtection import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -66,19 +66,19 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_AppProtection.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_AppProtection.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_AppProtection.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_AppProtection.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_AppProtection.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_AppProtection.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.app_protection
diff --git a/tests/Backup/test_backup_appleEnrollmentProfile.py b/tests/Backup/Intune/test_backup_appleEnrollmentProfile.py
similarity index 95%
rename from tests/Backup/test_backup_appleEnrollmentProfile.py
rename to tests/Backup/Intune/test_backup_appleEnrollmentProfile.py
index a3fafbba..4e5edd34 100644
--- a/tests/Backup/test_backup_appleEnrollmentProfile.py
+++ b/tests/Backup/Intune/test_backup_appleEnrollmentProfile.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_appleEnrollmentProfile import savebackup
+from src.IntuneCD.backup.Intune.backup_appleEnrollmentProfile import savebackup
 
 
 class TestBackupAppleEnrollmentProfile(unittest.TestCase):
@@ -64,12 +64,12 @@ def setUp(self):
         ]
 
         self.patch_makeapirequest = patch(
-            "src.IntuneCD.backup.backup_appleEnrollmentProfile.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_appleEnrollmentProfile.makeapirequest"
         )
         self.makeapirequest = self.patch_makeapirequest.start()
 
         self.patch_batch_request = patch(
-            "src.IntuneCD.backup.backup_appleEnrollmentProfile.batch_request"
+            "src.IntuneCD.backup.Intune.backup_appleEnrollmentProfile.batch_request"
         )
         self.batch_request = self.patch_batch_request.start()
 
diff --git a/tests/Backup/test_backup_applications.py b/tests/Backup/Intune/test_backup_applications.py
similarity index 97%
rename from tests/Backup/test_backup_applications.py
rename to tests/Backup/Intune/test_backup_applications.py
index 73a70919..1938e724 100644
--- a/tests/Backup/test_backup_applications.py
+++ b/tests/Backup/Intune/test_backup_applications.py
@@ -10,7 +10,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_applications import savebackup
+from src.IntuneCD.backup.Intune.backup_applications import savebackup
 
 
 class TestBackupApplications(unittest.TestCase):
@@ -47,19 +47,19 @@ def setUp(self):
         self.object_assignment_data = [{"target": {"groupName": "Group1"}}]
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_applications.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_applications.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = self.batch_assignment_data
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_applications.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_applications.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = self.object_assignment_data
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_applications.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_applications.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
 
diff --git a/tests/Backup/test_backup_assignmentFilter.py b/tests/Backup/Intune/test_backup_assignmentFilter.py
similarity index 95%
rename from tests/Backup/test_backup_assignmentFilter.py
rename to tests/Backup/Intune/test_backup_assignmentFilter.py
index db7aa90a..e7288008 100644
--- a/tests/Backup/test_backup_assignmentFilter.py
+++ b/tests/Backup/Intune/test_backup_assignmentFilter.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_assignmentFilters import savebackup
+from src.IntuneCD.backup.Intune.backup_assignmentFilters import savebackup
 
 
 class TestBackupAssignmentFilters(unittest.TestCase):
@@ -44,7 +44,7 @@ def setUp(self):
         }
 
         self.patch_makeapirequest = patch(
-            "src.IntuneCD.backup.backup_assignmentFilters.makeapirequest",
+            "src.IntuneCD.backup.Intune.backup_assignmentFilters.makeapirequest",
             return_value=self.assignment_filter,
         )
         self.makeapirequest = self.patch_makeapirequest.start()
diff --git a/tests/Backup/test_backup_compliance.py b/tests/Backup/Intune/test_backup_compliance.py
similarity index 94%
rename from tests/Backup/test_backup_compliance.py
rename to tests/Backup/Intune/test_backup_compliance.py
index ad441f30..77271e41 100644
--- a/tests/Backup/test_backup_compliance.py
+++ b/tests/Backup/Intune/test_backup_compliance.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_compliance import savebackup
+from src.IntuneCD.backup.Intune.backup_compliance import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -61,19 +61,19 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_compliance.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_compliance.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_compliance.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_compliance.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_compliance.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_compliance.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.compliance_policy
diff --git a/tests/Backup/test_backup_compliancePartner.py b/tests/Backup/Intune/test_backup_compliancePartner.py
similarity index 96%
rename from tests/Backup/test_backup_compliancePartner.py
rename to tests/Backup/Intune/test_backup_compliancePartner.py
index 6a17e977..83693389 100644
--- a/tests/Backup/test_backup_compliancePartner.py
+++ b/tests/Backup/Intune/test_backup_compliancePartner.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_compliancePartner import savebackup
+from src.IntuneCD.backup.Intune.backup_compliancePartner import savebackup
 
 
 class TestBackupCompliancePartner(unittest.TestCase):
@@ -54,7 +54,7 @@ def setUp(self):
         }
 
         self.patch_makeapirequest = patch(
-            "src.IntuneCD.backup.backup_compliancePartner.makeapirequest",
+            "src.IntuneCD.backup.Intune.backup_compliancePartner.makeapirequest",
             return_value=self.compliance_partner,
         )
         self.makeapirequest = self.patch_makeapirequest.start()
diff --git a/tests/Backup/test_backup_conditionalAccess.py b/tests/Backup/Intune/test_backup_conditionalAccess.py
similarity index 95%
rename from tests/Backup/test_backup_conditionalAccess.py
rename to tests/Backup/Intune/test_backup_conditionalAccess.py
index 53cd06b8..8c4b94fd 100644
--- a/tests/Backup/test_backup_conditionalAccess.py
+++ b/tests/Backup/Intune/test_backup_conditionalAccess.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_conditionalAccess import savebackup
+from src.IntuneCD.backup.Intune.backup_conditionalAccess import savebackup
 
 CA_POLICY = {
     "value": [
@@ -31,7 +31,7 @@
 }
 
 
-@patch("src.IntuneCD.backup.backup_conditionalAccess.savebackup")
+@patch("src.IntuneCD.backup.Intune.backup_conditionalAccess.savebackup")
 class TestBackupConditionalAccess(unittest.TestCase):
     """Test class for backup_conditionalAccess."""
 
@@ -74,7 +74,7 @@ def setUp(self):
         }
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_conditionalAccess.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_conditionalAccess.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = [self.policy, self.policy["value"][0]]
diff --git a/tests/Backup/test_backup_configurationPolicies.py b/tests/Backup/Intune/test_backup_configurationPolicies.py
similarity index 94%
rename from tests/Backup/test_backup_configurationPolicies.py
rename to tests/Backup/Intune/test_backup_configurationPolicies.py
index 0093361f..f7acab5b 100644
--- a/tests/Backup/test_backup_configurationPolicies.py
+++ b/tests/Backup/Intune/test_backup_configurationPolicies.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_configurationPolicies import savebackup
+from src.IntuneCD.backup.Intune.backup_configurationPolicies import savebackup
 
 BATCH_REQUEST = [
     {
@@ -94,25 +94,25 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_configurationPolicies.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_configurationPolicies.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.batch_request_patch = patch(
-            "src.IntuneCD.backup.backup_configurationPolicies.batch_request"
+            "src.IntuneCD.backup.Intune.backup_configurationPolicies.batch_request"
         )
         self.batch_request = self.batch_request_patch.start()
         self.batch_request.return_value = BATCH_REQUEST
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_configurationPolicies.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_configurationPolicies.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_configurationPolicies.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_configurationPolicies.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.configuration_policy
diff --git a/tests/Backup/test_backup_customAttributeShellScript.py b/tests/Backup/Intune/test_backup_customAttributeShellScript.py
similarity index 92%
rename from tests/Backup/test_backup_customAttributeShellScript.py
rename to tests/Backup/Intune/test_backup_customAttributeShellScript.py
index 2464213e..cc28e4a1 100644
--- a/tests/Backup/test_backup_customAttributeShellScript.py
+++ b/tests/Backup/Intune/test_backup_customAttributeShellScript.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_customAttributeShellScript import savebackup
+from src.IntuneCD.backup.Intune.backup_customAttributeShellScript import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -47,25 +47,25 @@ def setUp(self):
         ]
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_customAttributeShellScript.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_customAttributeShellScript.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_customAttributeShellScript.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_customAttributeShellScript.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.batch_request_patch = patch(
-            "src.IntuneCD.backup.backup_customAttributeShellScript.batch_request"
+            "src.IntuneCD.backup.Intune.backup_customAttributeShellScript.batch_request"
         )
         self.batch_request = self.batch_request_patch.start()
         self.batch_request.return_value = self.batch_request_data
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_customAttributeShellScript.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_customAttributeShellScript.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.script_policy_data
diff --git a/tests/Backup/test_backup_deviceCategories.py b/tests/Backup/Intune/test_backup_deviceCategories.py
similarity index 95%
rename from tests/Backup/test_backup_deviceCategories.py
rename to tests/Backup/Intune/test_backup_deviceCategories.py
index 0a99e3ec..e1284589 100644
--- a/tests/Backup/test_backup_deviceCategories.py
+++ b/tests/Backup/Intune/test_backup_deviceCategories.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_deviceCategories import savebackup
+from src.IntuneCD.backup.Intune.backup_deviceCategories import savebackup
 
 
 class TestBackupdeviceCategories(unittest.TestCase):
@@ -41,7 +41,7 @@ def setUp(self):
         }
 
         self.patch_makeapirequest = patch(
-            "src.IntuneCD.backup.backup_deviceCategories.makeapirequest",
+            "src.IntuneCD.backup.Intune.backup_deviceCategories.makeapirequest",
             return_value=self.deviceCategories,
         )
         self.makeapirequest = self.patch_makeapirequest.start()
diff --git a/tests/Backup/test_backup_deviceManagementSettings.py b/tests/Backup/Intune/test_backup_deviceManagementSettings.py
similarity index 93%
rename from tests/Backup/test_backup_deviceManagementSettings.py
rename to tests/Backup/Intune/test_backup_deviceManagementSettings.py
index c6adc0dd..051c290f 100644
--- a/tests/Backup/test_backup_deviceManagementSettings.py
+++ b/tests/Backup/Intune/test_backup_deviceManagementSettings.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_deviceManagementSettings import savebackup
+from src.IntuneCD.backup.Intune.backup_deviceManagementSettings import savebackup
 
 DEVICE_MANAGEMENT_SETTINGS = {
     "deviceComplianceCheckinThresholdDays": 30,
@@ -30,9 +30,9 @@
 }
 
 
-@patch("src.IntuneCD.backup.backup_deviceManagementSettings.savebackup")
+@patch("src.IntuneCD.backup.Intune.backup_deviceManagementSettings.savebackup")
 @patch(
-    "src.IntuneCD.backup.backup_deviceManagementSettings.makeapirequest",
+    "src.IntuneCD.backup.Intune.backup_deviceManagementSettings.makeapirequest",
     return_value=DEVICE_MANAGEMENT_SETTINGS,
 )
 class TestBackupDeviceManagementSettings(unittest.TestCase):
diff --git a/tests/Backup/test_backup_enrollmentConfigurations.py b/tests/Backup/Intune/test_backup_enrollmentConfigurations.py
similarity index 93%
rename from tests/Backup/test_backup_enrollmentConfigurations.py
rename to tests/Backup/Intune/test_backup_enrollmentConfigurations.py
index 9dcee9cd..1f0383cc 100644
--- a/tests/Backup/test_backup_enrollmentConfigurations.py
+++ b/tests/Backup/Intune/test_backup_enrollmentConfigurations.py
@@ -8,7 +8,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_enrollmentConfigurations import savebackup
+from src.IntuneCD.backup.Intune.backup_enrollmentConfigurations import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -52,19 +52,19 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_enrollmentConfigurations.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_enrollmentConfigurations.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_enrollmentConfigurations.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_enrollmentConfigurations.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_enrollmentConfigurations.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_enrollmentConfigurations.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.enrollment_config
diff --git a/tests/Backup/test_backup_enrollmentStatusPage.py b/tests/Backup/Intune/test_backup_enrollmentStatusPage.py
similarity index 93%
rename from tests/Backup/test_backup_enrollmentStatusPage.py
rename to tests/Backup/Intune/test_backup_enrollmentStatusPage.py
index 4ddffea3..fc1682ef 100644
--- a/tests/Backup/test_backup_enrollmentStatusPage.py
+++ b/tests/Backup/Intune/test_backup_enrollmentStatusPage.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_enrollmentStatusPage import savebackup
+from src.IntuneCD.backup.Intune.backup_enrollmentStatusPage import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -51,19 +51,19 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_enrollmentStatusPage.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_enrollmentStatusPage.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_enrollmentStatusPage.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_enrollmentStatusPage.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_enrollmentStatusPage.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_enrollmentStatusPage.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = self.statuspage_profile, self.app_data
diff --git a/tests/Backup/test_backup_groupPolicyConfiguration.py b/tests/Backup/Intune/test_backup_groupPolicyConfiguration.py
similarity index 93%
rename from tests/Backup/test_backup_groupPolicyConfiguration.py
rename to tests/Backup/Intune/test_backup_groupPolicyConfiguration.py
index 5c244925..b0363877 100644
--- a/tests/Backup/test_backup_groupPolicyConfiguration.py
+++ b/tests/Backup/Intune/test_backup_groupPolicyConfiguration.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_groupPolicyConfiguration import savebackup
+from src.IntuneCD.backup.Intune.backup_groupPolicyConfiguration import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -67,19 +67,19 @@ def setUp(self):
         self.presentations = {"value": []}
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_groupPolicyConfiguration.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_groupPolicyConfiguration.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_groupPolicyConfiguration.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_groupPolicyConfiguration.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_groupPolicyConfiguration.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_groupPolicyConfiguration.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = (
diff --git a/tests/Backup/test_backup_managedGPlay.py b/tests/Backup/Intune/test_backup_managedGPlay.py
similarity index 95%
rename from tests/Backup/test_backup_managedGPlay.py
rename to tests/Backup/Intune/test_backup_managedGPlay.py
index fdc3b47e..fc63ce71 100644
--- a/tests/Backup/test_backup_managedGPlay.py
+++ b/tests/Backup/Intune/test_backup_managedGPlay.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_managedGPlay import savebackup
+from src.IntuneCD.backup.Intune.backup_managedGPlay import savebackup
 
 
 class TestBackupManagedGPlay(unittest.TestCase):
@@ -40,7 +40,7 @@ def setUp(self):
         }
 
         self.patch_makeapirequest = patch(
-            "src.IntuneCD.backup.backup_managedGPlay.makeapirequest",
+            "src.IntuneCD.backup.Intune.backup_managedGPlay.makeapirequest",
             return_value=self.managed_gplay,
         )
         self.makeapirequest = self.patch_makeapirequest.start()
diff --git a/tests/Backup/test_backup_managementIntents.py b/tests/Backup/Intune/test_backup_managementIntents.py
similarity index 92%
rename from tests/Backup/test_backup_managementIntents.py
rename to tests/Backup/Intune/test_backup_managementIntents.py
index 41f60545..37adb7a4 100644
--- a/tests/Backup/test_backup_managementIntents.py
+++ b/tests/Backup/Intune/test_backup_managementIntents.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_managementIntents import savebackup
+from src.IntuneCD.backup.Intune.backup_managementIntents import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -65,25 +65,25 @@ def setUp(self):
         }
 
         self.batch_intent_patch = patch(
-            "src.IntuneCD.backup.backup_managementIntents.batch_intents"
+            "src.IntuneCD.backup.Intune.backup_managementIntents.batch_intents"
         )
         self.batch_intent = self.batch_intent_patch.start()
         self.batch_intent.return_value = self.batch_intent_data
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_managementIntents.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_managementIntents.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_managementIntents.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_managementIntents.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_managementIntents.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_managementIntents.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = self.intent, self.template
diff --git a/tests/Backup/test_backup_managementPartner.py b/tests/Backup/Intune/test_backup_managementPartner.py
similarity index 95%
rename from tests/Backup/test_backup_managementPartner.py
rename to tests/Backup/Intune/test_backup_managementPartner.py
index a842be86..1683c470 100644
--- a/tests/Backup/test_backup_managementPartner.py
+++ b/tests/Backup/Intune/test_backup_managementPartner.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_managementPartner import savebackup
+from src.IntuneCD.backup.Intune.backup_managementPartner import savebackup
 
 
 class TestBackupManagementPartner(unittest.TestCase):
@@ -40,7 +40,7 @@ def setUp(self):
         }
 
         self.patch_makeapirequest = patch(
-            "src.IntuneCD.backup.backup_managementPartner.makeapirequest",
+            "src.IntuneCD.backup.Intune.backup_managementPartner.makeapirequest",
             return_value=self.management_partner,
         )
         self.makeapirequest = self.patch_makeapirequest.start()
diff --git a/tests/Backup/test_backup_notificationTemplate.py b/tests/Backup/Intune/test_backup_notificationTemplate.py
similarity index 97%
rename from tests/Backup/test_backup_notificationTemplate.py
rename to tests/Backup/Intune/test_backup_notificationTemplate.py
index b3a11404..343b2f99 100644
--- a/tests/Backup/test_backup_notificationTemplate.py
+++ b/tests/Backup/Intune/test_backup_notificationTemplate.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_notificationTemplate import savebackup
+from src.IntuneCD.backup.Intune.backup_notificationTemplate import savebackup
 
 
 class TestBackupNotificationTemplate(unittest.TestCase):
@@ -79,7 +79,7 @@ def setUp(self):
         }
 
         self.patch_makeapirequest = patch(
-            "src.IntuneCD.backup.backup_notificationTemplate.makeapirequest",
+            "src.IntuneCD.backup.Intune.backup_notificationTemplate.makeapirequest",
             side_effect=[self.message_template, self.localized_messages],
         )
         self.makeapirequest = self.patch_makeapirequest.start()
diff --git a/tests/Backup/test_backup_powershellScripts.py b/tests/Backup/Intune/test_backup_powershellScripts.py
similarity index 93%
rename from tests/Backup/test_backup_powershellScripts.py
rename to tests/Backup/Intune/test_backup_powershellScripts.py
index 96d8e87a..987e5edc 100644
--- a/tests/Backup/test_backup_powershellScripts.py
+++ b/tests/Backup/Intune/test_backup_powershellScripts.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_powershellScripts import savebackup
+from src.IntuneCD.backup.Intune.backup_powershellScripts import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -47,25 +47,25 @@ def setUp(self):
         ]
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_powershellScripts.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_powershellScripts.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_powershellScripts.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_powershellScripts.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.batch_request_patch = patch(
-            "src.IntuneCD.backup.backup_powershellScripts.batch_request"
+            "src.IntuneCD.backup.Intune.backup_powershellScripts.batch_request"
         )
         self.batch_request = self.batch_request_patch.start()
         self.batch_request.return_value = self.batch_request_data
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_powershellScripts.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_powershellScripts.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.script_policy_data
diff --git a/tests/Backup/test_backup_proactiveRemediation.py b/tests/Backup/Intune/test_backup_proactiveRemediation.py
similarity index 91%
rename from tests/Backup/test_backup_proactiveRemediation.py
rename to tests/Backup/Intune/test_backup_proactiveRemediation.py
index bf97de52..f389b8f0 100644
--- a/tests/Backup/test_backup_proactiveRemediation.py
+++ b/tests/Backup/Intune/test_backup_proactiveRemediation.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_proactiveRemediation import savebackup
+from src.IntuneCD.backup.Intune.backup_proactiveRemediation import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -48,25 +48,25 @@ def setUp(self):
         ]
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_proactiveRemediation.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_proactiveRemediation.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_proactiveRemediation.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_proactiveRemediation.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.batch_request_patch = patch(
-            "src.IntuneCD.backup.backup_proactiveRemediation.batch_request"
+            "src.IntuneCD.backup.Intune.backup_proactiveRemediation.batch_request"
         )
         self.batch_request = self.batch_request_patch.start()
         self.batch_request.return_value = self.batch_request_data
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_proactiveRemediation.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_proactiveRemediation.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.script_policy_data
@@ -131,7 +131,7 @@ def test_publisher_is_microsoft(self):
         """Microsoft should not be backed up."""
 
         with patch(
-            "src.IntuneCD.backup.backup_proactiveRemediation.batch_request",
+            "src.IntuneCD.backup.Intune.backup_proactiveRemediation.batch_request",
             side_effect=[[{"publisher": "Microsoft"}]],
         ):
             self.count = savebackup(
@@ -149,7 +149,7 @@ def test_backup_with_no_returned_data(self):
         """The count should be 0 if no data is returned."""
 
         with patch(
-            "src.IntuneCD.backup.backup_proactiveRemediation.makeapirequest",
+            "src.IntuneCD.backup.Intune.backup_proactiveRemediation.makeapirequest",
             return_value={"value": []},
         ):
             self.count = savebackup(
diff --git a/tests/Backup/test_backup_profiles.py b/tests/Backup/Intune/test_backup_profiles.py
similarity index 86%
rename from tests/Backup/test_backup_profiles.py
rename to tests/Backup/Intune/test_backup_profiles.py
index 5b509cb6..1562ca51 100644
--- a/tests/Backup/test_backup_profiles.py
+++ b/tests/Backup/Intune/test_backup_profiles.py
@@ -10,7 +10,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_profiles import savebackup
+from src.IntuneCD.backup.Intune.backup_profiles import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -27,19 +27,19 @@ def setUp(self):
         self.append_id = False
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_profiles.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_profiles.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_profiles.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_profiles.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_profiles.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_profiles.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
 
@@ -65,7 +65,13 @@ def test_backup_macOS_custom_profile(self):
         }
 
         self.count = savebackup(
-            self.directory.path, "json", self.token, self.exclude, "", self.append_id
+            self.directory.path,
+            "json",
+            self.token,
+            self.exclude,
+            "",
+            self.append_id,
+            False,
         )
 
         self.assertTrue(
@@ -96,7 +102,13 @@ def test_backup_ios_custom_profile(self):
         }
 
         self.count = savebackup(
-            self.directory.path, "json", self.token, self.exclude, "", self.append_id
+            self.directory.path,
+            "json",
+            self.token,
+            self.exclude,
+            "",
+            self.append_id,
+            False,
         )
 
         self.assertTrue(
@@ -142,7 +154,13 @@ def test_backup_windows_custom_profile_encrypted(self):
         self.makeapirequest.side_effect = self.profile, self.oma_values
 
         self.count = savebackup(
-            self.directory.path, "json", self.token, self.exclude, "", self.append_id
+            self.directory.path,
+            "json",
+            self.token,
+            self.exclude,
+            "",
+            self.append_id,
+            False,
         )
 
         self.assertTrue(
@@ -183,7 +201,13 @@ def test_backup_windows_custom_profile_not_encrypted(self):
         self.makeapirequest.side_effect = self.profile, self.oma_values
 
         self.count = savebackup(
-            self.directory.path, "json", self.token, self.exclude, "", self.append_id
+            self.directory.path,
+            "json",
+            self.token,
+            self.exclude,
+            "",
+            self.append_id,
+            False,
         )
 
         self.assertTrue(
@@ -205,19 +229,19 @@ def setUp(self):
         self.append_id = False
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_profiles.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_profiles.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_profiles.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_profiles.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_profiles.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_profiles.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
 
@@ -241,7 +265,13 @@ def test_backup_non_custom_profile(self):
         }
 
         self.count = savebackup(
-            self.directory.path, "json", self.token, self.exclude, "", self.append_id
+            self.directory.path,
+            "json",
+            self.token,
+            self.exclude,
+            "",
+            self.append_id,
+            False,
         )
 
         self.assertTrue(
@@ -261,6 +291,7 @@ def test_backup_with_prefix(self):
             self.token,
             "test1",
             self.append_id,
+            False,
         )
         self.assertEqual(0, self.count["config_count"])
 
@@ -277,7 +308,7 @@ def test_backup_append_id(self):
         }
 
         self.count = savebackup(
-            self.directory.path, "json", self.exclude, self.token, "", True
+            self.directory.path, "json", self.exclude, self.token, "", True, False
         )
 
         self.assertTrue(
diff --git a/tests/Backup/test_backup_remoteAssistancePartner.py b/tests/Backup/Intune/test_backup_remoteAssistancePartner.py
similarity index 95%
rename from tests/Backup/test_backup_remoteAssistancePartner.py
rename to tests/Backup/Intune/test_backup_remoteAssistancePartner.py
index 1261bc9b..9e2cd794 100644
--- a/tests/Backup/test_backup_remoteAssistancePartner.py
+++ b/tests/Backup/Intune/test_backup_remoteAssistancePartner.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_remoteAssistancePartner import savebackup
+from src.IntuneCD.backup.Intune.backup_remoteAssistancePartner import savebackup
 
 
 class TestBackupCompliancePartner(unittest.TestCase):
@@ -33,7 +33,7 @@ def setUp(self):
         }
 
         self.patch_makeapirequest = patch(
-            "src.IntuneCD.backup.backup_remoteAssistancePartner.makeapirequest",
+            "src.IntuneCD.backup.Intune.backup_remoteAssistancePartner.makeapirequest",
             return_value=self.remote_assistance_partner,
         )
         self.makeapirequest = self.patch_makeapirequest.start()
diff --git a/tests/Backup/test_backup_shellScripts.py b/tests/Backup/Intune/test_backup_shellScripts.py
similarity index 93%
rename from tests/Backup/test_backup_shellScripts.py
rename to tests/Backup/Intune/test_backup_shellScripts.py
index b7d11400..fe466569 100644
--- a/tests/Backup/test_backup_shellScripts.py
+++ b/tests/Backup/Intune/test_backup_shellScripts.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_shellScripts import savebackup
+from src.IntuneCD.backup.Intune.backup_shellScripts import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -47,25 +47,25 @@ def setUp(self):
         ]
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_shellScripts.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_shellScripts.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_shellScripts.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_shellScripts.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.batch_request_patch = patch(
-            "src.IntuneCD.backup.backup_shellScripts.batch_request"
+            "src.IntuneCD.backup.Intune.backup_shellScripts.batch_request"
         )
         self.batch_request = self.batch_request_patch.start()
         self.batch_request.return_value = self.batch_request_data
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_shellScripts.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_shellScripts.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.script_policy_data
diff --git a/tests/Backup/test_backup_vppTokens.py b/tests/Backup/Intune/test_backup_vppTokens.py
similarity index 95%
rename from tests/Backup/test_backup_vppTokens.py
rename to tests/Backup/Intune/test_backup_vppTokens.py
index bf4f7f48..cbf33588 100644
--- a/tests/Backup/test_backup_vppTokens.py
+++ b/tests/Backup/Intune/test_backup_vppTokens.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_vppTokens import savebackup
+from src.IntuneCD.backup.Intune.backup_vppTokens import savebackup
 
 
 class TestBackupVPPTokens(unittest.TestCase):
@@ -29,7 +29,7 @@ def setUp(self):
         }
 
         self.patch_makeapirequest = patch(
-            "src.IntuneCD.backup.backup_vppTokens.makeapirequest",
+            "src.IntuneCD.backup.Intune.backup_vppTokens.makeapirequest",
             return_value=self.vpp_token,
         )
         self.makeapirequest = self.patch_makeapirequest.start()
diff --git a/tests/Backup/test_backup_windowsDriverUpdates.py b/tests/Backup/Intune/test_backup_windowsDriverUpdates.py
similarity index 92%
rename from tests/Backup/test_backup_windowsDriverUpdates.py
rename to tests/Backup/Intune/test_backup_windowsDriverUpdates.py
index a9a6474a..6da090a1 100644
--- a/tests/Backup/test_backup_windowsDriverUpdates.py
+++ b/tests/Backup/Intune/test_backup_windowsDriverUpdates.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_windowsDriverUpdates import savebackup
+from src.IntuneCD.backup.Intune.backup_windowsDriverUpdates import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -34,19 +34,19 @@ def setUp(self):
         self.enrollment_profile = {"value": [{"displayName": "test", "id": "0"}]}
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_windowsDriverUpdates.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_windowsDriverUpdates.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_windowsDriverUpdates.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_windowsDriverUpdates.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_windowsDriverUpdates.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_windowsDriverUpdates.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.enrollment_profile
diff --git a/tests/Backup/test_backup_windowsEnrollmentProfile.py b/tests/Backup/Intune/test_backup_windowsEnrollmentProfile.py
similarity index 92%
rename from tests/Backup/test_backup_windowsEnrollmentProfile.py
rename to tests/Backup/Intune/test_backup_windowsEnrollmentProfile.py
index 5c44f19f..3402e6c6 100644
--- a/tests/Backup/test_backup_windowsEnrollmentProfile.py
+++ b/tests/Backup/Intune/test_backup_windowsEnrollmentProfile.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_windowsEnrollmentProfile import savebackup
+from src.IntuneCD.backup.Intune.backup_windowsEnrollmentProfile import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -34,19 +34,19 @@ def setUp(self):
         self.enrollment_profile = {"value": [{"displayName": "test", "id": "0"}]}
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_windowsEnrollmentProfile.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_windowsEnrollmentProfile.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_windowsEnrollmentProfile.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_windowsEnrollmentProfile.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_windowsEnrollmentProfile.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_windowsEnrollmentProfile.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.enrollment_profile
diff --git a/tests/Backup/test_backup_windowsFeatureUpdates.py b/tests/Backup/Intune/test_backup_windowsFeatureUpdates.py
similarity index 92%
rename from tests/Backup/test_backup_windowsFeatureUpdates.py
rename to tests/Backup/Intune/test_backup_windowsFeatureUpdates.py
index bba5139c..0f3ab519 100644
--- a/tests/Backup/test_backup_windowsFeatureUpdates.py
+++ b/tests/Backup/Intune/test_backup_windowsFeatureUpdates.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_windowsFeatureUpdates import savebackup
+from src.IntuneCD.backup.Intune.backup_windowsFeatureUpdates import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -34,19 +34,19 @@ def setUp(self):
         self.enrollment_profile = {"value": [{"displayName": "test", "id": "0"}]}
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_windowsFeatureUpdates.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_windowsFeatureUpdates.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_windowsFeatureUpdates.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_windowsFeatureUpdates.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_windowsFeatureUpdates.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_windowsFeatureUpdates.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.enrollment_profile
diff --git a/tests/Backup/test_backup_windowsQualityUpdates.py b/tests/Backup/Intune/test_backup_windowsQualityUpdates.py
similarity index 92%
rename from tests/Backup/test_backup_windowsQualityUpdates.py
rename to tests/Backup/Intune/test_backup_windowsQualityUpdates.py
index 22543923..e6e62960 100644
--- a/tests/Backup/test_backup_windowsQualityUpdates.py
+++ b/tests/Backup/Intune/test_backup_windowsQualityUpdates.py
@@ -11,7 +11,7 @@
 import yaml
 from testfixtures import TempDirectory
 
-from src.IntuneCD.backup.backup_windowsQualityUpdates import savebackup
+from src.IntuneCD.backup.Intune.backup_windowsQualityUpdates import savebackup
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "Group1"}}]}]
 OBJECT_ASSIGNMENT = [{"target": {"groupName": "Group1"}}]
@@ -34,19 +34,19 @@ def setUp(self):
         self.enrollment_profile = {"value": [{"displayName": "test", "id": "0"}]}
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_windowsQualityUpdates.batch_assignment"
+            "src.IntuneCD.backup.Intune.backup_windowsQualityUpdates.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.backup.backup_windowsQualityUpdates.get_object_assignment"
+            "src.IntuneCD.backup.Intune.backup_windowsQualityUpdates.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.backup.backup_windowsQualityUpdates.makeapirequest"
+            "src.IntuneCD.backup.Intune.backup_windowsQualityUpdates.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.enrollment_profile
diff --git a/tests/Update/Entra/test_update_SSPR.py b/tests/Update/Entra/test_update_SSPR.py
new file mode 100644
index 00000000..1b5bdce3
--- /dev/null
+++ b/tests/Update/Entra/test_update_SSPR.py
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_SSPR import update
+
+
+class TestUpdateSSPR(unittest.TestCase):
+    """Test class for update_SSPR."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("Password Reset Policies")
+        self.directory.write(
+            "Entra/Password Reset Policies/password_reset_policies.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "objectId": "default",
+            "enablementType": 2,
+            "registrationReconfirmIntevalInDays": 170,
+        }
+        self.repo_data = {
+            "objectId": "default",
+            "enablementType": 2,
+            "registrationReconfirmIntevalInDays": 160,
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_SSPR.make_azure_request"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch("src.IntuneCD.update.Entra.update_SSPR.load_file")
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_SSPR.make_azure_request_put"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["registrationReconfirmIntevalInDays"] = 160
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(
+            self.directory.path
+            + "/Entra/Password Reset Policies/password_reset_policies.json"
+        )
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Entra/test_update_authenticationFlowsPolicy.py b/tests/Update/Entra/test_update_authenticationFlowsPolicy.py
new file mode 100644
index 00000000..2b49d2cf
--- /dev/null
+++ b/tests/Update/Entra/test_update_authenticationFlowsPolicy.py
@@ -0,0 +1,94 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_authenticationFlowsPolicy import update
+
+
+class TestUpdateAuthenticationFlowsPolicy(unittest.TestCase):
+    """Test class for update_authenticationFlowsPolicy."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("External Collaboration Settings")
+        self.directory.write(
+            "Entra/External Collaboration Settings/authentication_flows_policy.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.directory.write(
+            "Entra/External Collaboration Settings/authentication_flows_policy.txt",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "displayName": "Authentication flows policy",
+            "description": "Authentication flows policy allows modification of settings related to authentication flows in AAD tenant, such as self-service sign up configuration.",
+            "selfServiceSignUp": {"isEnabled": False},
+        }
+        self.repo_data = {
+            "displayName": "Authentication flows policy",
+            "description": "Authentication flows policy allows modification of settings related to authentication flows in AAD tenant, such as self-service sign up configuration.",
+            "selfServiceSignUp": {"isEnabled": True},
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_authenticationFlowsPolicy.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Entra.update_authenticationFlowsPolicy.load_file"
+        )
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_authenticationFlowsPolicy.makeapirequestPatch"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["selfServiceSignUp"]["isEnabled"] = True
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(
+            self.directory.path
+            + "/Entra/External Collaboration Settings/authentication_flows_policy.json"
+        )
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Entra/test_update_authenticationMethodsConfigurations.py b/tests/Update/Entra/test_update_authenticationMethodsConfigurations.py
new file mode 100644
index 00000000..d992a499
--- /dev/null
+++ b/tests/Update/Entra/test_update_authenticationMethodsConfigurations.py
@@ -0,0 +1,150 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_authenticationMethodsConfigurations import update
+
+
+class TestUpdateAuthenticationMethodsConfigurations(unittest.TestCase):
+    """Test class for update_authenticationMethodsConfigurations."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("Authentication Methods")
+        self.directory.write(
+            "Entra/Authentication Methods/authentication_methods.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.directory.write(
+            "Entra/Authentication Methods/authentication_methods.txt",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "displayName": "Authentication Methods Policy",
+            "description": "The tenant-wide policy that controls which authentication methods are allowed in the tenant, authentication method registration requirements, and self-service password reset settings",
+            "policyVersion": "1.4",
+            "policyMigrationState": "preMigration",
+            "authenticationMethodConfigurations@odata.context": "https://graph.microsoft.com/beta/$metadata#policies/authenticationMethodsPolicy/authenticationMethodConfigurations",
+            "authenticationMethodConfigurations": [
+                {
+                    "@odata.type": "#microsoft.graph.fido2AuthenticationMethodConfiguration",
+                    "id": "Fido2",
+                    "state": "enabled",
+                    "isSelfServiceRegistrationAllowed": True,
+                    "isAttestationEnforced": False,
+                    "defaultPasskeyProfile": None,
+                    "excludeTargets": [],
+                    "keyRestrictions": {
+                        "isEnforced": False,
+                        "enforcementType": "block",
+                        "aaGuids": [],
+                    },
+                    "includeTargets@odata.context": "https://graph.microsoft.com/beta/$metadata#policies/authenticationMethodsPolicy/authenticationMethodConfigurations('Fido2')/microsoft.graph.fido2AuthenticationMethodConfiguration/includeTargets",
+                    "includeTargets": [
+                        {
+                            "targetType": "user",
+                            "id": "bb0e3bad-08db-4bfe-bc5d-de4f4f60c7f5",
+                            "isRegistrationRequired": False,
+                            "allowedPasskeyProfiles": [],
+                        }
+                    ],
+                    "passkeyProfiles": [],
+                },
+            ],
+        }
+        self.repo_data = {
+            "displayName": "Authentication Methods Policy",
+            "description": "The tenant-wide policy that controls which authentication methods are allowed in the tenant, authentication method registration requirements, and self-service password reset settings",
+            "policyVersion": "1.4",
+            "policyMigrationState": "preMigration",
+            "authenticationMethodConfigurations@odata.context": "https://graph.microsoft.com/beta/$metadata#policies/authenticationMethodsPolicy/authenticationMethodConfigurations",
+            "authenticationMethodConfigurations": [
+                {
+                    "@odata.type": "#microsoft.graph.fido2AuthenticationMethodConfiguration",
+                    "id": "Fido2",
+                    "state": "disabled",
+                    "isSelfServiceRegistrationAllowed": True,
+                    "isAttestationEnforced": False,
+                    "defaultPasskeyProfile": None,
+                    "excludeTargets": [],
+                    "keyRestrictions": {
+                        "isEnforced": False,
+                        "enforcementType": "block",
+                        "aaGuids": [],
+                    },
+                    "includeTargets@odata.context": "https://graph.microsoft.com/beta/$metadata#policies/authenticationMethodsPolicy/authenticationMethodConfigurations('Fido2')/microsoft.graph.fido2AuthenticationMethodConfiguration/includeTargets",
+                    "includeTargets": [
+                        {
+                            "targetType": "user",
+                            "id": "bb0e3bad-08db-4bfe-bc5d-de4f4f60c7f5",
+                            "isRegistrationRequired": False,
+                            "allowedPasskeyProfiles": [],
+                        }
+                    ],
+                    "passkeyProfiles": [],
+                },
+            ],
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_authenticationMethodsConfigurations.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Entra.update_authenticationMethodsConfigurations.load_file"
+        )
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_authenticationMethodsConfigurations.makeapirequestPatch"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["authenticationMethodConfigurations"][0]["state"] = "disabled"
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(
+            self.directory.path
+            + "/Entra/Authentication Methods/authentication_methods.json"
+        )
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Entra/test_update_authenticationMethodsPolicy.py b/tests/Update/Entra/test_update_authenticationMethodsPolicy.py
new file mode 100644
index 00000000..47d01179
--- /dev/null
+++ b/tests/Update/Entra/test_update_authenticationMethodsPolicy.py
@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_authenticationMethodsPolicy import update
+
+
+class TestUpdateAuthenticationMethodsPolicy(unittest.TestCase):
+    """Test class for update_authenticationMethodsPolicy."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("Authentication Methods")
+        self.directory.write(
+            "Entra/Authentication Methods/authentication_methods.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.directory.write(
+            "Entra/Authentication Methods/authentication_methods.txt",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "displayName": "Authentication Methods Policy",
+            "description": "The tenant-wide policy that controls which authentication methods are allowed in the tenant, authentication method registration requirements, and self-service password reset settings",
+            "policyVersion": "1.4",
+            "policyMigrationState": "preMigration",
+            "registrationEnforcement": {
+                "authenticationMethodsRegistrationCampaign": {
+                    "snoozeDurationInDays": 2,
+                    "enforceRegistrationAfterAllowedSnoozes": True,
+                    "state": "default",
+                    "excludeTargets": [],
+                    "includeTargets": [
+                        {
+                            "id": "all_users",
+                            "targetType": "group",
+                            "targetedAuthenticationMethod": "microsoftAuthenticator",
+                        }
+                    ],
+                }
+            },
+            "authenticationMethodConfigurations@odata.context": "https://graph.microsoft.com/beta/$metadata#policies/authenticationMethodsPolicy/authenticationMethodConfigurations",
+            "authenticationMethodConfigurations": [],
+        }
+        self.repo_data = {
+            "displayName": "Authentication Methods Policy",
+            "description": "The tenant-wide policy that controls which authentication methods are allowed in the tenant, authentication method registration requirements, and self-service password reset settings",
+            "policyVersion": "1.4",
+            "policyMigrationState": "preMigration",
+            "registrationEnforcement": {
+                "authenticationMethodsRegistrationCampaign": {
+                    "snoozeDurationInDays": 1,
+                    "enforceRegistrationAfterAllowedSnoozes": True,
+                    "state": "default",
+                    "excludeTargets": [],
+                    "includeTargets": [
+                        {
+                            "id": "all_users",
+                            "targetType": "group",
+                            "targetedAuthenticationMethod": "microsoftAuthenticator",
+                        }
+                    ],
+                }
+            },
+            "authenticationMethodConfigurations@odata.context": "https://graph.microsoft.com/beta/$metadata#policies/authenticationMethodsPolicy/authenticationMethodConfigurations",
+            "authenticationMethodConfigurations": [],
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_authenticationMethodsPolicy.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Entra.update_authenticationMethodsPolicy.load_file"
+        )
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_authenticationMethodsPolicy.makeapirequestPatch"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["registrationEnforcement"][
+            "authenticationMethodsRegistrationCampaign"
+        ]["snoozeDurationInDays"] = 1
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(
+            self.directory.path
+            + "/Entra/Authentication Methods/authentication_methods.json"
+        )
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Entra/test_update_authorizationPolicy.py b/tests/Update/Entra/test_update_authorizationPolicy.py
new file mode 100644
index 00000000..2f29498f
--- /dev/null
+++ b/tests/Update/Entra/test_update_authorizationPolicy.py
@@ -0,0 +1,134 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_authorizationPolicy import update
+
+
+class TestUpdateAuthorizationPolicy(unittest.TestCase):
+    """Test class for update_authorizationPolicy."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("Authorization Policy")
+        self.directory.write(
+            "Entra/Authorization Policy/authorization_policy.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.directory.write(
+            "Entra/Authorization Policy/authorization_policy.txt",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "value": [
+                {
+                    "id": "authorizationPolicy",
+                    "allowInvitesFrom": "none",
+                    "allowedToSignUpEmailBasedSubscriptions": True,
+                    "allowedToUseSSPR": False,
+                    "allowEmailVerifiedUsersToJoinOrganization": False,
+                    "allowUserConsentForRiskyApps": False,
+                    "blockMsolPowerShell": False,
+                    "description": "Used to manage authorization related settings across the company.",
+                    "displayName": "Authorization Policy",
+                    "enabledPreviewFeatures": [],
+                    "guestUserRoleId": "10dae51f-b6af-4016-8d66-8c2a99b929b3",
+                    "permissionGrantPolicyIdsAssignedToDefaultUserRole": [
+                        "ManagePermissionGrantsForSelf.microsoft-user-default-legacy"
+                    ],
+                    "defaultUserRolePermissions": {
+                        "allowedToCreateApps": True,
+                        "allowedToCreateSecurityGroups": True,
+                        "allowedToCreateTenants": True,
+                        "allowedToReadBitlockerKeysForOwnedDevice": True,
+                        "allowedToReadOtherUsers": True,
+                    },
+                }
+            ]
+        }
+        self.repo_data = {
+            "id": "authorizationPolicy",
+            "allowInvitesFrom": "none",
+            "allowedToSignUpEmailBasedSubscriptions": True,
+            "allowedToUseSSPR": True,
+            "allowEmailVerifiedUsersToJoinOrganization": False,
+            "allowUserConsentForRiskyApps": False,
+            "blockMsolPowerShell": False,
+            "description": "Used to manage authorization related settings across the company.",
+            "displayName": "Authorization Policy",
+            "enabledPreviewFeatures": [],
+            "guestUserRoleId": "10dae51f-b6af-4016-8d66-8c2a99b929b3",
+            "permissionGrantPolicyIdsAssignedToDefaultUserRole": [
+                "ManagePermissionGrantsForSelf.microsoft-user-default-legacy"
+            ],
+            "defaultUserRolePermissions": {
+                "allowedToCreateApps": True,
+                "allowedToCreateSecurityGroups": True,
+                "allowedToCreateTenants": True,
+                "allowedToReadBitlockerKeysForOwnedDevice": True,
+                "allowedToReadOtherUsers": True,
+            },
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_authorizationPolicy.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Entra.update_authorizationPolicy.load_file"
+        )
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_authorizationPolicy.makeapirequestPatch"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["value"][0]["allowedToUseSSPR"] = True
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(
+            self.directory.path
+            + "/Entra/Authorization Policy/authorization_policy.json"
+        )
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Entra/test_update_b2bpolicy.py b/tests/Update/Entra/test_update_b2bpolicy.py
new file mode 100644
index 00000000..31828df2
--- /dev/null
+++ b/tests/Update/Entra/test_update_b2bpolicy.py
@@ -0,0 +1,100 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_b2bPolicy import update
+
+
+class TestUpdateB2bPolicy(unittest.TestCase):
+    """Test class for update_b2bPolicy."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("External Collaboration Settings")
+        self.directory.write(
+            "Entra/External Collaboration Settings/b2b_policy.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.directory.write(
+            "Entra/External Collaboration Settings/b2b_policy.txt",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "targetedDomains": ["hej.com"],
+            "hasListEntries": True,
+            "isAllowlist": False,
+            "otpEnabled": False,
+            "adminConsentedForUsersIntoTenantIds": [],
+            "noAADConsentForUsersFromTenantsIds": [],
+        }
+        self.repo_data = {
+            "targetedDomains": ["hej2.com"],
+            "hasListEntries": True,
+            "isAllowlist": False,
+            "otpEnabled": False,
+            "adminConsentedForUsersIntoTenantIds": [],
+            "noAADConsentForUsersFromTenantsIds": [],
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_b2bPolicy.make_azure_request"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Entra.update_b2bPolicy.load_file"
+        )
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_b2bPolicy.make_azure_request_post"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["targetedDomains"] = ["hej2.com"]
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(
+            self.directory.path
+            + "/Entra/External Collaboration Settings/b2b_policy.json"
+        )
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Entra/test_update_deviceRegistrationPolicy.py b/tests/Update/Entra/test_update_deviceRegistrationPolicy.py
new file mode 100644
index 00000000..bc9689aa
--- /dev/null
+++ b/tests/Update/Entra/test_update_deviceRegistrationPolicy.py
@@ -0,0 +1,122 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_deviceRegistrationPolicy import update
+
+
+class TestUpdateDeviceRegistrationPolicy(unittest.TestCase):
+    """Test class for update_deviceRegistrationPolicy."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("Device Registration Policy")
+        self.directory.write(
+            "Entra/Device Registration Policy/device_registration_policy.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.directory.write(
+            "Entra/Device Registration Policy/device_registration_policy.txt",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "multiFactorAuthConfiguration": "1",
+            "displayName": "Device Registration Policy",
+            "description": "Tenant-wide policy that manages initial provisioning controls using quota restrictions, additional authentication and authorization checks",
+            "userDeviceQuota": 50,
+            "azureADRegistration": {
+                "appliesTo": "1",
+                "allowedUsers": [],
+                "allowedGroups": [],
+                "isAdminConfigurable": False,
+            },
+            "azureADJoin": {
+                "appliesTo": "1",
+                "allowedUsers": [],
+                "allowedGroups": [],
+                "isAdminConfigurable": True,
+            },
+            "localAdminPassword": {"isEnabled": False},
+        }
+        self.repo_data = {
+            "multiFactorAuthConfiguration": "1",
+            "displayName": "Device Registration Policy",
+            "description": "Tenant-wide policy that manages initial provisioning controls using quota restrictions, additional authentication and authorization checks",
+            "userDeviceQuota": 49,
+            "azureADRegistration": {
+                "appliesTo": "1",
+                "allowedUsers": [],
+                "allowedGroups": [],
+                "isAdminConfigurable": False,
+            },
+            "azureADJoin": {
+                "appliesTo": "1",
+                "allowedUsers": [],
+                "allowedGroups": [],
+                "isAdminConfigurable": True,
+            },
+            "localAdminPassword": {"isEnabled": False},
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_deviceRegistrationPolicy.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Entra.update_deviceRegistrationPolicy.load_file"
+        )
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_deviceRegistrationPolicy.makeapirequestPut"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["userDeviceQuota"] = 49
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(
+            self.directory.path
+            + "/Entra/Device Registration Policy/device_registration_policy.json"
+        )
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Entra/test_update_domains.py b/tests/Update/Entra/test_update_domains.py
new file mode 100644
index 00000000..0c945a54
--- /dev/null
+++ b/tests/Update/Entra/test_update_domains.py
@@ -0,0 +1,113 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_domains import update
+
+
+class TestUpdateDomains(unittest.TestCase):
+    """Test class for update_domains."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("Domains")
+        self.directory.write(
+            "Entra/Domains/test.onmicrosoft.com.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.directory.write(
+            "Entra/Domains/test.onmicrosoft.com.txt",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "value": [
+                {
+                    "authenticationType": "Managed",
+                    "availabilityStatus": None,
+                    "id": "test.onmicrosoft.com",
+                    "isAdminManaged": True,
+                    "isDefault": True,
+                    "isInitial": True,
+                    "isRoot": True,
+                    "isVerified": True,
+                    "supportedServices": ["Email", "OfficeCommunicationsOnline"],
+                    "passwordValidityPeriodInDays": 2147483647,
+                    "passwordNotificationWindowInDays": 14,
+                    "state": None,
+                }
+            ]
+        }
+        self.repo_data = {
+            "authenticationType": "Managed",
+            "availabilityStatus": None,
+            "id": "test.onmicrosoft.com",
+            "isAdminManaged": True,
+            "isDefault": False,
+            "isInitial": True,
+            "isRoot": True,
+            "isVerified": True,
+            "supportedServices": ["Email", "OfficeCommunicationsOnline"],
+            "passwordValidityPeriodInDays": 2147483647,
+            "passwordNotificationWindowInDays": 14,
+            "state": None,
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_domains.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Entra.update_domains.load_file"
+        )
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_domains.makeapirequestPatch"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["value"][0]["isDefault"] = False
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(self.directory.path + "/Entra/Domains/test.onmicrosoft.com.json")
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Entra/test_update_externalIdentitiesPolicy.py b/tests/Update/Entra/test_update_externalIdentitiesPolicy.py
new file mode 100644
index 00000000..57f2b0a6
--- /dev/null
+++ b/tests/Update/Entra/test_update_externalIdentitiesPolicy.py
@@ -0,0 +1,91 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_externalIdentitiesPolicy import update
+
+
+class TestUpdateExternalIdentitiesPolicy(unittest.TestCase):
+    """Test class for update_externalIdentitiesPolicy."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("External Collaboration Settings")
+        self.directory.write(
+            "Entra/External Collaboration Settings/external_identities_policy.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "deletedDateTime": None,
+            "allowExternalIdentitiesToLeave": True,
+            "allowDeletedIdentitiesDataRemoval": False,
+            "displayName": "External Identities Policy",
+        }
+        self.repo_data = {
+            "deletedDateTime": None,
+            "allowExternalIdentitiesToLeave": True,
+            "allowDeletedIdentitiesDataRemoval": True,
+            "displayName": "External Identities Policy",
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_externalIdentitiesPolicy.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Entra.update_externalIdentitiesPolicy.load_file"
+        )
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_externalIdentitiesPolicy.makeapirequestPatch"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["allowDeletedIdentitiesDataRemoval"] = True
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(
+            self.directory.path
+            + "/Entra/External Collaboration Settings/external_identities_policy.json"
+        )
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Entra/test_update_groupSettings.py b/tests/Update/Entra/test_update_groupSettings.py
new file mode 100644
index 00000000..265f9580
--- /dev/null
+++ b/tests/Update/Entra/test_update_groupSettings.py
@@ -0,0 +1,95 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_groupSettings import update
+
+
+class TestUpdategroupSettings(unittest.TestCase):
+    """Test class for update_groupSettings."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("Group Settings")
+        self.directory.write(
+            "Entra/Group Settings/Group.Unified.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "value": [
+                {
+                    "id": "1",
+                    "displayName": "Group.Unified",
+                    "templateId": "62375ab9-6b52-47ed-826b-58e47e0e304b",
+                    "values": [
+                        {"name": "AllowGuestsToBeGroupOwner", "value": "false"},
+                    ],
+                }
+            ]
+        }
+        self.repo_data = {
+            "displayName": "Group.Unified",
+            "templateId": "62375ab9-6b52-47ed-826b-58e47e0e304b",
+            "values": [
+                {"name": "AllowGuestsToBeGroupOwner", "value": "true"},
+            ],
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_groupSettings.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Entra.update_groupSettings.load_file"
+        )
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_groupSettings.makeapirequestPatch"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["value"][0]["values"][0]["value"] = "true"
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(self.directory.path + "/Entra/Group Settings/Group.Unified.json")
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Entra/test_update_roamingSettings.py b/tests/Update/Entra/test_update_roamingSettings.py
new file mode 100644
index 00000000..002967be
--- /dev/null
+++ b/tests/Update/Entra/test_update_roamingSettings.py
@@ -0,0 +1,111 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_roamingSettings import update
+
+
+class TestUpdateRoamingSettings(unittest.TestCase):
+    """Test class for update_roamingSettings."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("Roaming Settings")
+        self.directory.write(
+            "Entra/Roaming Settings/roaming_settings.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.directory.write(
+            "Entra/Roaming Settings/roaming_settings.txt",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "syncSetting": 1,
+            "isAdminConfigurable": True,
+            "isRoamingSettingChanged": False,
+            "syncSelectedUsers": [
+                {
+                    "id": "5279e130-ee8b-4b78-8b55-d18b774e676c",
+                    "email": None,
+                    "displayName": None,
+                    "type": 2,
+                    "hasThumbnail": False,
+                    "imageUrl": None,
+                }
+            ],
+        }
+        self.repo_data = {
+            "syncSetting": 2,
+            "isAdminConfigurable": True,
+            "isRoamingSettingChanged": False,
+            "syncSelectedUsers": [
+                {
+                    "id": "5279e130-ee8b-4b78-8b55-d18b774e676c",
+                    "email": None,
+                    "displayName": None,
+                    "type": 2,
+                    "hasThumbnail": False,
+                    "imageUrl": None,
+                }
+            ],
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_roamingSettings.make_azure_request"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Entra.update_roamingSettings.load_file"
+        )
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_roamingSettings.make_azure_request_put"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["syncSetting"] = 2
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(self.directory.path + "/Entra/Roaming Settings/roaming_settings.json")
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Entra/test_update_securityDefaults.py b/tests/Update/Entra/test_update_securityDefaults.py
new file mode 100644
index 00000000..106a4455
--- /dev/null
+++ b/tests/Update/Entra/test_update_securityDefaults.py
@@ -0,0 +1,98 @@
+# -*- coding: utf-8 -*-
+import os
+import unittest
+from unittest.mock import patch
+
+from testfixtures import TempDirectory
+
+from src.IntuneCD.update.Entra.update_securityDefaults import update
+
+
+class TestUpdateSecurityDefaults(unittest.TestCase):
+    """Test class for update_securityDefaults."""
+
+    def setUp(self):
+        self.directory = TempDirectory()
+        self.directory.create()
+        self.directory.makedir("Security Defaults")
+        self.directory.write(
+            "Entra/Security Defaults/security_defaults.json",
+            '{"test": "test"}',
+            encoding="utf-8",
+        )
+        self.token = "token"
+        self.entra_data = {
+            "displayName": "Security Defaults",
+            "description": "Security defaults is a set of basic identity security mechanisms recommended by Microsoft. When enabled, these recommendations will be automatically enforced in your organization. Administrators and users will be better protected from common identity related attacks.",
+            "isEnabled": False,
+            "controlTypes": [],
+            "securityDefaultsUpsell": {
+                "action": "none",
+                "dueDateTime": "2023-10-30T16:14:05.0071203Z",
+            },
+        }
+        self.repo_data = {
+            "displayName": "Security Defaults",
+            "description": "Security defaults is a set of basic identity security mechanisms recommended by Microsoft. When enabled, these recommendations will be automatically enforced in your organization. Administrators and users will be better protected from common identity related attacks.",
+            "isEnabled": True,
+            "controlTypes": [],
+            "securityDefaultsUpsell": {
+                "action": "none",
+                "dueDateTime": "2023-10-30T16:14:05.0071203Z",
+            },
+        }
+
+        self.makeapirequest_patch = patch(
+            "src.IntuneCD.update.Entra.update_securityDefaults.makeapirequest"
+        )
+        self.makeapirequest = self.makeapirequest_patch.start()
+        self.makeapirequest.return_value = self.entra_data
+
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Entra.update_securityDefaults.load_file"
+        )
+        self.load_file = self.load_file_patch.start()
+        self.load_file.return_value = self.repo_data
+
+        self.makeapirequestPatch_patch = patch(
+            "src.IntuneCD.update.Entra.update_securityDefaults.makeapirequestPatch"
+        )
+        self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
+
+    def tearDown(self):
+        self.directory.cleanup()
+        self.makeapirequest_patch.stop()
+        self.load_file_patch.stop()
+        self.makeapirequestPatch_patch.stop()
+
+    def test_update_with_diffs(self):
+        """The count should be 1 and makeapirequestPatch should be called."""
+
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 1)
+        self.assertEqual(self.makeapirequestPatch.call_count, 1)
+
+    def test_update_with_no_diffs(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        self.entra_data["isEnabled"] = True
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count[0].count, 0)
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+    def test_update_with_no_file(self):
+        """The count should be 0 and makeapirequestPatch should not be called."""
+
+        os.remove(
+            self.directory.path + "/Entra/Security Defaults/security_defaults.json"
+        )
+        self.count = update(self.directory.path, self.token, report=False)
+
+        self.assertEqual(self.count, [])
+        self.assertEqual(self.makeapirequestPatch.call_count, 0)
+
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/tests/Update/Intune/__init__.py b/tests/Update/Intune/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/Update/test_update_ManagementIntents.py b/tests/Update/Intune/test_update_ManagementIntents.py
similarity index 90%
rename from tests/Update/test_update_ManagementIntents.py
rename to tests/Update/Intune/test_update_ManagementIntents.py
index 1c288319..4c163a52 100644
--- a/tests/Update/test_update_ManagementIntents.py
+++ b/tests/Update/Intune/test_update_ManagementIntents.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_managementIntents import update
+from src.IntuneCD.update.Intune.update_managementIntents import update
 
 
 class TestUpdateManagementIntents(unittest.TestCase):
@@ -74,51 +74,51 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_managementIntents.batch_assignment"
+            "src.IntuneCD.update.Intune.update_managementIntents.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.batch_intents_patch = patch(
-            "src.IntuneCD.update.update_managementIntents.batch_intents"
+            "src.IntuneCD.update.Intune.update_managementIntents.batch_intents"
         )
         self.batch_intents = self.batch_intents_patch.start()
         self.batch_intents.return_value = self.batch_intent_data
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_managementIntents.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_managementIntents.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_managementIntents.makeapirequest"
+            "src.IntuneCD.update.Intune.update_managementIntents.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_managementIntents.update_assignment"
+            "src.IntuneCD.update.Intune.update_managementIntents.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_managementIntents.load_file"
+            "src.IntuneCD.update.Intune.update_managementIntents.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_managementIntents.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_managementIntents.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_managementIntents.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_managementIntents.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_managementIntents.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_managementIntents.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_appConfiguration.py b/tests/Update/Intune/test_update_appConfiguration.py
similarity index 88%
rename from tests/Update/test_update_appConfiguration.py
rename to tests/Update/Intune/test_update_appConfiguration.py
index 4ac5ab93..bcd39f15 100644
--- a/tests/Update/test_update_appConfiguration.py
+++ b/tests/Update/Intune/test_update_appConfiguration.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_appConfiguration import update
+from src.IntuneCD.update.Intune.update_appConfiguration import update
 
 
 class TestUpdateAppConfiguration(unittest.TestCase):
@@ -46,50 +46,50 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_appConfiguration.batch_assignment"
+            "src.IntuneCD.update.Intune.update_appConfiguration.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_appConfiguration.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_appConfiguration.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_appConfiguration.makeapirequest"
+            "src.IntuneCD.update.Intune.update_appConfiguration.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_appConfiguration.update_assignment"
+            "src.IntuneCD.update.Intune.update_appConfiguration.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_appConfiguration.load_file"
+            "src.IntuneCD.update.Intune.update_appConfiguration.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_appConfiguration.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_appConfiguration.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_appConfiguration.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_appConfiguration.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_appConfiguration.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_appConfiguration.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_appConfiguration.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_appConfiguration.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_appProtection.py b/tests/Update/Intune/test_update_appProtection.py
similarity index 95%
rename from tests/Update/test_update_appProtection.py
rename to tests/Update/Intune/test_update_appProtection.py
index a0322208..df55f16e 100644
--- a/tests/Update/test_update_appProtection.py
+++ b/tests/Update/Intune/test_update_appProtection.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_appProtection import update
+from src.IntuneCD.update.Intune.update_appProtection import update
 
 BATCH_ASSIGNMENT = [{"value": [{"id": "0", "target": {"groupName": "test1"}}]}]
 
@@ -31,19 +31,19 @@ def setUp(self):
         self.token = "token"
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_appProtection.batch_assignment"
+            "src.IntuneCD.update.Intune.update_appProtection.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
         self.batch_assignment.return_value = BATCH_ASSIGNMENT
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_appProtection.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_appProtection.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
         self.object_assignment.return_value = OBJECT_ASSIGNMENT
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_appProtection.makeapirequest"
+            "src.IntuneCD.update.Intune.update_appProtection.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = {
@@ -60,13 +60,13 @@ def setUp(self):
         }
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_appProtection.update_assignment"
+            "src.IntuneCD.update.Intune.update_appProtection.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
         self.update_assignment.return_value = UPDATE_ASSIGNMENT
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_appProtection.load_file"
+            "src.IntuneCD.update.Intune.update_appProtection.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = {
@@ -79,23 +79,23 @@ def setUp(self):
         }
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_appProtection.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_appProtection.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_appProtection.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_appProtection.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_appProtection.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_appProtection.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_appProtection.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_appProtection.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_appleEnrollmentProfile.py b/tests/Update/Intune/test_update_appleEnrollmentProfile.py
similarity index 90%
rename from tests/Update/test_update_appleEnrollmentProfile.py
rename to tests/Update/Intune/test_update_appleEnrollmentProfile.py
index 93dcd3f5..d640ae3f 100644
--- a/tests/Update/test_update_appleEnrollmentProfile.py
+++ b/tests/Update/Intune/test_update_appleEnrollmentProfile.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_appleEnrollmentProfile import update
+from src.IntuneCD.update.Intune.update_appleEnrollmentProfile import update
 
 
 class TestUpdateAppleEnrollmentProfile(unittest.TestCase):
@@ -43,19 +43,19 @@ def setUp(self):
         }
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_appleEnrollmentProfile.makeapirequest"
+            "src.IntuneCD.update.Intune.update_appleEnrollmentProfile.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_appleEnrollmentProfile.load_file"
+            "src.IntuneCD.update.Intune.update_appleEnrollmentProfile.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_appleEnrollmentProfile.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_appleEnrollmentProfile.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
diff --git a/tests/Update/test_update_assignment.py b/tests/Update/Intune/test_update_assignment.py
similarity index 91%
rename from tests/Update/test_update_assignment.py
rename to tests/Update/Intune/test_update_assignment.py
index 43bd555d..a68f5be5 100644
--- a/tests/Update/test_update_assignment.py
+++ b/tests/Update/Intune/test_update_assignment.py
@@ -2,7 +2,10 @@
 import unittest
 from unittest.mock import patch
 
-from src.IntuneCD.update.update_assignment import get_added_removed, update_assignment
+from src.IntuneCD.update.Intune.update_assignment import (
+    get_added_removed,
+    update_assignment,
+)
 
 
 class TestUpdateAssignment(unittest.TestCase):
@@ -35,12 +38,12 @@ def setUp(self):
         ]
         self.request_data = {"value": [{"id": "12345", "displayName": "test"}]}
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_assignment.makeapirequest"
+            "src.IntuneCD.update.Intune.update_assignment.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_assignment.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_assignment.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
 
diff --git a/tests/Update/test_update_assignmentFilter.py b/tests/Update/Intune/test_update_assignmentFilter.py
similarity index 90%
rename from tests/Update/test_update_assignmentFilter.py
rename to tests/Update/Intune/test_update_assignmentFilter.py
index 11ccfbed..f1c5a777 100644
--- a/tests/Update/test_update_assignmentFilter.py
+++ b/tests/Update/Intune/test_update_assignmentFilter.py
@@ -4,7 +4,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_assignmentFilter import update
+from src.IntuneCD.update.Intune.update_assignmentFilter import update
 
 
 class TestUpdateAssignmentFilter(unittest.TestCase):
@@ -35,24 +35,24 @@ def setUp(self):
         }
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_assignmentFilter.makeapirequest"
+            "src.IntuneCD.update.Intune.update_assignmentFilter.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_assignmentFilter.load_file"
+            "src.IntuneCD.update.Intune.update_assignmentFilter.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_assignmentFilter.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_assignmentFilter.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_assignmentFilter.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_assignmentFilter.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
diff --git a/tests/Update/test_update_compliance.py b/tests/Update/Intune/test_update_compliance.py
similarity index 88%
rename from tests/Update/test_update_compliance.py
rename to tests/Update/Intune/test_update_compliance.py
index 01214da0..42cdba13 100644
--- a/tests/Update/test_update_compliance.py
+++ b/tests/Update/Intune/test_update_compliance.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_compliance import update
+from src.IntuneCD.update.Intune.update_compliance import update
 
 
 class TestUpdateCompliance(unittest.TestCase):
@@ -53,48 +53,50 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_compliance.batch_assignment"
+            "src.IntuneCD.update.Intune.update_compliance.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_compliance.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_compliance.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_compliance.makeapirequest"
+            "src.IntuneCD.update.Intune.update_compliance.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_compliance.update_assignment"
+            "src.IntuneCD.update.Intune.update_compliance.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch("src.IntuneCD.update.update_compliance.load_file")
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Intune.update_compliance.load_file"
+        )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_compliance.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_compliance.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_compliance.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_compliance.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_compliance.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_compliance.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_compliance.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_compliance.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_conditionalAccess.py b/tests/Update/Intune/test_update_conditionalAccess.py
similarity index 92%
rename from tests/Update/test_update_conditionalAccess.py
rename to tests/Update/Intune/test_update_conditionalAccess.py
index 4e94d0dd..536235fa 100644
--- a/tests/Update/test_update_conditionalAccess.py
+++ b/tests/Update/Intune/test_update_conditionalAccess.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_conditionalAccess import update
+from src.IntuneCD.update.Intune.update_conditionalAccess import update
 
 
 class TestUpdateConditionalAccess(unittest.TestCase):
@@ -71,30 +71,30 @@ def setUp(self):
         }
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_conditionalAccess.makeapirequest"
+            "src.IntuneCD.update.Intune.update_conditionalAccess.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_conditionalAccess.load_file"
+            "src.IntuneCD.update.Intune.update_conditionalAccess.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_conditionalAccess.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_conditionalAccess.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_conditionalAccess.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_conditionalAccess.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_conditionalAccess.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_conditionalAccess.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_configurationPolicies.py b/tests/Update/Intune/test_update_configurationPolicies.py
similarity index 88%
rename from tests/Update/test_update_configurationPolicies.py
rename to tests/Update/Intune/test_update_configurationPolicies.py
index a8cfcdbd..59fa29c3 100644
--- a/tests/Update/test_update_configurationPolicies.py
+++ b/tests/Update/Intune/test_update_configurationPolicies.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_configurationPolicies import update
+from src.IntuneCD.update.Intune.update_configurationPolicies import update
 
 
 class TestUpdateConfigurationPolicies(unittest.TestCase):
@@ -55,50 +55,50 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_configurationPolicies.batch_assignment"
+            "src.IntuneCD.update.Intune.update_configurationPolicies.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_configurationPolicies.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_configurationPolicies.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_configurationPolicies.makeapirequest"
+            "src.IntuneCD.update.Intune.update_configurationPolicies.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_configurationPolicies.update_assignment"
+            "src.IntuneCD.update.Intune.update_configurationPolicies.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_configurationPolicies.load_file"
+            "src.IntuneCD.update.Intune.update_configurationPolicies.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_configurationPolicies.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_configurationPolicies.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_configurationPolicies.makeapirequestPut"
+            "src.IntuneCD.update.Intune.update_configurationPolicies.makeapirequestPut"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_configurationPolicies.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_configurationPolicies.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_configurationPolicies.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_configurationPolicies.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_customAttributeShellScript.py b/tests/Update/Intune/test_update_customAttributeShellScript.py
similarity index 88%
rename from tests/Update/test_update_customAttributeShellScript.py
rename to tests/Update/Intune/test_update_customAttributeShellScript.py
index 9385a7a4..949b9e6b 100644
--- a/tests/Update/test_update_customAttributeShellScript.py
+++ b/tests/Update/Intune/test_update_customAttributeShellScript.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_customAttributeShellScript import update
+from src.IntuneCD.update.Intune.update_customAttributeShellScript import update
 
 
 class TestUpdatecustomAttributeShellScripts(unittest.TestCase):
@@ -63,50 +63,50 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_customAttributeShellScript.batch_assignment"
+            "src.IntuneCD.update.Intune.update_customAttributeShellScript.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_customAttributeShellScript.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_customAttributeShellScript.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_customAttributeShellScript.makeapirequest"
+            "src.IntuneCD.update.Intune.update_customAttributeShellScript.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_customAttributeShellScript.update_assignment"
+            "src.IntuneCD.update.Intune.update_customAttributeShellScript.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_customAttributeShellScript.load_file"
+            "src.IntuneCD.update.Intune.update_customAttributeShellScript.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_customAttributeShellScript.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_customAttributeShellScript.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_customAttributeShellScript.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_customAttributeShellScript.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_customAttributeShellScript.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_customAttributeShellScript.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_customAttributeShellScript.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_customAttributeShellScript.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_deviceCategories.py b/tests/Update/Intune/test_update_deviceCategories.py
similarity index 89%
rename from tests/Update/test_update_deviceCategories.py
rename to tests/Update/Intune/test_update_deviceCategories.py
index 1422b8d5..8aae6fec 100644
--- a/tests/Update/test_update_deviceCategories.py
+++ b/tests/Update/Intune/test_update_deviceCategories.py
@@ -5,7 +5,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_deviceCategories import update
+from src.IntuneCD.update.Intune.update_deviceCategories import update
 
 
 class TestUpdatedeviceCategories(unittest.TestCase):
@@ -40,30 +40,30 @@ def setUp(self):
         }
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_deviceCategories.makeapirequest"
+            "src.IntuneCD.update.Intune.update_deviceCategories.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_deviceCategories.load_file"
+            "src.IntuneCD.update.Intune.update_deviceCategories.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_deviceCategories.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_deviceCategories.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_deviceCategories.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_deviceCategories.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_deviceCategories.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_deviceCategories.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_deviceManagementSettings.py b/tests/Update/Intune/test_update_deviceManagementSettings.py
similarity index 90%
rename from tests/Update/test_update_deviceManagementSettings.py
rename to tests/Update/Intune/test_update_deviceManagementSettings.py
index 3f447a8b..51aafcf6 100644
--- a/tests/Update/test_update_deviceManagementSettings.py
+++ b/tests/Update/Intune/test_update_deviceManagementSettings.py
@@ -4,7 +4,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_deviceManagementSettings import update
+from src.IntuneCD.update.Intune.update_deviceManagementSettings import update
 
 
 class TestUpdateDeviceManagementSettings(unittest.TestCase):
@@ -53,24 +53,24 @@ def setUp(self):
         }
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_deviceManagementSettings.makeapirequest"
+            "src.IntuneCD.update.Intune.update_deviceManagementSettings.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_deviceManagementSettings.load_file"
+            "src.IntuneCD.update.Intune.update_deviceManagementSettings.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_deviceManagementSettings.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_deviceManagementSettings.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_deviceManagementSettings.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_deviceManagementSettings.makeapirequestPost"
         )
 
     def tearDown(self):
diff --git a/tests/Update/test_update_enrollmentConfigurations.py b/tests/Update/Intune/test_update_enrollmentConfigurations.py
similarity index 89%
rename from tests/Update/test_update_enrollmentConfigurations.py
rename to tests/Update/Intune/test_update_enrollmentConfigurations.py
index 9c0c88e8..ce98e59d 100644
--- a/tests/Update/test_update_enrollmentConfigurations.py
+++ b/tests/Update/Intune/test_update_enrollmentConfigurations.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_enrollmentConfigurations import update
+from src.IntuneCD.update.Intune.update_enrollmentConfigurations import update
 
 
 class TestUpdateEnrollmentStatusPage(unittest.TestCase):
@@ -54,50 +54,50 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_enrollmentConfigurations.batch_assignment"
+            "src.IntuneCD.update.Intune.update_enrollmentConfigurations.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_enrollmentConfigurations.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_enrollmentConfigurations.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_enrollmentConfigurations.makeapirequest"
+            "src.IntuneCD.update.Intune.update_enrollmentConfigurations.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_enrollmentConfigurations.update_assignment"
+            "src.IntuneCD.update.Intune.update_enrollmentConfigurations.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_enrollmentConfigurations.load_file"
+            "src.IntuneCD.update.Intune.update_enrollmentConfigurations.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_enrollmentConfigurations.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_enrollmentConfigurations.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_enrollmentConfigurations.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_enrollmentConfigurations.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_enrollmentConfigurations.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_enrollmentConfigurations.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_enrollmentConfigurations.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_enrollmentConfigurations.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_enrollmentStatusPage.py b/tests/Update/Intune/test_update_enrollmentStatusPage.py
similarity index 89%
rename from tests/Update/test_update_enrollmentStatusPage.py
rename to tests/Update/Intune/test_update_enrollmentStatusPage.py
index 10f4d2ff..a966f9f6 100644
--- a/tests/Update/test_update_enrollmentStatusPage.py
+++ b/tests/Update/Intune/test_update_enrollmentStatusPage.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_enrollmentStatusPage import update
+from src.IntuneCD.update.Intune.update_enrollmentStatusPage import update
 
 
 class TestUpdateEnrollmentStatusPage(unittest.TestCase):
@@ -55,50 +55,50 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_enrollmentStatusPage.batch_assignment"
+            "src.IntuneCD.update.Intune.update_enrollmentStatusPage.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_enrollmentStatusPage.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_enrollmentStatusPage.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_enrollmentStatusPage.makeapirequest"
+            "src.IntuneCD.update.Intune.update_enrollmentStatusPage.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = self.mem_data, self.app_ids
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_enrollmentStatusPage.update_assignment"
+            "src.IntuneCD.update.Intune.update_enrollmentStatusPage.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_enrollmentStatusPage.load_file"
+            "src.IntuneCD.update.Intune.update_enrollmentStatusPage.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_enrollmentStatusPage.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_enrollmentStatusPage.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_enrollmentStatusPage.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_enrollmentStatusPage.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_enrollmentStatusPage.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_enrollmentStatusPage.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_enrollmentStatusPage.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_enrollmentStatusPage.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_groupPolicyConfiguration.py b/tests/Update/Intune/test_update_groupPolicyConfiguration.py
similarity index 94%
rename from tests/Update/test_update_groupPolicyConfiguration.py
rename to tests/Update/Intune/test_update_groupPolicyConfiguration.py
index 9fdd1c28..5a2a651f 100644
--- a/tests/Update/test_update_groupPolicyConfiguration.py
+++ b/tests/Update/Intune/test_update_groupPolicyConfiguration.py
@@ -6,7 +6,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_groupPolicyConfiguration import update
+from src.IntuneCD.update.Intune.update_groupPolicyConfiguration import update
 
 
 class TestUpdateGroupPolicyConfiguration(unittest.TestCase):
@@ -95,27 +95,27 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_groupPolicyConfiguration.batch_assignment"
+            "src.IntuneCD.update.Intune.update_groupPolicyConfiguration.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_groupPolicyConfiguration.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_groupPolicyConfiguration.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_groupPolicyConfiguration.update_assignment"
+            "src.IntuneCD.update.Intune.update_groupPolicyConfiguration.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_groupPolicyConfiguration.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_groupPolicyConfiguration.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_groupPolicyConfiguration.makeapirequest"
+            "src.IntuneCD.update.Intune.update_groupPolicyConfiguration.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.side_effect = (
@@ -125,23 +125,23 @@ def setUp(self):
             self.definition_value,
         )
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_groupPolicyConfiguration.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_groupPolicyConfiguration.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_groupPolicyConfiguration.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_groupPolicyConfiguration.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_groupPolicyConfiguration.load_file"
+            "src.IntuneCD.update.Intune.update_groupPolicyConfiguration.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data_base
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_groupPolicyConfiguration.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_groupPolicyConfiguration.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_notificationTemplate.py b/tests/Update/Intune/test_update_notificationTemplate.py
similarity index 91%
rename from tests/Update/test_update_notificationTemplate.py
rename to tests/Update/Intune/test_update_notificationTemplate.py
index 9e930340..c5eaa52d 100644
--- a/tests/Update/test_update_notificationTemplate.py
+++ b/tests/Update/Intune/test_update_notificationTemplate.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_notificationTemplate import update
+from src.IntuneCD.update.Intune.update_notificationTemplate import update
 
 
 class TestUpdateNotificationTemplates(unittest.TestCase):
@@ -67,30 +67,30 @@ def setUp(self):
         }
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_notificationTemplate.makeapirequest"
+            "src.IntuneCD.update.Intune.update_notificationTemplate.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_notificationTemplate.load_file"
+            "src.IntuneCD.update.Intune.update_notificationTemplate.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_notificationTemplate.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_notificationTemplate.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_notificationTemplate.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_notificationTemplate.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_notificationTemplate.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_notificationTemplate.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_powershellScripts.py b/tests/Update/Intune/test_update_powershellScripts.py
similarity index 90%
rename from tests/Update/test_update_powershellScripts.py
rename to tests/Update/Intune/test_update_powershellScripts.py
index 3cf6bc20..a6533e4a 100644
--- a/tests/Update/test_update_powershellScripts.py
+++ b/tests/Update/Intune/test_update_powershellScripts.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_powershellScripts import update
+from src.IntuneCD.update.Intune.update_powershellScripts import update
 
 
 class TestUpdatePowershellScripts(unittest.TestCase):
@@ -63,50 +63,50 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_powershellScripts.batch_assignment"
+            "src.IntuneCD.update.Intune.update_powershellScripts.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_powershellScripts.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_powershellScripts.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_powershellScripts.makeapirequest"
+            "src.IntuneCD.update.Intune.update_powershellScripts.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_powershellScripts.update_assignment"
+            "src.IntuneCD.update.Intune.update_powershellScripts.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_powershellScripts.load_file"
+            "src.IntuneCD.update.Intune.update_powershellScripts.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_powershellScripts.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_powershellScripts.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_powershellScripts.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_powershellScripts.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_powershellScripts.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_powershellScripts.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_powershellScripts.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_powershellScripts.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_proactiveRemediation.py b/tests/Update/Intune/test_update_proactiveRemediation.py
similarity index 92%
rename from tests/Update/test_update_proactiveRemediation.py
rename to tests/Update/Intune/test_update_proactiveRemediation.py
index 42cae116..383fa64a 100644
--- a/tests/Update/test_update_proactiveRemediation.py
+++ b/tests/Update/Intune/test_update_proactiveRemediation.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_proactiveRemediation import update
+from src.IntuneCD.update.Intune.update_proactiveRemediation import update
 
 
 class TestUpdateProactiveRemediation(unittest.TestCase):
@@ -70,50 +70,50 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_proactiveRemediation.batch_assignment"
+            "src.IntuneCD.update.Intune.update_proactiveRemediation.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_proactiveRemediation.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_proactiveRemediation.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_proactiveRemediation.makeapirequest"
+            "src.IntuneCD.update.Intune.update_proactiveRemediation.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_proactiveRemediation.update_assignment"
+            "src.IntuneCD.update.Intune.update_proactiveRemediation.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_proactiveRemediation.load_file"
+            "src.IntuneCD.update.Intune.update_proactiveRemediation.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_proactiveRemediation.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_proactiveRemediation.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_proactiveRemediation.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_proactiveRemediation.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_proactiveRemediation.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_proactiveRemediation.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_proactiveRemediation.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_proactiveRemediation.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_profiles.py b/tests/Update/Intune/test_update_profiles.py
similarity index 96%
rename from tests/Update/test_update_profiles.py
rename to tests/Update/Intune/test_update_profiles.py
index 721a69ec..829ad627 100644
--- a/tests/Update/test_update_profiles.py
+++ b/tests/Update/Intune/test_update_profiles.py
@@ -9,7 +9,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_profiles import update
+from src.IntuneCD.update.Intune.update_profiles import update
 
 
 class TestUpdateProfiles(unittest.TestCase):
@@ -48,53 +48,57 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_profiles.batch_assignment"
+            "src.IntuneCD.update.Intune.update_profiles.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_profiles.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_profiles.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_profiles.makeapirequest"
+            "src.IntuneCD.update.Intune.update_profiles.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data_base
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_profiles.update_assignment"
+            "src.IntuneCD.update.Intune.update_profiles.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
-        self.load_file_patch = patch("src.IntuneCD.update.update_profiles.load_file")
+        self.load_file_patch = patch(
+            "src.IntuneCD.update.Intune.update_profiles.load_file"
+        )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data_base
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_profiles.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_profiles.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_profiles.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_profiles.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_profiles.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_profiles.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
-        self.plistlib_patch = patch("src.IntuneCD.update.update_profiles.plistlib")
+        self.plistlib_patch = patch(
+            "src.IntuneCD.update.Intune.update_profiles.plistlib"
+        )
         self.plistlib = self.plistlib_patch.start()
         self.plistlib.load.return_value = {"PayloadContent": [{"test": "test"}]}
         self.plistlib.dumps.return_value = b"test"
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_profiles.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_profiles.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_shellScripts.py b/tests/Update/Intune/test_update_shellScripts.py
similarity index 90%
rename from tests/Update/test_update_shellScripts.py
rename to tests/Update/Intune/test_update_shellScripts.py
index 0b7fb85f..04933482 100644
--- a/tests/Update/test_update_shellScripts.py
+++ b/tests/Update/Intune/test_update_shellScripts.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_shellScripts import update
+from src.IntuneCD.update.Intune.update_shellScripts import update
 
 
 class TestUpdateShellScripts(unittest.TestCase):
@@ -63,50 +63,50 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_shellScripts.batch_assignment"
+            "src.IntuneCD.update.Intune.update_shellScripts.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_shellScripts.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_shellScripts.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_shellScripts.makeapirequest"
+            "src.IntuneCD.update.Intune.update_shellScripts.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_shellScripts.update_assignment"
+            "src.IntuneCD.update.Intune.update_shellScripts.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_shellScripts.load_file"
+            "src.IntuneCD.update.Intune.update_shellScripts.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_shellScripts.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_shellScripts.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_shellScripts.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_shellScripts.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_shellScripts.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_shellScripts.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_shellScripts.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_shellScripts.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_windowsDriverUpdates.py b/tests/Update/Intune/test_update_windowsDriverUpdates.py
similarity index 87%
rename from tests/Update/test_update_windowsDriverUpdates.py
rename to tests/Update/Intune/test_update_windowsDriverUpdates.py
index 071e60b9..ae761b1e 100644
--- a/tests/Update/test_update_windowsDriverUpdates.py
+++ b/tests/Update/Intune/test_update_windowsDriverUpdates.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_windowsDriverUpdates import update
+from src.IntuneCD.update.Intune.update_windowsDriverUpdates import update
 
 
 class TestUpdateWindowsDriverUpdates(unittest.TestCase):
@@ -45,51 +45,51 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsDriverUpdates.batch_assignment"
+            "src.IntuneCD.update.Intune.update_windowsDriverUpdates.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsDriverUpdates.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_windowsDriverUpdates.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_windowsDriverUpdates.makeapirequest"
+            "src.IntuneCD.update.Intune.update_windowsDriverUpdates.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsDriverUpdates.update_assignment"
+            "src.IntuneCD.update.Intune.update_windowsDriverUpdates.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
         self.update_assignment.return_value = [{"target": {"groupName": "test"}}]
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_windowsDriverUpdates.load_file"
+            "src.IntuneCD.update.Intune.update_windowsDriverUpdates.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_windowsDriverUpdates.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_windowsDriverUpdates.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_windowsDriverUpdates.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_windowsDriverUpdates.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_windowsDriverUpdates.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_windowsDriverUpdates.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_windowsDriverUpdates.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_windowsDriverUpdates.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_windowsEnrollmentProfile.py b/tests/Update/Intune/test_update_windowsEnrollmentProfile.py
similarity index 87%
rename from tests/Update/test_update_windowsEnrollmentProfile.py
rename to tests/Update/Intune/test_update_windowsEnrollmentProfile.py
index a85ddbd5..f0580e01 100644
--- a/tests/Update/test_update_windowsEnrollmentProfile.py
+++ b/tests/Update/Intune/test_update_windowsEnrollmentProfile.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_windowsEnrollmentProfile import update
+from src.IntuneCD.update.Intune.update_windowsEnrollmentProfile import update
 
 
 class TestUpdateWindowsEnrollmentProfile(unittest.TestCase):
@@ -45,51 +45,51 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsEnrollmentProfile.batch_assignment"
+            "src.IntuneCD.update.Intune.update_windowsEnrollmentProfile.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsEnrollmentProfile.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_windowsEnrollmentProfile.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_windowsEnrollmentProfile.makeapirequest"
+            "src.IntuneCD.update.Intune.update_windowsEnrollmentProfile.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsEnrollmentProfile.update_assignment"
+            "src.IntuneCD.update.Intune.update_windowsEnrollmentProfile.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
         self.update_assignment.return_value = [{"target": {"groupName": "test"}}]
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_windowsEnrollmentProfile.load_file"
+            "src.IntuneCD.update.Intune.update_windowsEnrollmentProfile.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_windowsEnrollmentProfile.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_windowsEnrollmentProfile.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_windowsEnrollmentProfile.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_windowsEnrollmentProfile.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_windowsEnrollmentProfile.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_windowsEnrollmentProfile.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_windowsEnrollmentProfile.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_windowsEnrollmentProfile.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_windowsFeatureUpdates.py b/tests/Update/Intune/test_update_windowsFeatureUpdates.py
similarity index 87%
rename from tests/Update/test_update_windowsFeatureUpdates.py
rename to tests/Update/Intune/test_update_windowsFeatureUpdates.py
index 13b4477b..76586a36 100644
--- a/tests/Update/test_update_windowsFeatureUpdates.py
+++ b/tests/Update/Intune/test_update_windowsFeatureUpdates.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_windowsFeatureUpdates import update
+from src.IntuneCD.update.Intune.update_windowsFeatureUpdates import update
 
 
 class TestUpdateWindowsFeatureUpdates(unittest.TestCase):
@@ -46,51 +46,51 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsFeatureUpdates.batch_assignment"
+            "src.IntuneCD.update.Intune.update_windowsFeatureUpdates.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsFeatureUpdates.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_windowsFeatureUpdates.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_windowsFeatureUpdates.makeapirequest"
+            "src.IntuneCD.update.Intune.update_windowsFeatureUpdates.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsFeatureUpdates.update_assignment"
+            "src.IntuneCD.update.Intune.update_windowsFeatureUpdates.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
         self.update_assignment.return_value = [{"target": {"groupName": "test"}}]
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_windowsFeatureUpdates.load_file"
+            "src.IntuneCD.update.Intune.update_windowsFeatureUpdates.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_windowsFeatureUpdates.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_windowsFeatureUpdates.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_windowsFeatureUpdates.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_windowsFeatureUpdates.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_windowsFeatureUpdates.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_windowsFeatureUpdates.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_windowsFeatureUpdates.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_windowsFeatureUpdates.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/test_update_windowsQualityUpdates.py b/tests/Update/Intune/test_update_windowsQualityUpdates.py
similarity index 87%
rename from tests/Update/test_update_windowsQualityUpdates.py
rename to tests/Update/Intune/test_update_windowsQualityUpdates.py
index 4770d2c4..1d36ee79 100644
--- a/tests/Update/test_update_windowsQualityUpdates.py
+++ b/tests/Update/Intune/test_update_windowsQualityUpdates.py
@@ -8,7 +8,7 @@
 
 from testfixtures import TempDirectory
 
-from src.IntuneCD.update.update_windowsQualityUpdates import update
+from src.IntuneCD.update.Intune.update_windowsQualityUpdates import update
 
 
 class TestUpdateWindowsQualityUpdates(unittest.TestCase):
@@ -46,51 +46,51 @@ def setUp(self):
         }
 
         self.batch_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsQualityUpdates.batch_assignment"
+            "src.IntuneCD.update.Intune.update_windowsQualityUpdates.batch_assignment"
         )
         self.batch_assignment = self.batch_assignment_patch.start()
 
         self.object_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsQualityUpdates.get_object_assignment"
+            "src.IntuneCD.update.Intune.update_windowsQualityUpdates.get_object_assignment"
         )
         self.object_assignment = self.object_assignment_patch.start()
 
         self.makeapirequest_patch = patch(
-            "src.IntuneCD.update.update_windowsQualityUpdates.makeapirequest"
+            "src.IntuneCD.update.Intune.update_windowsQualityUpdates.makeapirequest"
         )
         self.makeapirequest = self.makeapirequest_patch.start()
         self.makeapirequest.return_value = self.mem_data
 
         self.update_assignment_patch = patch(
-            "src.IntuneCD.update.update_windowsQualityUpdates.update_assignment"
+            "src.IntuneCD.update.Intune.update_windowsQualityUpdates.update_assignment"
         )
         self.update_assignment = self.update_assignment_patch.start()
         self.update_assignment.return_value = [{"target": {"groupName": "test"}}]
 
         self.load_file_patch = patch(
-            "src.IntuneCD.update.update_windowsQualityUpdates.load_file"
+            "src.IntuneCD.update.Intune.update_windowsQualityUpdates.load_file"
         )
         self.load_file = self.load_file_patch.start()
         self.load_file.return_value = self.repo_data
 
         self.post_assignment_update_patch = patch(
-            "src.IntuneCD.update.update_windowsQualityUpdates.post_assignment_update"
+            "src.IntuneCD.update.Intune.update_windowsQualityUpdates.post_assignment_update"
         )
         self.post_assignment_update = self.post_assignment_update_patch.start()
 
         self.makeapirequestPatch_patch = patch(
-            "src.IntuneCD.update.update_windowsQualityUpdates.makeapirequestPatch"
+            "src.IntuneCD.update.Intune.update_windowsQualityUpdates.makeapirequestPatch"
         )
         self.makeapirequestPatch = self.makeapirequestPatch_patch.start()
 
         self.makeapirequestPost_patch = patch(
-            "src.IntuneCD.update.update_windowsQualityUpdates.makeapirequestPost"
+            "src.IntuneCD.update.Intune.update_windowsQualityUpdates.makeapirequestPost"
         )
         self.makeapirequestPost = self.makeapirequestPost_patch.start()
         self.makeapirequestPost.return_value = {"id": "0"}
 
         self.makeapirequestDelete_patch = patch(
-            "src.IntuneCD.update.update_windowsQualityUpdates.makeapirequestDelete"
+            "src.IntuneCD.update.Intune.update_windowsQualityUpdates.makeapirequestDelete"
         )
         self.makeapirequestDelete = self.makeapirequestDelete_patch.start()
 
diff --git a/tests/Update/__init__.py b/tests/Update/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/test_azure_request.py b/tests/test_azure_request.py
new file mode 100644
index 00000000..b05d3b6a
--- /dev/null
+++ b/tests/test_azure_request.py
@@ -0,0 +1,221 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+"""
+This module tests the graph_request module.
+"""
+
+import unittest
+from unittest import mock
+from unittest.mock import patch
+
+import requests
+
+from src.IntuneCD.intunecdlib.azure_request import (
+    make_azure_request,
+    make_azure_request_patch,
+    make_azure_request_post,
+    make_azure_request_put,
+)
+
+
+def _mock_response(
+    _,
+    status=200,
+    content="CONTENT",
+    raise_for_status=None,
+    headers="",
+):
+    """Mock the response from the requests library."""
+    mock_resp = mock.Mock()
+    # mock raise_for_status call w/optional error
+    mock_resp.raise_for_status = mock.Mock()
+    if raise_for_status:
+        mock_resp.raise_for_status.side_effect = raise_for_status
+    # set status code and content
+    mock_resp.status_code = status
+    mock_resp.text = content
+    mock_resp.headers = headers
+
+    return mock_resp
+
+
+@patch("src.IntuneCD.intunecdlib.azure_request.make_azure_request")
+@patch("requests.get")
+@patch("time.sleep", return_value=None)
+class TestMakeAzureRequestGet(unittest.TestCase):
+    """Test class for graph_request."""
+
+    def setUp(self):
+        self.token = {"access_token": "token"}
+
+    def test_make_azure_request_status_200_no_q_param(self, _, mock_get, __):
+        """The request should be made once and no exception should be raised."""
+
+        self.mock_resp = _mock_response(
+            self, status=200, content='{"value": [{"id": "0"}]}'
+        )
+        mock_get.return_value = self.mock_resp
+        make_azure_request(self.token, "SomeEndpoint")
+
+        self.assertEqual(1, mock_get.call_count)
+
+    def test_make_azure_request_status_200_with_q_param(self, _, mock_get, __):
+        """The request should be made once and no exception should be raised."""
+
+        self.mock_resp = _mock_response(
+            self, status=200, content='{"value": [{"id": "0"}]}'
+        )
+        mock_get.return_value = self.mock_resp
+        make_azure_request(self.token, "SomeEndpoint", q_param="SomeParam")
+
+        self.assertEqual(1, mock_get.call_count)
+
+    def test_make_azure_request_status_404_no_q_param(self, _, mock_get, __):
+        """The request should be made once and no exception should be raised."""
+
+        self.mock_resp = _mock_response(self, status=404, content="")
+        mock_get.return_value = self.mock_resp
+        make_azure_request(self.token, "SomeEndpoint", q_param="SomeParam")
+
+        self.assertEqual(1, mock_get.call_count)
+
+    def test_make_azure_request_status_503_no_q_param(self, _, mock_get, __):
+        """The request should be made and HTTPError should be raised."""
+
+        with self.assertRaises(Exception):
+            self.mock_resp = _mock_response(self, status=503, content="request timeout")
+            mock_get.return_value = self.mock_resp
+            make_azure_request(self.token, "SomeEndpoint")
+
+        self.assertRaises(requests.exceptions.HTTPError)
+
+
+@patch("src.IntuneCD.intunecdlib.azure_request.make_azure_request_put")
+@patch("requests.put")
+class TestAzureRequestPut(unittest.TestCase):
+    """Test class for azure_request."""
+
+    def setUp(self):
+        self.token = {"access_token": "token"}
+
+    def test_make_azure_request_put_no_q_param(self, mock_patch, _):
+        """The request should be made and the response should be returned."""
+        self.mock_resp = _mock_response(self, status=204, content="")
+        mock_patch.return_value = self.mock_resp
+
+        self.assertEqual(
+            make_azure_request_put(self.token, "SomeEndpoint", "SomeData"),
+            None,
+        )
+
+    def test_make_azure_request_put_with_q_param(self, mock_patch, _):
+        """The request should be made and the response should be returned."""
+        self.mock_resp = _mock_response(self, status=204, content="")
+        mock_patch.return_value = self.mock_resp
+
+        self.assertEqual(
+            make_azure_request_put(
+                self.token, "SomeEndpoint", "SomeData", q_param="SomeParam"
+            ),
+            None,
+        )
+
+    def test_make_azure_request_put_not_matching_status_code(self, mock_patch, _):
+        """The request should be made and HTTPError should be raised."""
+
+        with self.assertRaises(Exception):
+            self.mock_resp = _mock_response(self, status=200, content="Error")
+            mock_patch.return_value = self.mock_resp
+
+            make_azure_request_put(self.token, "SomeEndpoint", "SomeData")
+
+        self.assertRaises(requests.exceptions.HTTPError)
+
+
+@patch("src.IntuneCD.intunecdlib.azure_request.make_azure_request_patch")
+@patch("requests.patch")
+class TestAzureRequestPatch(unittest.TestCase):
+    """Test class for azure_request."""
+
+    def setUp(self):
+        self.token = {"access_token": "token"}
+
+    def test_make_azure_request_patch_no_q_param(self, mock_patch, _):
+        """The request should be made and the response should be returned."""
+        self.mock_resp = _mock_response(self, status=204, content="")
+        mock_patch.return_value = self.mock_resp
+
+        self.assertEqual(
+            make_azure_request_patch(self.token, "SomeEndpoint", "SomeData"),
+            None,
+        )
+
+    def test_make_azure_request_patch_with_q_param(self, mock_patch, _):
+        """The request should be made and the response should be returned."""
+        self.mock_resp = _mock_response(self, status=204, content="")
+        mock_patch.return_value = self.mock_resp
+
+        self.assertEqual(
+            make_azure_request_patch(
+                self.token, "SomeEndpoint", "SomeData", q_param="SomeParam"
+            ),
+            None,
+        )
+
+    def test_make_azure_request_patch_not_matching_status_code(self, mock_patch, _):
+        """The request should be made and HTTPError should be raised."""
+
+        with self.assertRaises(Exception):
+            self.mock_resp = _mock_response(self, status=200, content="Error")
+            mock_patch.return_value = self.mock_resp
+
+            make_azure_request_patch(self.token, "SomeEndpoint", "SomeData")
+
+        self.assertRaises(requests.exceptions.HTTPError)
+
+        self.assertRaises(requests.exceptions.HTTPError)
+
+
+@patch("src.IntuneCD.intunecdlib.azure_request.make_azure_request_post")
+@patch("requests.post")
+class TestAzureRequestPost(unittest.TestCase):
+    """Test class for azure_request."""
+
+    def setUp(self):
+        self.token = {"access_token": "token"}
+
+    def test_make_azure_request_post_no_q_param(self, mock_patch, _):
+        """The request should be made and the response should be returned."""
+        self.mock_resp = _mock_response(self, status=204, content="")
+        mock_patch.return_value = self.mock_resp
+
+        self.assertEqual(
+            make_azure_request_post(self.token, "SomeEndpoint", "SomeData"),
+            None,
+        )
+
+    def test_make_azure_request_post_with_q_param(self, mock_patch, _):
+        """The request should be made and the response should be returned."""
+        self.mock_resp = _mock_response(self, status=204, content="")
+        mock_patch.return_value = self.mock_resp
+
+        self.assertEqual(
+            make_azure_request_post(
+                self.token, "SomeEndpoint", "SomeData", q_param="SomeParam"
+            ),
+            None,
+        )
+
+    def test_make_azure_request_post_not_matching_status_code(self, mock_patch, _):
+        """The request should be made and HTTPError should be raised."""
+
+        with self.assertRaises(Exception):
+            self.mock_resp = _mock_response(self, status=200, content="Error")
+            mock_patch.return_value = self.mock_resp
+
+            make_azure_request_post(self.token, "SomeEndpoint", "SomeData")
+
+        self.assertRaises(requests.exceptions.HTTPError)
+
+        self.assertRaises(requests.exceptions.HTTPError)
diff --git a/tests/test_documentation_functions.py b/tests/test_documentation_functions.py
index bc8df6a0..6018c148 100644
--- a/tests/test_documentation_functions.py
+++ b/tests/test_documentation_functions.py
@@ -125,7 +125,7 @@ def test_document_configs(self):
             '{"@odata.type":"test","test":"test","name":"test","description":"test","testvals":"1,2","testbool":false,"testlist":["test"],"testlistdict":[{"test":{"test":{"test":["1"],"testb64":"dW5pY29ybg=="}}}],"testdict2":{"test":{"test":{"test":["1"]}}},"testdictlist":{"test":["a","b","c"]},"assignments":[{"intent":"apply","target":{"@odata.type":"#test","groupName":"test-group","deviceAndAppManagementAssignmentFilterId":"test-filter","deviceAndAppManagementAssignmentFilterType":"test"}}]}',
             encoding="utf-8",
         )
-        self.expected_data = "#test##testDescription:test###Assignments|intent|target|filtertype|filtername||------|----------|-----------|-----------||apply|test-group|test|test-filter|###Configuration|setting|value||------------|-------------------------------------------------------------------------------------||Odatatype|test||Test|test||Name|test||Testvals|1,2||Testbool|False||Testlist|test<br/>||Testlistdict|**test:**<ul>**test:**<ul><li>1</li></ul>**testb64:**dW5pY29ybg==<br/></ul><br/>||Testdict2|**test:**<ul>**test:**<ul>**test:**<ul><li>1</li></ul></ul></ul>||Testdictlist|**test:**<ul><li>a</li><li>b</li><li>c</li></ul>|"
+        self.expected_data = "##test###testDescription:test####Assignments|intent|target|filtertype|filtername||------|----------|-----------|-----------||apply|test-group|test|test-filter|####Configuration|setting|value||------------|-------------------------------------------------------------------------------------||Odatatype|test||Test|test||Name|test||Testvals|1,2||Testbool|False||Testlist|test<br/>||Testlistdict|**test:**<ul>**test:**<ul><li>1</li></ul>**testb64:**dW5pY29ybg==<br/></ul><br/>||Testdict2|**test:**<ul>**test:**<ul>**test:**<ul><li>1</li></ul></ul></ul>||Testdictlist|**test:**<ul><li>a</li><li>b</li><li>c</li></ul>|"
 
         document_configs(
             f"{self.directory.path}/config",
@@ -150,7 +150,7 @@ def test_document_management_intents(self):
             '{"test": "test", "name": "test", "description": "test", "settingsDelta": [{"test": "test", "definitionId": "deviceConfiguration--macOSEndpointProtectionConfiguration_fileVaultNumberOfTimesUserCanIgnore","valueJson": "1","value": 1}], "assignments": [{"intent": "apply", "target": {"@odata.type": "#test", "groupName": "test-group", "deviceAndAppManagementAssignmentFilterId": "test-filter", "deviceAndAppManagementAssignmentFilterType": "test"}}]}',
             encoding="utf-8",
         )
-        self.expected_data = "#intent##testDescription:test###Assignments|intent|target|filtertype|filtername||------|----------|-----------|-----------||apply|test-group|test|test-filter|###Configuration|setting|value||------------------------------------------|-----||Test|test||Name|test||FileVaultNumberOfTimesUserCanIgnore|1|"
+        self.expected_data = "##intent###testDescription:test####Assignments|intent|target|filtertype|filtername||------|----------|-----------|-----------||apply|test-group|test|test-filter|####Configuration|setting|value||------------------------------------------|-----||Test|test||Name|test||FileVaultNumberOfTimesUserCanIgnore|1|"
 
         document_management_intents(
             f"{self.directory.path}/intent/",
diff --git a/tests/test_get_added_removed.py b/tests/test_get_added_removed.py
index 68ed00d2..940a5f26 100644
--- a/tests/test_get_added_removed.py
+++ b/tests/test_get_added_removed.py
@@ -7,7 +7,7 @@
 
 import unittest
 
-from src.IntuneCD.update.update_assignment import get_added_removed
+from src.IntuneCD.update.Intune.update_assignment import get_added_removed
 
 
 class TestCleanFilename(unittest.TestCase):
diff --git a/tests/test_get_authparams.py b/tests/test_get_authparams.py
index fbfe1636..50077734 100644
--- a/tests/test_get_authparams.py
+++ b/tests/test_get_authparams.py
@@ -69,6 +69,7 @@ def test_get_auth_devtoprod_env_dev_app(self, _, __, ___, ____):
                 localauth=None,
                 certauth=None,
                 interactiveauth=None,
+                entra=False,
                 tenant="DEV",
             )
             self.assertEqual(result, "token")
@@ -88,6 +89,7 @@ def test_get_auth_devtoprod_env_prod(self, _, __, ___, ____):
                 localauth=None,
                 certauth=None,
                 interactiveauth=None,
+                entra=False,
                 tenant="PROD",
             )
             self.assertEqual(result, "token")
@@ -99,6 +101,7 @@ def test_get_auth_devtoprod_localauth_dev(self, _, __, ___, ____):
             localauth=self.auth_dev_json,
             certauth=None,
             interactiveauth=None,
+            entra=False,
             tenant="DEV",
         )
         self.assertEqual(result, "token")
@@ -110,6 +113,7 @@ def test_get_auth_devtoprod_localauth_prod(self, _, __, ___, ____):
             localauth=self.auth_prod_json,
             certauth=None,
             interactiveauth=None,
+            entra=False,
             tenant="PROD",
         )
         self.assertEqual(result, "token")
@@ -125,6 +129,7 @@ def test_get_auth_standalone_env(self, _, __, ___, ____):
                 localauth=None,
                 certauth=None,
                 interactiveauth=None,
+                entra=False,
                 tenant=None,
             )
             self.assertEqual(result, "token")
@@ -136,6 +141,7 @@ def test_get_auth_standalone_localauth(self, _, __, ___, ____):
             localauth=self.auth_json,
             certauth=None,
             interactiveauth=None,
+            entra=False,
             tenant=None,
         )
         self.assertEqual(result, "token")
@@ -151,6 +157,7 @@ def test_get_auth_devtoprod_missing_env_dev(self, _, __, ___, ____):
                     localauth=None,
                     certauth=None,
                     interactiveauth=None,
+                    entra=False,
                     tenant="DEV",
                 )
 
@@ -165,6 +172,7 @@ def test_get_auth_devtoprod_missing_env_prod(self, _, __, ___, ____):
                     localauth=None,
                     certauth=None,
                     interactiveauth=None,
+                    entra=False,
                     tenant="PROD",
                 )
 
@@ -177,6 +185,7 @@ def test_get_auth_standalone_missing_env(self, _, __, ___, ____):
                     localauth=None,
                     certauth=None,
                     interactiveauth=None,
+                    entra=False,
                     tenant=None,
                 )
 
@@ -192,7 +201,12 @@ def test_get_auth_cert(self, _, __, ___, ____):
             },
         ):
             result = getAuth(
-                None, localauth=None, certauth=True, interactiveauth=None, tenant=None
+                None,
+                localauth=None,
+                certauth=True,
+                interactiveauth=None,
+                tenant=None,
+                entra=False,
             )
             self.assertEqual(result, "token")
 
@@ -208,6 +222,7 @@ def test_get_auth_cert_missing_env(self, _, __, ___, ____):
                     localauth=None,
                     certauth=True,
                     interactiveauth=None,
+                    entra=False,
                     tenant=None,
                 )
 
@@ -223,7 +238,12 @@ def test_get_auth_interactive(self, _, __, ___, ____):
             },
         ):
             result = getAuth(
-                None, localauth=None, certauth=None, interactiveauth=True, tenant=None
+                None,
+                localauth=None,
+                certauth=None,
+                interactiveauth=True,
+                tenant=None,
+                entra=False,
             )
             self.assertEqual(result, "token")
 
@@ -239,6 +259,7 @@ def test_get_auth_interactive_missing_env(self, _, __, ___, ____):
                     localauth=None,
                     certauth=None,
                     interactiveauth=True,
+                    entra=False,
                     tenant=None,
                 )
 
diff --git a/tests/test_match.py b/tests/test_match.py
index d85e99ea..f42e6cb5 100644
--- a/tests/test_match.py
+++ b/tests/test_match.py
@@ -7,7 +7,7 @@
 
 import unittest
 
-from src.IntuneCD.backup.backup_applications import match
+from src.IntuneCD.backup.Intune.backup_applications import match
 
 
 class TestMatch(unittest.TestCase):