diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml
index ebb67faa9..c94d51b68 100644
--- a/.github/workflows/python.yml
+++ b/.github/workflows/python.yml
@@ -46,7 +46,7 @@ jobs:
       - name: Install dependencies
         run: poetry install --no-root
       - name: Run tox
-        run: poetry run tox -e flake8 -s false
+        run: poetry run tox run -e flake8 -s false
 
   static-code-analysis:
     name: StaticCodingAnalysis (py${{ matrix.python-version}} ${{ matrix.toxenv-factor }})
@@ -62,7 +62,7 @@ jobs:
             toxenv-factor: 'locked'
           - # test with the lowest dependencies
             os: ubuntu-latest
-            python-version: '3.7'
+            python-version: '3.8'
             toxenv-factor: 'lowest'
     steps:
       - name: Checkout
@@ -82,7 +82,7 @@ jobs:
       - name: Install dependencies
         run: poetry install --no-root
       - name: Run tox
-        run: poetry run tox -e mypy-${{ matrix.toxenv-factor }} -s false
+        run: poetry run tox run -e mypy-${{ matrix.toxenv-factor }} -s false
 
   build-and-test:
     name: Test (${{ matrix.os }} py${{ matrix.python-version }} ${{ matrix.toxenv-factor }})
@@ -96,13 +96,12 @@ jobs:
           - "3.11" # highest supported
           - "3.10"
           - "3.9"
-          - "3.8"
-          - "3.7"  # lowest supported
+          - "3.8"  # lowest supported
         toxenv-factor: ['locked']
         include:
           - # test with the lowest dependencies
             os: ubuntu-latest
-            python-version: '3.7'
+            python-version: '3.8'
             toxenv-factor: 'lowest'
     steps:
       - name: Disabled Git auto EOL CRLF transforms
@@ -135,7 +134,7 @@ jobs:
       - name: Ensure build successful
         run: poetry build
       - name: Run tox
-        run: poetry run tox -e py-${{ matrix.toxenv-factor }} -s false
+        run: poetry run tox run -e py-${{ matrix.toxenv-factor }} -s false
       - name: Generate coverage reports
         shell: bash
         run: |
@@ -186,7 +185,7 @@ jobs:
         # see https://github.com/actions/setup-python
         uses: actions/setup-python@v4
         with:
-          python-version: '>=3.7 <=3.11'  # supported version range
+          python-version: '>=3.8 <=3.11'  # supported version range
       - name: Validate Python Environment
         shell: python
         run: |
diff --git a/.mypy.ini b/.mypy.ini
index f3dc121d9..c15c04ab1 100644
--- a/.mypy.ini
+++ b/.mypy.ini
@@ -26,9 +26,7 @@ no_implicit_optional        = True
 warn_redundant_casts        = True
 warn_return_any             = True
 no_implicit_reexport        = True
-
-# needed to silence some py37|py38 differences
-warn_unused_ignores         = False
+warn_unused_ignores         = True
 
 [mypy-pytest.*]
 ignore_missing_imports = True
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 13a45baaa..c4cfa73b2 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -23,7 +23,7 @@ Get it all applied via:
 
 ```shell
 poetry run isort .
-poetry run flake8 cyclonedx/ tests/ typings/
+poetry run autopep8 -ir cyclonedx/ tests/ typings/
 ```
 
 ## Documentation
@@ -45,7 +45,7 @@ make html
 Run all tests in dedicated environments, via:
 
 ```shell
-poetry run tox
+poetry run tox run
 ```
 
 ## Sign off your commits
diff --git a/cyclonedx/model/__init__.py b/cyclonedx/model/__init__.py
index 59b45cca7..47f709a10 100644
--- a/cyclonedx/model/__init__.py
+++ b/cyclonedx/model/__init__.py
@@ -129,7 +129,7 @@ def __init__(self, *, flow: DataFlow, classification: str) -> None:
         self.flow = flow
         self.classification = classification
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def flow(self) -> DataFlow:
         """
@@ -153,7 +153,7 @@ def flow(self) -> DataFlow:
     def flow(self, flow: DataFlow) -> None:
         self._flow = flow
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_name('.')
     def classification(self) -> str:
         """
@@ -207,7 +207,7 @@ def __init__(self, *, content: str, content_type: str = DEFAULT_CONTENT_TYPE,
         self.encoding = encoding
         self.content = content
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     @serializable.xml_name('content-type')
     def content_type(self) -> str:
@@ -223,7 +223,7 @@ def content_type(self) -> str:
     def content_type(self, content_type: str) -> None:
         self._content_type = content_type
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def encoding(self) -> Optional[Encoding]:
         """
@@ -238,7 +238,7 @@ def encoding(self) -> Optional[Encoding]:
     def encoding(self, encoding: Optional[Encoding]) -> None:
         self._encoding = encoding
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_name('.')
     def content(self) -> str:
         """
@@ -347,7 +347,7 @@ def __init__(self, *, alg: HashAlgorithm, content: str) -> None:
         self.alg = alg
         self.content = content
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def alg(self) -> HashAlgorithm:
         """
@@ -362,7 +362,7 @@ def alg(self) -> HashAlgorithm:
     def alg(self, alg: HashAlgorithm) -> None:
         self._alg = alg
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_name('.')
     def content(self) -> str:
         """
@@ -442,7 +442,7 @@ def __init__(self, uri: str) -> None:
             )
         self._uri = uri
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.json_name('.')
     @serializable.xml_name('.')
     def uri(self) -> str:
@@ -499,7 +499,7 @@ def __init__(self, *, type: ExternalReferenceType, url: XsUri, comment: Optional
         self.type = type
         self.hashes = hashes or []  # type: ignore
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def url(self) -> XsUri:
         """
@@ -528,7 +528,7 @@ def comment(self) -> Optional[str]:
     def comment(self, comment: Optional[str]) -> None:
         self._comment = comment
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def type(self) -> ExternalReferenceType:
         """
@@ -546,7 +546,7 @@ def type(self) -> ExternalReferenceType:
     def type(self, type: ExternalReferenceType) -> None:
         self._type = type
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'hash')
@@ -775,7 +775,7 @@ def __init__(self, *, name: str, value: str) -> None:
         self.name = name
         self.value = value
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def name(self) -> str:
         """
@@ -792,7 +792,7 @@ def name(self) -> str:
     def name(self, name: str) -> None:
         self._name = name
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_name('.')
     def value(self) -> str:
         """
