diff --git a/README.md b/README.md
index 96ef69972722aa6a4e037e8c86216c135356900b..89fd07eca6edaa3792398ddf8b7e01afcce94819 100644
--- a/README.md
+++ b/README.md
@@ -17,13 +17,13 @@ The latest documentation of this package can be found in our readthedocs site:
 [latest API documentation](http://biobb_common.readthedocs.io/en/latest/).
 
 ### Version
-v3.9.0 2022.4
+v4.0.0 2023.1
 
 ### Copyright & Licensing
 This software has been developed in the [MMB group](http://mmb.irbbarcelona.org) at the [BSC](http://www.bsc.es/) & [IRB](https://www.irbbarcelona.org/) for the [European BioExcel](http://bioexcel.eu/), funded by the European Commission (EU H2020 [823830](http://cordis.europa.eu/projects/823830), EU H2020 [675728](http://cordis.europa.eu/projects/675728)).
 
-* (c) 2015-2022 [Barcelona Supercomputing Center](https://www.bsc.es/)
-* (c) 2015-2022 [Institute for Research in Biomedicine](https://www.irbbarcelona.org/)
+* (c) 2015-2023 [Barcelona Supercomputing Center](https://www.bsc.es/)
+* (c) 2015-2023 [Institute for Research in Biomedicine](https://www.irbbarcelona.org/)
 
 Licensed under the
 [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0), see the file LICENSE for details.
diff --git a/biobb_common/__init__.py b/biobb_common/__init__.py
index 539e65836f72ae29f5719fdfde695ed59c729ff2..a677fb4e4f006cc385f5f36cbf16ba007c4f2e29 100644
--- a/biobb_common/__init__.py
+++ b/biobb_common/__init__.py
@@ -1,2 +1,2 @@
 name = "biobb_common"
-__version__ = "3.9.0"
+__version__ = "4.0.0"
diff --git a/biobb_common/docs/source/conf.py b/biobb_common/docs/source/conf.py
index 923b1ebfb473f6de4b11e22347ac73ab5f7a409c..f936e4f2efcae0126e68ebaa5a90bdb506ff1e26 100644
--- a/biobb_common/docs/source/conf.py
+++ b/biobb_common/docs/source/conf.py
@@ -1,14 +1,14 @@
 # -*- coding: utf-8 -*-
-#
+
 # Pymdsetup documentation build configuration file, created by
 # sphinx-quickstart on Wed Nov 22 09:36:44 2017.
-#
+
 # This file is execfile()d with the current directory set to its
 # containing dir.
-#
+
 # Note that not all possible configuration values are present in this
 # autogenerated file.
-#
+
 # All configuration values have a default; values that are commented out
 # serve to show the default.
 
@@ -24,7 +24,7 @@ sys.path.insert(0, str(Path('../../').resolve()))
 # -- General configuration ------------------------------------------------
 
 # If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
+# needs_sphinx = '1.0'
 
 # Add any Sphinx extension module names here, as strings. They can be
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
@@ -43,8 +43,6 @@ extensions = [
 napoleon_numpy_docstring = False
 napoleon_google_docstring = True
 
-
-
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
 
@@ -60,7 +58,7 @@ source_parsers = {
 source_suffix = ['.rst', '.md']
 
 # The encoding of source files.
-#source_encoding = 'utf-8-sig'
+# source_encoding = 'utf-8-sig'
 
 # The master toctree document.
 master_doc = 'index'
@@ -73,24 +71,24 @@ author = u'Bioexcel Project'
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
-#
+
 # The short X.Y version.
-version = u'3.9.0'
+version = u'4.0.0'
 # The full version, including alpha/beta/rc tags.
-release = u'2022.3'
+release = u'2023.1'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
-#
+
 # This is also used if you do content translation via gettext catalogs.
 # Usually you set "language" from the command line for these cases.
 language = None
 
 # There are two options for replacing |today|: either, you set today to some
 # non-false value, then it is used:
-#today = ''
+# today = ''
 # Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
+# today_fmt = '%B %d, %Y'
 
 # List of patterns, relative to source directory, that match files and
 # directories to ignore when looking for source files.
@@ -98,27 +96,27 @@ exclude_patterns = []
 
 # The reST default role (used for this markup: `text`) to use for all
 # documents.
-#default_role = None
+# default_role = None
 
 # If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
+# add_function_parentheses = True
 
 # If true, the current module name will be prepended to all description
 # unit titles (such as .. function::).
-#add_module_names = True
+# add_module_names = True
 
 # If true, sectionauthor and moduleauthor directives will be shown in the
 # output. They are ignored by default.
-#show_authors = False
+# show_authors = False
 
 # The name of the Pygments (syntax highlighting) style to use.
 pygments_style = 'sphinx'
 
 # A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
+# modindex_common_prefix = []
 
 # If true, keep warnings as "system message" paragraphs in the built documents.
-#keep_warnings = False
+# keep_warnings = False
 
 # If true, `todo` and `todoList` produce output, else they produce nothing.
 todo_include_todos = False
@@ -137,26 +135,26 @@ html_theme = 'sphinx_rtd_theme'
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
 # documentation.
-#html_theme_options = {}
+# html_theme_options = {}
 
 # Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
+# html_theme_path = []
 
 # The name for this set of Sphinx documents.  If None, it defaults to
 # "<project> v<release> documentation".
-#html_title = None
+# html_title = None
 
 # A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
+# html_short_title = None
 
 # The name of an image file (relative to this directory) to place at the top
 # of the sidebar.
-#html_logo = None
+# html_logo = None
 
 # The name of an image file (within the static path) to use as favicon of the
 # docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
 # pixels large.
-#html_favicon = None
+# html_favicon = None
 
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
@@ -166,62 +164,62 @@ html_static_path = ['_static']
 # Add any extra paths that contain custom files (such as robots.txt or
 # .htaccess) here, relative to this directory. These files are copied
 # directly to the root of the documentation.
-#html_extra_path = []
+# html_extra_path = []
 
 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
 # using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
+# html_last_updated_fmt = '%b %d, %Y'
 
 # If true, SmartyPants will be used to convert quotes and dashes to
 # typographically correct entities.
-#html_use_smartypants = True
+# html_use_smartypants = True
 
 # Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
+# html_sidebars = {}
 
 # Additional templates that should be rendered to pages, maps page names to
 # template names.
-#html_additional_pages = {}
+# html_additional_pages = {}
 
 # If false, no module index is generated.
-#html_domain_indices = True
+# html_domain_indices = True
 
 # If false, no index is generated.
-#html_use_index = True
+# html_use_index = True
 
 # If true, the index is split into individual pages for each letter.
-#html_split_index = False
+# html_split_index = False
 
 # If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
+# html_show_sourcelink = True
 
 # If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
+# html_show_sphinx = True
 
 # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
+# html_show_copyright = True
 
 # If true, an OpenSearch description file will be output, and all pages will
 # contain a <link> tag referring to it.  The value of this option must be the
 # base URL from which the finished HTML is served.
-#html_use_opensearch = ''
+# html_use_opensearch = ''
 
 # This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
+# html_file_suffix = None
 
 # Language to be used for generating the HTML full-text search index.
 # Sphinx supports the following languages:
 #   'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
 #   'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
-#html_search_language = 'en'
+# html_search_language = 'en'
 
 # A dictionary with options for the search language support, empty by default.
 # Now only 'ja' uses this config value
-#html_search_options = {'type': 'default'}
+# html_search_options = {'type': 'default'}
 
 # The name of a javascript file (relative to the configuration directory) that
 # implements a search results scorer. If empty, the default will be used.
-#html_search_scorer = 'scorer.js'
+# html_search_scorer = 'scorer.js'
 
 # Output file base name for HTML help builder.
 htmlhelp_basename = 'biobb_common_doc'
@@ -229,18 +227,18 @@ htmlhelp_basename = 'biobb_common_doc'
 # -- Options for LaTeX output ---------------------------------------------
 
 latex_elements = {
-# The paper size ('letterpaper' or 'a4paper').
-#'papersize': 'letterpaper',
+    # The paper size ('letterpaper' or 'a4paper').
+    # 'papersize': 'letterpaper',
 
-# The font size ('10pt', '11pt' or '12pt').
-#'pointsize': '10pt',
+    # The font size ('10pt', '11pt' or '12pt').
+    # 'pointsize': '10pt',
 
-# Additional stuff for the LaTeX preamble.
-#'preamble': '',
+    # Additional stuff for the LaTeX preamble.
+    # 'preamble': '',
 
-# Latex figure (float) alignment
-#'figure_align': 'htbp',
-}
+    # Latex figure (float) alignment
+    # 'figure_align': 'htbp',
+    }
 
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title,
@@ -252,23 +250,23 @@ latex_documents = [
 
 # The name of an image file (relative to this directory) to place at the top of
 # the title page.
-#latex_logo = None
+# latex_logo = None
 
 # For "manual" documents, if this is true, then toplevel headings are parts,
 # not chapters.
-#latex_use_parts = False
+# latex_use_parts = False
 
 # If true, show page references after internal links.
-#latex_show_pagerefs = False
+# latex_show_pagerefs = False
 
 # If true, show URL addresses after external links.
-#latex_show_urls = False
+# latex_show_urls = False
 
 # Documents to append as an appendix to all manuals.
-#latex_appendices = []
+# latex_appendices = []
 
 # If false, no module index is generated.
-#latex_domain_indices = True
+# latex_domain_indices = True
 
 
 # -- Options for manual page output ---------------------------------------
@@ -281,7 +279,7 @@ man_pages = [
 ]
 
 # If true, show URL addresses after external links.
-#man_show_urls = False
+# man_show_urls = False
 
 
 # -- Options for Texinfo output -------------------------------------------
@@ -296,13 +294,13 @@ texinfo_documents = [
 ]
 
 # Documents to append as an appendix to all manuals.
-#texinfo_appendices = []
+# texinfo_appendices = []
 
 # If false, no module index is generated.
-#texinfo_domain_indices = True
+# texinfo_domain_indices = True
 
 # How to display URL addresses: 'footnote', 'no', or 'inline'.
-#texinfo_show_urls = 'footnote'
+# texinfo_show_urls = 'footnote'
 
 # If true, do not generate a @detailmenu in the "Top" node's menu.
-#texinfo_no_detailmenu = False
+# texinfo_no_detailmenu = False
diff --git a/biobb_common/docs/source/readme.md b/biobb_common/docs/source/readme.md
index 96ef69972722aa6a4e037e8c86216c135356900b..89fd07eca6edaa3792398ddf8b7e01afcce94819 100644
--- a/biobb_common/docs/source/readme.md
+++ b/biobb_common/docs/source/readme.md
@@ -17,13 +17,13 @@ The latest documentation of this package can be found in our readthedocs site:
 [latest API documentation](http://biobb_common.readthedocs.io/en/latest/).
 
 ### Version
-v3.9.0 2022.4
+v4.0.0 2023.1
 
 ### Copyright & Licensing
 This software has been developed in the [MMB group](http://mmb.irbbarcelona.org) at the [BSC](http://www.bsc.es/) & [IRB](https://www.irbbarcelona.org/) for the [European BioExcel](http://bioexcel.eu/), funded by the European Commission (EU H2020 [823830](http://cordis.europa.eu/projects/823830), EU H2020 [675728](http://cordis.europa.eu/projects/675728)).
 
-* (c) 2015-2022 [Barcelona Supercomputing Center](https://www.bsc.es/)
-* (c) 2015-2022 [Institute for Research in Biomedicine](https://www.irbbarcelona.org/)
+* (c) 2015-2023 [Barcelona Supercomputing Center](https://www.bsc.es/)
+* (c) 2015-2023 [Institute for Research in Biomedicine](https://www.irbbarcelona.org/)
 
 Licensed under the
 [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0), see the file LICENSE for details.
diff --git a/biobb_common/docs/source/schema.html b/biobb_common/docs/source/schema.html
index ffac06421d6dbffc1da736d4d4db046c5de5e4ec..246c1c4a4603034e558397148cfc8fe7e820a08f 100644
--- a/biobb_common/docs/source/schema.html
+++ b/biobb_common/docs/source/schema.html
@@ -10,7 +10,7 @@
   "applicationSubCategory": "http://www.edamontology.org/topic_3892",
   "citation": "https://www.nature.com/articles/s41597-019-0177-4",
   "license": "https://www.apache.org/licenses/LICENSE-2.0",
-  "softwareVersion": "3.9.0",
+  "softwareVersion": "4.0.0",
   "applicationSuite": "BioBB BioExcel Building Blocks",
   "codeRepository": "https://github.com/bioexcel/biobb_common",
   "isAccessibleForFree": "True",
diff --git a/biobb_common/json_schemas/biobb_common.json b/biobb_common/json_schemas/biobb_common.json
index c033a2b6ebf0287a0316c8350e35bfa5ec05f1c9..e36a50e3a78a4a90a44b5f3cef27d02293e4bbde 100644
--- a/biobb_common/json_schemas/biobb_common.json
+++ b/biobb_common/json_schemas/biobb_common.json
@@ -6,7 +6,7 @@
     "conda": "https://anaconda.org/bioconda/biobb_common",
     "docker": "https://quay.io/biocontainers/biobb_common:3.8.1--pyhdfd78af_0",
     "singularity": "https://depot.galaxyproject.org/singularity/biobb_common:3.8.1--pyhdfd78af_0",
-    "version": "3.9.0",
+    "version": "4.0.0",
     "tools" : [
         {
             "block" : "",
@@ -16,10 +16,10 @@
     ],
     "dep_pypi" : [
         "install_requires=['pyyaml', 'requests', 'biopython==1.79']",
-        "python_requires='>=3.7,<3.10'"
+        "python_requires='>=3.7,<=3.10'"
     ],
     "dep_conda" : [
-        "python >=3.7,<3.10",
+        "python >=3.7,<=3.10",
         "pyyaml",
         "requests",
         "biopython ==1.79"
diff --git a/biobb_common/tools/file_utils.py b/biobb_common/tools/file_utils.py
index 6aea04b1c38776719c788e16870736433678f84d..f660e6cab01bbc512428f2ad2dd8b167fa30ddc4 100644
--- a/biobb_common/tools/file_utils.py
+++ b/biobb_common/tools/file_utils.py
@@ -124,6 +124,7 @@ def zip_list(zip_file: str, file_list: typing.Iterable[str], out_log: logging.Lo
         out_log (:obj:`logging.Logger`): Input log object.
     """
     file_list.sort()
+    Path(zip_file).parent.mkdir(parents=True, exist_ok=True)
     with zipfile.ZipFile(zip_file, 'w') as zip_f:
         inserted = []
         for index, f in enumerate(file_list):
diff --git a/setup.py b/setup.py
index ebf562cb7ddd33ce387c7cc38f8b49defaf05f84..40f8dde2906a56683521c976544df1b89ff821a2 100644
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
 
 setuptools.setup(
     name="biobb_common",
-    version="3.9.0",
+    version="4.0.0",
     author="Biobb developers",
     author_email="pau.andrio@bsc.es",
     description="Biobb_common is the base package required to use the biobb packages.",
@@ -19,7 +19,7 @@ setuptools.setup(
     },
     packages=setuptools.find_packages(exclude=['docs']),
     install_requires=['pyyaml', 'requests', 'biopython==1.79'],
-    python_requires='>=3.7,<3.10',
+    python_requires='>=3.7,<=3.10',
     classifiers=(
         "Development Status :: 3 - Alpha",
         "Programming Language :: Python :: 3.7",