diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 92f4f55ddd4b932bd3272007a515e9fcd4eb7cbf..4871791ad66734b31d0a46270d0d571aa0e3ae4b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,47 +1,20 @@
-default:
-  image: "registry.forgemia.inra.fr/cdos-pub/pycode-quality/python-venv:3.10"
-  tags: ["test"]
+include:
+  - project: "cdos-pub/pycode-quality"
+    ref: "main"
+    file:
+      - ".gitlab/ci/static-analysis.yml"
+      - ".gitlab/ci/pip.yml"
 
 stages:
-  - Code quality
+  - Static Analysis
   - Test
-  - Ship
-
-.static_analysis_base:
-  stage: Code quality
-  allow_failure: true
-  image: "registry.forgemia.inra.fr/cdos-pub/pycode-quality/python-linters:3.10"
-
-Flake8:
-  extends: .static_analysis_base
-  script:
-    - flake8 $PWD/stac_extension_genmeta
-
-Pylint:
-  extends: .static_analysis_base
-  script:
-    - pylint --disable=too-many-arguments $PWD/stac_extension_genmeta
-
-Codespell:
-  extends: .static_analysis_base
-  script:
-    - codespell --skip="*.png,*.jinja2,*venv/*"
+  - Pip
 
 Tests:
+  image: "registry.forgemia.inra.fr/cdos-pub/pycode-quality/python-venv:3.10"
   stage: Test
   script:
     - pip install pip --upgrade
     - pip install .
     - python3 tests/extensions_test.py
 
-Publish the package:
-  stage: Ship
-  only: [tags]
-  variables:
-    PRVTOKEN: "\"PRIVATE-TOKEN: ${CI_JOB_TOKEN}\""
-    URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi"
-  script:
-    - pip install build twine
-    - python -m build
-    - TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token python -m twine upload --verbose --repository-url $URL dist/*
-
diff --git a/stac_extension_genmeta/__init__.py b/stac_extension_genmeta/__init__.py
index 885783b6fa0cdae5b01b8975a4b186c647371742..0affe20f6888bdc3894aa0bd6514549c7c50d422 100644
--- a/stac_extension_genmeta/__init__.py
+++ b/stac_extension_genmeta/__init__.py
@@ -1,2 +1,2 @@
 from .core import create_extension_cls
-__version__ = "0.1.0"
+__version__ = "0.1.1"
diff --git a/stac_extension_genmeta/core.py b/stac_extension_genmeta/core.py
index bcf66f32fa8b7079d19502cbe40a2f767b5cb25d..862a0d0abbbc2e68248925b2ffb7a584bb416c5b 100644
--- a/stac_extension_genmeta/core.py
+++ b/stac_extension_genmeta/core.py
@@ -59,9 +59,8 @@ def create_extension_cls(
                 key: self._get_property(info.alias, str)
                 for key, info in model_cls.__fields__.items()
             }
-            self.md = model_cls(**props) if all(
-                prop is not None for prop in props.values()
-            ) else None
+            props = {p: v for p, v in props.items() if v is not None}
+            self.md = model_cls(**props) if props else None
 
         def __getattr__(self, item):
             # forward getattr to self.md
diff --git a/tests/extensions_test.py b/tests/extensions_test.py
index 89e4650ab728e49f7b4219534737c9de03e882a7..85ec7019c7a29c8de763b55692336a0773c24d04 100644
--- a/tests/extensions_test.py
+++ b/tests/extensions_test.py
@@ -18,6 +18,7 @@ class MyExtensionMetadataModel(BaseModel):
     name: str = Field(title="Process name", alias=f"{PREFIX}:name")
     authors: List[str] = Field(title="Authors", alias=f"{PREFIX}:authors")
     version: str = Field(title="Process version", alias=f"{PREFIX}:version")
+    opt_field: str | None = Field(title="Some optional field", alias=f"{PREFIX}:opt_field", default=None)
 
 
 # Create the extension class