@@ -842,7 +842,7 @@ def __init__(self, *, content: str, content_type: Optional[str] = None,
         self.content_type = content_type or NoteText.DEFAULT_CONTENT_TYPE
         self.encoding = encoding
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_name('.')
     def content(self) -> str:
         """
@@ -857,7 +857,7 @@ def content(self) -> str:
     def content(self, content: str) -> None:
         self._content = content
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     @serializable.xml_name('content-type')
     def content_type(self) -> Optional[str]:
@@ -875,7 +875,7 @@ def content_type(self) -> Optional[str]:
     def content_type(self, content_type: str) -> None:
         self._content_type = content_type
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def encoding(self) -> Optional[Encoding]:
         """
@@ -940,7 +940,7 @@ def text(self) -> NoteText:
     def text(self, text: NoteText) -> None:
         self._text = text
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def locale(self) -> Optional[str]:
         """
@@ -1003,7 +1003,7 @@ def __init__(self, *, name: Optional[str] = None, phone: Optional[str] = None, e
         self.email = email
         self.phone = phone
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def name(self) -> Optional[str]:
         """
@@ -1018,7 +1018,7 @@ def name(self) -> Optional[str]:
     def name(self, name: Optional[str]) -> None:
         self._name = name
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def email(self) -> Optional[str]:
         """
@@ -1033,7 +1033,7 @@ def email(self) -> Optional[str]:
     def email(self, email: Optional[str]) -> None:
         self._email = email
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(3)
     def phone(self) -> Optional[str]:
         """
@@ -1086,7 +1086,7 @@ def __init__(self, *, name: Optional[str] = None, urls: Optional[Iterable[XsUri]
         self.urls = urls or []  # type: ignore
         self.contacts = contacts or []  # type: ignore
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def name(self) -> Optional[str]:
         """
@@ -1101,7 +1101,7 @@ def name(self) -> Optional[str]:
     def name(self, name: Optional[str]) -> None:
         self._name = name
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.json_name('url')
     @serializable.xml_array(serializable.XmlArraySerializationType.FLAT, 'url')
     @serializable.xml_sequence(2)
@@ -1118,7 +1118,7 @@ def urls(self) -> "SortedSet[XsUri]":
     def urls(self, urls: Iterable[XsUri]) -> None:
         self._urls = SortedSet(urls)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.json_name('contact')
     @serializable.xml_array(serializable.XmlArraySerializationType.FLAT, 'contact')
     @serializable.xml_sequence(3)
@@ -1172,7 +1172,7 @@ def __init__(self, *, vendor: Optional[str] = None, name: Optional[str] = None,
         self.hashes = hashes or []  # type: ignore
         self.external_references = external_references or []  # type: ignore
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def vendor(self) -> Optional[str]:
         """
@@ -1187,7 +1187,7 @@ def vendor(self) -> Optional[str]:
     def vendor(self, vendor: Optional[str]) -> None:
         self._vendor = vendor
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def name(self) -> Optional[str]:
         """
@@ -1202,7 +1202,7 @@ def name(self) -> Optional[str]:
     def name(self, name: Optional[str]) -> None:
         self._name = name
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(3)
     def version(self) -> Optional[str]:
         """
@@ -1217,7 +1217,7 @@ def version(self) -> Optional[str]:
     def version(self, version: Optional[str]) -> None:
         self._version = version
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'hash')
     @serializable.xml_sequence(4)
     def hashes(self) -> "SortedSet[HashType]":
@@ -1233,7 +1233,7 @@ def hashes(self) -> "SortedSet[HashType]":
     def hashes(self, hashes: Iterable[HashType]) -> None:
         self._hashes = SortedSet(hashes)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot4)
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'reference')
     @serializable.xml_sequence(5)
@@ -1289,7 +1289,7 @@ def __init__(self, *, timestamp: Optional[datetime] = None, name: Optional[str]
         self.name = name
         self.email = email
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.type_mapping(serializable.helpers.XsdDateTime)
     def timestamp(self) -> Optional[datetime]:
         """
@@ -1362,7 +1362,7 @@ class Copyright:
     def __init__(self, *, text: str) -> None:
         self.text = text
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_name('.')
     def text(self) -> str:
         """
diff --git a/cyclonedx/model/bom.py b/cyclonedx/model/bom.py
index 25ed9e4e6..5c559a089 100644
--- a/cyclonedx/model/bom.py
+++ b/cyclonedx/model/bom.py
@@ -83,7 +83,7 @@ def __init__(self, *, tools: Optional[Iterable[Tool]] = None,
         if not tools:
             self.tools.add(ThisTool)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.type_mapping(serializable.helpers.XsdDateTime)
     @serializable.xml_sequence(1)
     def timestamp(self) -> datetime:
@@ -99,7 +99,7 @@ def timestamp(self) -> datetime:
     def timestamp(self, timestamp: datetime) -> None:
         self._timestamp = timestamp
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'tool')
     @serializable.xml_sequence(2)
     def tools(self) -> "SortedSet[Tool]":
@@ -115,7 +115,7 @@ def tools(self) -> "SortedSet[Tool]":
     def tools(self, tools: Iterable[Tool]) -> None:
         self._tools = SortedSet(tools)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'author')
     @serializable.xml_sequence(3)
     def authors(self) -> "SortedSet[OrganizationalContact]":
@@ -135,7 +135,7 @@ def authors(self) -> "SortedSet[OrganizationalContact]":
     def authors(self, authors: Iterable[OrganizationalContact]) -> None:
         self._authors = SortedSet(authors)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(4)
     def component(self) -> Optional[Component]:
         """
@@ -160,7 +160,7 @@ def component(self, component: Component) -> None:
         """
         self._component = component
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(5)
     def manufacture(self) -> Optional[OrganizationalEntity]:
         """
@@ -175,7 +175,7 @@ def manufacture(self) -> Optional[OrganizationalEntity]:
     def manufacture(self, manufacture: Optional[OrganizationalEntity]) -> None:
         self._manufacture = manufacture
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(6)
     def supplier(self) -> Optional[OrganizationalEntity]:
         """
@@ -192,7 +192,7 @@ def supplier(self) -> Optional[OrganizationalEntity]:
     def supplier(self, supplier: Optional[OrganizationalEntity]) -> None:
         self._supplier = supplier
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
     @serializable.xml_array(serializable.XmlArraySerializationType.FLAT, 'licenses')
@@ -210,7 +210,7 @@ def licenses(self) -> "SortedSet[LicenseChoice]":
     def licenses(self, licenses: Iterable[LicenseChoice]) -> None:
         self._licenses = SortedSet(licenses)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'property')
@@ -247,8 +247,7 @@ def __repr__(self) -> str:
         return f'<BomMetaData timestamp={self.timestamp}, component={self.component}>'
 
 
-@serializable.serializable_class(
-    ignore_during_deserialization=['$schema', 'bom_format', 'spec_version'])  # type: ignore[misc]
+@serializable.serializable_class(ignore_during_deserialization=['$schema', 'bom_format', 'spec_version'])
 class Bom:
     """
     This is our internal representation of a bill-of-materials (BOM).
@@ -297,7 +296,7 @@ def __init__(self, *, components: Optional[Iterable[Component]] = None,
         self.version = version
         self.dependencies = SortedSet(dependencies) or SortedSet()
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.type_mapping(UrnUuidHelper)
     @serializable.view(SchemaVersion1Dot1)
     @serializable.view(SchemaVersion1Dot2)
@@ -318,7 +317,7 @@ def serial_number(self) -> UUID:
     def serial_number(self, serial_number: UUID) -> None:
         self._serial_number = serial_number
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot2)
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
@@ -339,7 +338,7 @@ def metadata(self) -> BomMetaData:
     def metadata(self, metadata: BomMetaData) -> None:
         self._metadata = metadata
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.include_none(SchemaVersion1Dot0)
     @serializable.include_none(SchemaVersion1Dot1)
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'component')
@@ -397,7 +396,7 @@ def has_component(self, component: Component) -> bool:
         """
         return component in self.components
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot2)
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
@@ -416,7 +415,7 @@ def services(self) -> "SortedSet[Service]":
     def services(self, services: Iterable[Service]) -> None:
         self._services = SortedSet(services)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot1)
     @serializable.view(SchemaVersion1Dot2)
     @serializable.view(SchemaVersion1Dot3)
@@ -474,7 +473,7 @@ def has_vulnerabilities(self) -> bool:
         """
         return bool(self.vulnerabilities)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot4)
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'vulnerability')
     @serializable.xml_sequence(8)
@@ -491,7 +490,7 @@ def vulnerabilities(self) -> "SortedSet[Vulnerability]":
     def vulnerabilities(self, vulnerabilities: Iterable[Vulnerability]) -> None:
         self._vulnerabilities = SortedSet(vulnerabilities)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def version(self) -> int:
         return self._version
@@ -500,7 +499,7 @@ def version(self) -> int:
     def version(self, version: int) -> None:
         self._version = version
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot2)
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
diff --git a/cyclonedx/model/component.py b/cyclonedx/model/component.py
index 4833db136..f3fd386d3 100644
--- a/cyclonedx/model/component.py
+++ b/cyclonedx/model/component.py
@@ -80,7 +80,7 @@ def __init__(self, *, uid: Optional[str] = None, url: Optional[XsUri] = None,
         self.committer = committer
         self.message = message
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def uid(self) -> Optional[str]:
         """
@@ -96,7 +96,7 @@ def uid(self) -> Optional[str]:
     def uid(self, uid: Optional[str]) -> None:
         self._uid = uid
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def url(self) -> Optional[XsUri]:
         """
@@ -111,7 +111,7 @@ def url(self) -> Optional[XsUri]:
     def url(self, url: Optional[XsUri]) -> None:
         self._url = url
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(3)
     def author(self) -> Optional[IdentifiableAction]:
         """
@@ -126,7 +126,7 @@ def author(self) -> Optional[IdentifiableAction]:
     def author(self, author: Optional[IdentifiableAction]) -> None:
         self._author = author
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(4)
     def committer(self) -> Optional[IdentifiableAction]:
         """
@@ -141,7 +141,7 @@ def committer(self) -> Optional[IdentifiableAction]:
     def committer(self, committer: Optional[IdentifiableAction]) -> None:
         self._committer = committer
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(5)
     def message(self) -> Optional[str]:
         """
@@ -195,7 +195,7 @@ def __init__(self, *, licenses: Optional[Iterable[LicenseChoice]] = None,
         self.licenses = licenses or []  # type: ignore
         self.copyright = copyright or []  # type: ignore
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.FLAT, 'license')
     def licenses(self) -> "SortedSet[LicenseChoice]":
         """
@@ -210,7 +210,7 @@ def licenses(self) -> "SortedSet[LicenseChoice]":
     def licenses(self, licenses: Iterable[LicenseChoice]) -> None:
         self._licenses = SortedSet(licenses)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'text')
     def copyright(self) -> "SortedSet[Copyright]":
         """
@@ -356,7 +356,7 @@ def __init__(self, *, type: PatchClassification, diff: Optional[Diff] = None,
         self.diff = diff
         self.resolves = resolves or []  # type: ignore
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def type(self) -> PatchClassification:
         """
@@ -389,7 +389,7 @@ def diff(self) -> Optional[Diff]:
     def diff(self, diff: Optional[Diff]) -> None:
         self._diff = diff
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'issue')
     def resolves(self) -> "SortedSet[IssueType]":
         """
@@ -453,7 +453,7 @@ def __init__(self, *, ancestors: Optional[Iterable['Component']] = None,
         self.patches = patches or []  # type: ignore
         self.notes = notes
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'component')
     @serializable.xml_sequence(1)
     def ancestors(self) -> "SortedSet['Component']":
@@ -475,7 +475,7 @@ def ancestors(self) -> "SortedSet['Component']":
     def ancestors(self, ancestors: Iterable['Component']) -> None:
         self._ancestors = SortedSet(ancestors)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'component')
     @serializable.xml_sequence(2)
     def descendants(self) -> "SortedSet['Component']":
@@ -492,7 +492,7 @@ def descendants(self) -> "SortedSet['Component']":
     def descendants(self, descendants: Iterable['Component']) -> None:
         self._descendants = SortedSet(descendants)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'component')
     @serializable.xml_sequence(3)
     def variants(self) -> "SortedSet['Component']":
@@ -510,7 +510,7 @@ def variants(self) -> "SortedSet['Component']":
     def variants(self, variants: Iterable['Component']) -> None:
         self._variants = SortedSet(variants)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'commit')
     @serializable.xml_sequence(4)
     def commits(self) -> "SortedSet[Commit]":
@@ -527,7 +527,7 @@ def commits(self) -> "SortedSet[Commit]":
     def commits(self, commits: Iterable[Commit]) -> None:
         self._commits = SortedSet(commits)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot2)
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
@@ -547,7 +547,7 @@ def patches(self) -> "SortedSet[Patch]":
     def patches(self, patches: Iterable[Patch]) -> None:
         self._patches = SortedSet(patches)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(6)
     def notes(self) -> Optional[str]:
         """
@@ -597,7 +597,7 @@ def __init__(self, *, tag_id: str, name: str, version: Optional[str] = None,
         self.text = text
         self.url = url
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def tag_id(self) -> str:
         """
@@ -612,7 +612,7 @@ def tag_id(self) -> str:
     def tag_id(self, tag_id: str) -> None:
         self._tag_id = tag_id
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def name(self) -> str:
         """
@@ -627,7 +627,7 @@ def name(self) -> str:
     def name(self, name: str) -> None:
         self._name = name
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def version(self) -> Optional[str]:
         """
@@ -642,7 +642,7 @@ def version(self) -> Optional[str]:
     def version(self, version: Optional[str]) -> None:
         self._version = version
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def tag_version(self) -> Optional[int]:
         """
@@ -657,7 +657,7 @@ def tag_version(self) -> Optional[int]:
     def tag_version(self, tag_version: Optional[int]) -> None:
         self._tag_version = tag_version
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def patch(self) -> Optional[bool]:
         """
@@ -813,7 +813,7 @@ def __init__(self, *, name: str, type: ComponentType = ComponentType.LIBRARY,
 
         self.__dependencies: "SortedSet[BomRef]" = SortedSet()
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def type(self) -> ComponentType:
         """
@@ -846,7 +846,7 @@ def mime_type(self) -> Optional[str]:
     def mime_type(self, mime_type: Optional[str]) -> None:
         self._mime_type = mime_type
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.json_name('bom-ref')
     @serializable.type_mapping(BomRefHelper)
     @serializable.view(SchemaVersion1Dot1)
@@ -867,7 +867,7 @@ def bom_ref(self) -> BomRef:
         """
         return self._bom_ref
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot2)
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
@@ -886,7 +886,7 @@ def supplier(self) -> Optional[OrganizationalEntity]:
     def supplier(self, supplier: Optional[OrganizationalEntity]) -> None:
         self._supplier = supplier
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot2)
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
@@ -904,7 +904,7 @@ def author(self) -> Optional[str]:
     def author(self, author: Optional[str]) -> None:
         self._author = author
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(3)
     def publisher(self) -> Optional[str]:
         """
@@ -919,7 +919,7 @@ def publisher(self) -> Optional[str]:
     def publisher(self, publisher: Optional[str]) -> None:
         self._publisher = publisher
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(4)
     def group(self) -> Optional[str]:
         """
@@ -938,7 +938,7 @@ def group(self) -> Optional[str]:
     def group(self, group: Optional[str]) -> None:
         self._group = group
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(5)
     def name(self) -> str:
         """
@@ -957,7 +957,7 @@ def name(self) -> str:
     def name(self, name: str) -> None:
         self._name = name
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.include_none(SchemaVersion1Dot0, "")
     @serializable.include_none(SchemaVersion1Dot1, "")
     @serializable.include_none(SchemaVersion1Dot2, "")
@@ -979,7 +979,7 @@ def version(self) -> Optional[str]:
     def version(self, version: Optional[str]) -> None:
         self._version = version
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(7)
     def description(self) -> Optional[str]:
         """
@@ -994,7 +994,7 @@ def description(self) -> Optional[str]:
     def description(self, description: Optional[str]) -> None:
         self._description = description
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(8)
     def scope(self) -> Optional[ComponentScope]:
         """
@@ -1011,7 +1011,7 @@ def scope(self) -> Optional[ComponentScope]:
     def scope(self, scope: Optional[ComponentScope]) -> None:
         self._scope = scope
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'hash')
     @serializable.xml_sequence(9)
     def hashes(self) -> "SortedSet[HashType]":
@@ -1027,7 +1027,7 @@ def hashes(self) -> "SortedSet[HashType]":
     def hashes(self, hashes: Iterable[HashType]) -> None:
         self._hashes = SortedSet(hashes)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot1)
     @serializable.view(SchemaVersion1Dot2)
     @serializable.view(SchemaVersion1Dot3)
@@ -1047,7 +1047,7 @@ def licenses(self) -> "SortedSet[LicenseChoice]":
     def licenses(self, licenses: Iterable[LicenseChoice]) -> None:
         self._licenses = SortedSet(licenses)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(11)
     def copyright(self) -> Optional[str]:
         """
@@ -1063,7 +1063,7 @@ def copyright(self) -> Optional[str]:
     def copyright(self, copyright: Optional[str]) -> None:
         self._copyright = copyright
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(12)
     def cpe(self) -> Optional[str]:
         """
@@ -1079,7 +1079,7 @@ def cpe(self) -> Optional[str]:
     def cpe(self, cpe: Optional[str]) -> None:
         self._cpe = cpe
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.type_mapping(PackageUrl)
     @serializable.xml_sequence(13)
     def purl(self) -> Optional[PackageURL]:
@@ -1098,7 +1098,7 @@ def purl(self) -> Optional[PackageURL]:
     def purl(self, purl: Optional[PackageURL]) -> None:
         self._purl = purl
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot2)
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
@@ -1116,7 +1116,7 @@ def swid(self) -> Optional[Swid]:
     def swid(self, swid: Optional[Swid]) -> None:
         self._swid = swid
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot0)
     @serializable.xml_sequence(18)
     def modified(self) -> bool:
@@ -1126,7 +1126,7 @@ def modified(self) -> bool:
     def modified(self, modified: bool) -> None:
         self._modified = modified
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot1)
     @serializable.view(SchemaVersion1Dot2)
     @serializable.view(SchemaVersion1Dot3)
@@ -1146,7 +1146,7 @@ def pedigree(self) -> Optional[Pedigree]:
     def pedigree(self, pedigree: Optional[Pedigree]) -> None:
         self._pedigree = pedigree
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot1)
     @serializable.view(SchemaVersion1Dot2)
     @serializable.view(SchemaVersion1Dot3)
@@ -1167,7 +1167,7 @@ def external_references(self) -> "SortedSet[ExternalReference]":
     def external_references(self, external_references: Iterable[ExternalReference]) -> None:
         self._external_references = SortedSet(external_references)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'property')
@@ -1186,7 +1186,7 @@ def properties(self) -> "SortedSet[Property]":
     def properties(self, properties: Iterable[Property]) -> None:
         self._properties = SortedSet(properties)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'component')
     @serializable.xml_sequence(19)
     def components(self) -> "SortedSet['Component']":
@@ -1204,7 +1204,7 @@ def components(self) -> "SortedSet['Component']":
     def components(self, components: Iterable['Component']) -> None:
         self._components = SortedSet(components)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
     @serializable.xml_sequence(20)
@@ -1221,7 +1221,7 @@ def evidence(self) -> Optional[ComponentEvidence]:
     def evidence(self, evidence: Optional[ComponentEvidence]) -> None:
         self._evidence = evidence
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot4)
     @serializable.xml_sequence(21)
     def release_notes(self) -> Optional[ReleaseNotes]:
diff --git a/cyclonedx/model/dependency.py b/cyclonedx/model/dependency.py
index 141052375..d275b1600 100644
--- a/cyclonedx/model/dependency.py
+++ b/cyclonedx/model/dependency.py
@@ -60,7 +60,7 @@ def __init__(self, ref: BomRef, dependencies: Optional[Iterable["Dependency"]] =
         self.ref = ref
         self.dependencies = SortedSet(dependencies or [])
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.type_mapping(BomRefHelper)
     @serializable.xml_attribute()
     def ref(self) -> BomRef:
@@ -70,7 +70,7 @@ def ref(self) -> BomRef:
     def ref(self, ref: BomRef) -> None:
         self._ref = ref
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.json_name('dependsOn')
     @serializable.type_mapping(DependencyDependencies)
     @serializable.xml_array(serializable.XmlArraySerializationType.FLAT, 'dependency')
diff --git a/cyclonedx/model/issue.py b/cyclonedx/model/issue.py
index 554f27723..8584fb0a5 100644
--- a/cyclonedx/model/issue.py
+++ b/cyclonedx/model/issue.py
@@ -120,7 +120,7 @@ def __init__(self, *, type: IssueClassification, id: Optional[str] = None, name:
         self.source = source
         self.references = references or []  # type: ignore
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_attribute()
     def type(self) -> IssueClassification:
         """
@@ -135,7 +135,7 @@ def type(self) -> IssueClassification:
     def type(self, type: IssueClassification) -> None:
         self._type = type
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def id(self) -> Optional[str]:
         """
@@ -150,7 +150,7 @@ def id(self) -> Optional[str]:
     def id(self, id: Optional[str]) -> None:
         self._id = id
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def name(self) -> Optional[str]:
         """
@@ -165,7 +165,7 @@ def name(self) -> Optional[str]:
     def name(self, name: Optional[str]) -> None:
         self._name = name
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(3)
     def description(self) -> Optional[str]:
         """
@@ -180,7 +180,7 @@ def description(self) -> Optional[str]:
     def description(self, description: Optional[str]) -> None:
         self._description = description
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(4)
     def source(self) -> Optional[IssueTypeSource]:
         """
@@ -195,7 +195,7 @@ def source(self) -> Optional[IssueTypeSource]:
     def source(self, source: Optional[IssueTypeSource]) -> None:
         self._source = source
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'url')
     @serializable.xml_sequence(5)
     def references(self) -> "SortedSet[XsUri]":
diff --git a/cyclonedx/model/release_note.py b/cyclonedx/model/release_note.py
index eb9423810..c5164352f 100644
--- a/cyclonedx/model/release_note.py
+++ b/cyclonedx/model/release_note.py
@@ -53,7 +53,7 @@ def __init__(self, *, type: str, title: Optional[str] = None, featured_image: Op
         self.notes = notes or []  # type: ignore
         self.properties = properties or []  # type: ignore
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def type(self) -> str:
         """
@@ -79,7 +79,7 @@ def type(self) -> str:
     def type(self, type: str) -> None:
         self._type = type
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def title(self) -> Optional[str]:
         """
@@ -91,7 +91,7 @@ def title(self) -> Optional[str]:
     def title(self, title: Optional[str]) -> None:
         self._title = title
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(3)
     def featured_image(self) -> Optional[XsUri]:
         """
@@ -103,7 +103,7 @@ def featured_image(self) -> Optional[XsUri]:
     def featured_image(self, featured_image: Optional[XsUri]) -> None:
         self._featured_image = featured_image
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(4)
     def social_image(self) -> Optional[XsUri]:
         """
@@ -115,7 +115,7 @@ def social_image(self) -> Optional[XsUri]:
     def social_image(self, social_image: Optional[XsUri]) -> None:
         self._social_image = social_image
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(5)
     def description(self) -> Optional[str]:
         """
@@ -127,7 +127,7 @@ def description(self) -> Optional[str]:
     def description(self, description: Optional[str]) -> None:
         self._description = description
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.type_mapping(serializable.helpers.XsdDateTime)
     @serializable.xml_sequence(6)
     def timestamp(self) -> Optional[datetime]:
@@ -140,7 +140,7 @@ def timestamp(self) -> Optional[datetime]:
     def timestamp(self, timestamp: Optional[datetime]) -> None:
         self._timestamp = timestamp
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'alias')
     @serializable.xml_sequence(7)
     def aliases(self) -> "SortedSet[str]":
@@ -157,7 +157,7 @@ def aliases(self) -> "SortedSet[str]":
     def aliases(self, aliases: Iterable[str]) -> None:
         self._aliases = SortedSet(aliases)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'tag')
     @serializable.xml_sequence(8)
     def tags(self) -> "SortedSet[str]":
@@ -173,7 +173,7 @@ def tags(self) -> "SortedSet[str]":
     def tags(self, tags: Iterable[str]) -> None:
         self._tags = SortedSet(tags)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'issue')
     @serializable.xml_sequence(9)
     def resolves(self) -> "SortedSet[IssueType]":
@@ -189,7 +189,7 @@ def resolves(self) -> "SortedSet[IssueType]":
     def resolves(self, resolves: Iterable[IssueType]) -> None:
         self._resolves = SortedSet(resolves)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'note')
     @serializable.xml_sequence(10)
     def notes(self) -> "SortedSet[Note]":
@@ -206,7 +206,7 @@ def notes(self) -> "SortedSet[Note]":
     def notes(self, notes: Iterable[Note]) -> None:
         self._notes = SortedSet(notes)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'property')
     @serializable.xml_sequence(11)
     def properties(self) -> "SortedSet[Property]":
diff --git a/cyclonedx/model/service.py b/cyclonedx/model/service.py
index e951c31a6..7dbbccf75 100644
--- a/cyclonedx/model/service.py
+++ b/cyclonedx/model/service.py
@@ -65,7 +65,7 @@ def __init__(self, *, name: str, bom_ref: Optional[Union[str, BomRef]] = None,
                  services: Optional[Iterable['Service']] = None,
                  release_notes: Optional[ReleaseNotes] = None,
                  ) -> None:
-        if type(bom_ref) == BomRef:
+        if isinstance(bom_ref, BomRef):
             self._bom_ref = bom_ref
         else:
             self._bom_ref = BomRef(value=str(bom_ref) if bom_ref else str(uuid4()))
@@ -84,7 +84,7 @@ def __init__(self, *, name: str, bom_ref: Optional[Union[str, BomRef]] = None,
         self.release_notes = release_notes
         self.properties = properties or []  # type: ignore
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.json_name('bom-ref')
     @serializable.type_mapping(BomRefHelper)
     @serializable.xml_attribute()
@@ -101,7 +101,7 @@ def bom_ref(self) -> BomRef:
         """
         return self._bom_ref
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def provider(self) -> Optional[OrganizationalEntity]:
         """
@@ -116,7 +116,7 @@ def provider(self) -> Optional[OrganizationalEntity]:
     def provider(self, provider: Optional[OrganizationalEntity]) -> None:
         self._provider = provider
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def group(self) -> Optional[str]:
         """
@@ -132,7 +132,7 @@ def group(self) -> Optional[str]:
     def group(self, group: Optional[str]) -> None:
         self._group = group
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(3)
     def name(self) -> str:
         """
@@ -147,7 +147,7 @@ def name(self) -> str:
     def name(self, name: str) -> None:
         self._name = name
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(4)
     def version(self) -> Optional[str]:
         """
@@ -162,7 +162,7 @@ def version(self) -> Optional[str]:
     def version(self, version: Optional[str]) -> None:
         self._version = version
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(5)
     def description(self) -> Optional[str]:
         """
@@ -177,7 +177,7 @@ def description(self) -> Optional[str]:
     def description(self, description: Optional[str]) -> None:
         self._description = description
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'endpoint')
     @serializable.xml_sequence(6)
     def endpoints(self) -> "SortedSet[XsUri]":
@@ -193,7 +193,7 @@ def endpoints(self) -> "SortedSet[XsUri]":
     def endpoints(self, endpoints: Iterable[XsUri]) -> None:
         self._endpoints = SortedSet(endpoints)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(7)
     def authenticated(self) -> Optional[bool]:
         """
@@ -211,7 +211,7 @@ def authenticated(self) -> Optional[bool]:
     def authenticated(self, authenticated: Optional[bool]) -> None:
         self._authenticated = authenticated
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.json_name('x-trust-boundary')
     @serializable.xml_name('x-trust-boundary')
     @serializable.xml_sequence(8)
@@ -231,7 +231,7 @@ def x_trust_boundary(self) -> Optional[bool]:
     def x_trust_boundary(self, x_trust_boundary: Optional[bool]) -> None:
         self._x_trust_boundary = x_trust_boundary
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'classification')
     @serializable.xml_sequence(9)
     def data(self) -> "SortedSet[DataClassification]":
@@ -247,7 +247,7 @@ def data(self) -> "SortedSet[DataClassification]":
     def data(self, data: Iterable[DataClassification]) -> None:
         self._data = SortedSet(data)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.FLAT, 'licenses')
     @serializable.xml_sequence(10)
     def licenses(self) -> "SortedSet[LicenseChoice]":
@@ -263,7 +263,7 @@ def licenses(self) -> "SortedSet[LicenseChoice]":
     def licenses(self, licenses: Iterable[LicenseChoice]) -> None:
         self._licenses = SortedSet(licenses)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'reference')
     @serializable.xml_sequence(11)
     def external_references(self) -> "SortedSet[ExternalReference]":
@@ -279,7 +279,7 @@ def external_references(self) -> "SortedSet[ExternalReference]":
     def external_references(self, external_references: Iterable[ExternalReference]) -> None:
         self._external_references = SortedSet(external_references)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'service')
     @serializable.xml_sequence(13)
     def services(self) -> "SortedSet['Service']":
@@ -299,7 +299,7 @@ def services(self) -> "SortedSet['Service']":
     def services(self, services: Iterable['Service']) -> None:
         self._services = SortedSet(services)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot4)
     @serializable.xml_sequence(14)
     def release_notes(self) -> Optional[ReleaseNotes]:
@@ -315,7 +315,7 @@ def release_notes(self) -> Optional[ReleaseNotes]:
     def release_notes(self, release_notes: Optional[ReleaseNotes]) -> None:
         self._release_notes = release_notes
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.view(SchemaVersion1Dot3)
     @serializable.view(SchemaVersion1Dot4)
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'property')
diff --git a/cyclonedx/model/vulnerability.py b/cyclonedx/model/vulnerability.py
index 66f6cbb94..07f284a34 100644
--- a/cyclonedx/model/vulnerability.py
+++ b/cyclonedx/model/vulnerability.py
@@ -77,7 +77,7 @@ def __init__(self, *, version: Optional[str] = None, range: Optional[str] = None
         self.range = range
         self.status = status
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def version(self) -> Optional[str]:
         """
@@ -89,7 +89,7 @@ def version(self) -> Optional[str]:
     def version(self, version: Optional[str]) -> None:
         self._version = version
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def range(self) -> Optional[str]:
         """
@@ -106,7 +106,7 @@ def range(self) -> Optional[str]:
     def range(self, range: Optional[str]) -> None:
         self._range = range
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(3)
     def status(self) -> Optional[ImpactAnalysisAffectedStatus]:
         """
@@ -154,7 +154,7 @@ def __init__(self, *, ref: str, versions: Optional[Iterable[BomTargetVersionRang
         self.ref = ref
         self.versions = versions or []  # type: ignore
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def ref(self) -> str:
         """
@@ -166,7 +166,7 @@ def ref(self) -> str:
     def ref(self, ref: str) -> None:
         self._ref = ref
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'version')
     @serializable.xml_sequence(2)
     def versions(self) -> "SortedSet[BomTargetVersionRange]":
@@ -222,7 +222,7 @@ def __init__(self, *, state: Optional[ImpactAnalysisState] = None,
         self.responses = responses or []  # type: ignore
         self.detail = detail
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def state(self) -> Optional[ImpactAnalysisState]:
         """
@@ -237,7 +237,7 @@ def state(self) -> Optional[ImpactAnalysisState]:
     def state(self, state: Optional[ImpactAnalysisState]) -> None:
         self._state = state
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def justification(self) -> Optional[ImpactAnalysisJustification]:
         """
@@ -252,7 +252,7 @@ def justification(self) -> Optional[ImpactAnalysisJustification]:
     def justification(self, justification: Optional[ImpactAnalysisJustification]) -> None:
         self._justification = justification
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.json_name('response')
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'response')
     @serializable.xml_sequence(3)
@@ -271,7 +271,7 @@ def responses(self) -> "SortedSet[ImpactAnalysisResponse]":
     def responses(self, responses: Iterable[ImpactAnalysisResponse]) -> None:
         self._responses = SortedSet(responses)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(4)
     def detail(self) -> Optional[str]:
         """
@@ -313,7 +313,7 @@ def __init__(self, *, url: XsUri, title: Optional[str] = None) -> None:
         self.title = title
         self.url = url
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def title(self) -> Optional[str]:
         """
@@ -325,7 +325,7 @@ def title(self) -> Optional[str]:
     def title(self, title: Optional[str]) -> None:
         self._title = title
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def url(self) -> XsUri:
         """
@@ -373,7 +373,7 @@ def __init__(self, *, name: Optional[str] = None, url: Optional[XsUri] = None) -
         self.name = name
         self.url = url
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def name(self) -> Optional[str]:
         """
@@ -385,7 +385,7 @@ def name(self) -> Optional[str]:
     def name(self, name: Optional[str]) -> None:
         self._name = name
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def url(self) -> Optional[XsUri]:
         """
@@ -436,7 +436,7 @@ def __init__(self, *, id: Optional[str] = None, source: Optional[VulnerabilitySo
         self.id = id
         self.source = source
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def id(self) -> Optional[str]:
         """
@@ -448,7 +448,7 @@ def id(self) -> Optional[str]:
     def id(self, id: Optional[str]) -> None:
         self._id = id
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def source(self) -> Optional[VulnerabilitySource]:
         """
@@ -644,7 +644,7 @@ def __init__(self, *, source: Optional[VulnerabilitySource] = None, score: Optio
         if vector and method:
             self.vector = method.get_localised_vector(vector=vector)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def source(self) -> Optional[VulnerabilitySource]:
         """
@@ -656,7 +656,7 @@ def source(self) -> Optional[VulnerabilitySource]:
     def source(self, source: Optional[VulnerabilitySource]) -> None:
         self._source = source
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.string_format('.1f')
     @serializable.xml_sequence(2)
     def score(self) -> Optional[Decimal]:
@@ -669,7 +669,7 @@ def score(self) -> Optional[Decimal]:
     def score(self, score: Optional[Decimal]) -> None:
         self._score = score
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(3)
     def severity(self) -> Optional[VulnerabilitySeverity]:
         """
@@ -681,7 +681,7 @@ def severity(self) -> Optional[VulnerabilitySeverity]:
     def severity(self, severity: Optional[VulnerabilitySeverity]) -> None:
         self._severity = severity
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(4)
     def method(self) -> Optional[VulnerabilityScoreSource]:
         """
@@ -693,7 +693,7 @@ def method(self) -> Optional[VulnerabilityScoreSource]:
     def method(self, score_source: Optional[VulnerabilityScoreSource]) -> None:
         self._method = score_source
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(5)
     def vector(self) -> Optional[str]:
         """
@@ -705,7 +705,7 @@ def vector(self) -> Optional[str]:
     def vector(self, vector: Optional[str]) -> None:
         self._vector = vector
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(6)
     def justification(self) -> Optional[str]:
         """
@@ -761,7 +761,7 @@ def __init__(self, *, organizations: Optional[Iterable[OrganizationalEntity]] =
         self.organizations = organizations or []  # type: ignore
         self.individuals = individuals or []  # type: ignore
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'organization')
     @serializable.xml_sequence(1)
     def organizations(self) -> "SortedSet[OrganizationalEntity]":
@@ -777,7 +777,7 @@ def organizations(self) -> "SortedSet[OrganizationalEntity]":
     def organizations(self, organizations: Iterable[OrganizationalEntity]) -> None:
         self._organizations = SortedSet(organizations)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'individual')
     @serializable.xml_sequence(2)
     def individuals(self) -> "SortedSet[OrganizationalContact]":
@@ -836,7 +836,7 @@ def __init__(self, *, bom_ref: Optional[Union[str, BomRef]] = None, id: Optional
                  # Deprecated Parameters kept for backwards compatibility
                  source_name: Optional[str] = None, source_url: Optional[str] = None,
                  recommendations: Optional[Iterable[str]] = None) -> None:
-        if type(bom_ref) == BomRef:
+        if isinstance(bom_ref, BomRef):
             self._bom_ref = bom_ref
         else:
             self._bom_ref = BomRef(value=str(bom_ref) if bom_ref else str(uuid4()))
@@ -868,7 +868,7 @@ def __init__(self, *, bom_ref: Optional[Union[str, BomRef]] = None, id: Optional
             if not recommendation:
                 self.recommendation = next(iter(recommendations))
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.json_name('bom-ref')
     @serializable.type_mapping(BomRefHelper)
     @serializable.xml_attribute()
@@ -884,7 +884,7 @@ def bom_ref(self) -> BomRef:
         """
         return self._bom_ref
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(1)
     def id(self) -> Optional[str]:
         """
@@ -899,7 +899,7 @@ def id(self) -> Optional[str]:
     def id(self, id: Optional[str]) -> None:
         self._id = id
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(2)
     def source(self) -> Optional[VulnerabilitySource]:
         """
@@ -914,7 +914,7 @@ def source(self) -> Optional[VulnerabilitySource]:
     def source(self, source: Optional[VulnerabilitySource]) -> None:
         self._source = source
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'reference')
     @serializable.xml_sequence(3)
     def references(self) -> "SortedSet[VulnerabilityReference]":
@@ -933,7 +933,7 @@ def references(self) -> "SortedSet[VulnerabilityReference]":
     def references(self, references: Iterable[VulnerabilityReference]) -> None:
         self._references = SortedSet(references)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'rating')
     @serializable.xml_sequence(4)
     def ratings(self) -> "SortedSet[VulnerabilityRating]":
@@ -949,7 +949,7 @@ def ratings(self) -> "SortedSet[VulnerabilityRating]":
     def ratings(self, ratings: Iterable[VulnerabilityRating]) -> None:
         self._ratings = SortedSet(ratings)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'cwe')
     @serializable.xml_sequence(5)
     def cwes(self) -> "SortedSet[int]":
@@ -968,7 +968,7 @@ def cwes(self) -> "SortedSet[int]":
     def cwes(self, cwes: Iterable[int]) -> None:
         self._cwes = SortedSet(cwes)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(6)
     def description(self) -> Optional[str]:
         """
@@ -983,7 +983,7 @@ def description(self) -> Optional[str]:
     def description(self, description: Optional[str]) -> None:
         self._description = description
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(7)
     def detail(self) -> Optional[str]:
         """
@@ -999,7 +999,7 @@ def detail(self) -> Optional[str]:
     def detail(self, detail: Optional[str]) -> None:
         self._detail = detail
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(8)
     def recommendation(self) -> Optional[str]:
         """
@@ -1014,7 +1014,7 @@ def recommendation(self) -> Optional[str]:
     def recommendation(self, recommendation: Optional[str]) -> None:
         self._recommendation = recommendation
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'advisory')
     @serializable.xml_sequence(9)
     def advisories(self) -> "SortedSet[VulnerabilityAdvisory]":
@@ -1030,7 +1030,7 @@ def advisories(self) -> "SortedSet[VulnerabilityAdvisory]":
     def advisories(self, advisories: Iterable[VulnerabilityAdvisory]) -> None:
         self._advisories = SortedSet(advisories)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.type_mapping(serializable.helpers.XsdDateTime)
     @serializable.xml_sequence(10)
     def created(self) -> Optional[datetime]:
@@ -1046,7 +1046,7 @@ def created(self) -> Optional[datetime]:
     def created(self, created: Optional[datetime]) -> None:
         self._created = created
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.type_mapping(serializable.helpers.XsdDateTime)
     @serializable.xml_sequence(11)
     def published(self) -> Optional[datetime]:
@@ -1062,7 +1062,7 @@ def published(self) -> Optional[datetime]:
     def published(self, published: Optional[datetime]) -> None:
         self._published = published
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.type_mapping(serializable.helpers.XsdDateTime)
     @serializable.xml_sequence(12)
     def updated(self) -> Optional[datetime]:
@@ -1078,7 +1078,7 @@ def updated(self) -> Optional[datetime]:
     def updated(self, updated: Optional[datetime]) -> None:
         self._updated = updated
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(13)
     def credits(self) -> Optional[VulnerabilityCredits]:
         """
@@ -1093,7 +1093,7 @@ def credits(self) -> Optional[VulnerabilityCredits]:
     def credits(self, credits: Optional[VulnerabilityCredits]) -> None:
         self._credits = credits
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'tool')
     @serializable.xml_sequence(14)
     def tools(self) -> "SortedSet[Tool]":
@@ -1109,7 +1109,7 @@ def tools(self) -> "SortedSet[Tool]":
     def tools(self, tools: Iterable[Tool]) -> None:
         self._tools = SortedSet(tools)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_sequence(15)
     def analysis(self) -> Optional[VulnerabilityAnalysis]:
         """
@@ -1124,7 +1124,7 @@ def analysis(self) -> Optional[VulnerabilityAnalysis]:
     def analysis(self, analysis: Optional[VulnerabilityAnalysis]) -> None:
         self._analysis = analysis
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'target')
     @serializable.xml_sequence(16)
     def affects(self) -> "SortedSet[BomTarget]":
@@ -1140,7 +1140,7 @@ def affects(self) -> "SortedSet[BomTarget]":
     def affects(self, affects_targets: Iterable[BomTarget]) -> None:
         self._affects = SortedSet(affects_targets)
 
-    @property  # type: ignore[misc]
+    @property
     @serializable.xml_array(serializable.XmlArraySerializationType.NESTED, 'property')
     @serializable.xml_sequence(17)
     def properties(self) -> "SortedSet[Property]":
diff --git a/pyproject.toml b/pyproject.toml
index 097b08f11..8f889159c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -36,7 +36,6 @@ classifiers = [
   'Topic :: Software Development',
   'Topic :: System :: Software Distribution',
   'License :: OSI Approved :: Apache Software License',
-  'Programming Language :: Python :: 3.7',
   'Programming Language :: Python :: 3.8',
   'Programming Language :: Python :: 3.9',
   'Programming Language :: Python :: 3.10',
@@ -52,7 +51,7 @@ keywords = [
 
 [tool.poetry.dependencies]
 # ATTENTION: keep `deps.lowest.r` file in sync
-python = "^3.7"
+python = "^3.8"
 packageurl-python = ">= 0.11"
 py-serializable = "^0.11.1"
 sortedcontainers = "^2.4.0"
@@ -60,16 +59,17 @@ license-expression = "^30"
 
 [tool.poetry.dev-dependencies]
 ddt = "1.6.0"
-coverage = "7.2.7"
-flake8 = "5.0.4" # last version supporting Python 3.7
-flake8-annotations = "2.9.1" # last version supporting Python 3.7
-flake8-bugbear = "22.12.6" # last version supporting Python 3.7
-flake8-isort = "4.2.0"
-isort = "5.11.5" # last version supporting Python 3.7
+coverage = "7.3.1"
+flake8 = { version="6.1.0", python=">=3.8.1" }
+flake8-annotations = { version="3.0.1", python=">=3.8.1" }
+flake8-bugbear = { version="23.9.16", python=">=3.8.1" }
+flake8-isort = "6.1.0 "
+isort = "5.12.0"
+autopep8 = "2.0.4"
 jsonschema = "4.17.3"
-mypy = "1.4.1"
+mypy = "1.5.1"
 lxml = "4.9.3"
-tox = "3.28.0"
+tox = "4.11.3"
 xmldiff = "2.6.3"
 
 [tool.semantic_release]
diff --git a/tests/base.py b/tests/base.py
index c844396c8..1727fa35e 100644
--- a/tests/base.py
+++ b/tests/base.py
@@ -45,22 +45,19 @@
 class BaseJsonTestCase(TestCase):
 
     def assertValidAgainstSchema(self, bom_json: str, schema_version: SchemaVersion) -> None:
-        if sys.version_info >= (3, 7):
-            schema_fn = os.path.join(
-                CDX_SCHEMA_DIRECTORY,
-                f'bom-{schema_version.name.replace("_", ".").replace("V", "")}.schema.json'
-            )
-            with open(schema_fn) as schema_fd:
-                schema_doc = json.load(schema_fd)
-
-            try:
-                json_validate(instance=json.loads(bom_json), schema=schema_doc)
-            except ValidationError as e:
-                self.assertTrue(False, f'Failed to validate SBOM against JSON schema: {str(e)}')
-
-            self.assertTrue(True)
-        else:
-            self.assertTrue(True, 'JSON Schema Validation is not possible in Python < 3.7')
+        schema_fn = os.path.join(
+            CDX_SCHEMA_DIRECTORY,
+            f'bom-{schema_version.name.replace("_", ".").replace("V", "")}.schema.json'
+        )
+        with open(schema_fn) as schema_fd:
+            schema_doc = json.load(schema_fd)
+
+        try:
+            json_validate(instance=json.loads(bom_json), schema=schema_doc)
+        except ValidationError as e:
+            self.assertTrue(False, f'Failed to validate SBOM against JSON schema: {str(e)}')
+
+        self.assertTrue(True)
 
     @staticmethod
     def _sort_json_dict(item: object) -> Any:
diff --git a/tox.ini b/tox.ini
index de97d0e62..5f6bc97eb 100644
--- a/tox.ini
+++ b/tox.ini
@@ -4,12 +4,11 @@
 # and then run "tox" from this directory.
 
 [tox]
-minversion = 3.10
+minversion = 4.0
 envlist =
     flake8
     mypy-{locked,lowest}
-    py{311,310,39,38,37}-{locked,lowest}
-isolated_build = True
+    py{311,310,39,38}-{locked,lowest}
 skip_missing_interpreters = True
 usedevelop = False
 download = False
@@ -17,7 +16,7 @@ download = False
 [testenv]
 # settings in this category apply to all other testenv, if not overwritten
 skip_install = True
-whitelist_externals = poetry
+allowlist_externals = poetry
 commands_pre =
     {envpython} --version
     poetry install -v
@@ -33,11 +32,11 @@ setenv =
 commands =
     # mypy config is in own file: `.mypy.ini`
     !lowest: poetry run mypy
-     lowest: poetry run mypy --python-version=3.7
+     lowest: poetry run mypy --python-version=3.8
 
 [testenv:flake8]
 commands =
-    poetry run flake8 cyclonedx/ tests/
+    poetry run flake8 cyclonedx/ tests/ typings/
 
 [flake8]
 ## keep in sync with isort config - in `isort.cfg` file
@@ -54,3 +53,4 @@ ignore =
     ANN101,ANN102
     # ignore ANN401 for dynamically typed *args and **kwargs
     ANN401
+    B028
