diff --git a/Code/ASFC_notebook.ipynb b/ASFC_notebook.ipynb
similarity index 100%
rename from Code/ASFC_notebook.ipynb
rename to ASFC_notebook.ipynb
diff --git a/Code/licence.txt b/AirSeaFluxCode/licence.txt
similarity index 100%
rename from Code/licence.txt
rename to AirSeaFluxCode/licence.txt
diff --git a/AirSeaFluxCode/pyproject.toml b/AirSeaFluxCode/pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..374b58cbf4636f1e28bacf987ac2fe89ed27ccba
--- /dev/null
+++ b/AirSeaFluxCode/pyproject.toml
@@ -0,0 +1,6 @@
+[build-system]
+requires = [
+    "setuptools>=42",
+    "wheel"
+]
+build-backend = "setuptools.build_meta"
diff --git a/AirSeaFluxCode/readme.md b/AirSeaFluxCode/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..da24e22575ab3a62bdc9be3b9f9e9ed56fa5113f
--- /dev/null
+++ b/AirSeaFluxCode/readme.md
@@ -0,0 +1,2 @@
+Description
+AirSeaFluxCode is a python 3.6 software designed to allow easy exploration of the different bulk formulae parameterizations and the wide range of implementation options.
diff --git a/AirSeaFluxCode/setup.cfg b/AirSeaFluxCode/setup.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..1a968f126d1a6a994db2ce17b981cacfe5635642
--- /dev/null
+++ b/AirSeaFluxCode/setup.cfg
@@ -0,0 +1,24 @@
+[metadata]
+name = AiSeaFluxCode
+version = 0.0.1
+author = sbiri, rcornes, ekent
+author_email = sbiri@noc.ac.uk
+description = AirSeaFluxCode is a software designed to allow easy exploration of the different bulk formulae parameterizations and the wide range of implementation options
+long_description = file: README.md
+long_description_content_type = text/markdown
+url = https://git.noc.ac.uk/NOCSurfaceProcesses/AirSeaFluxCode
+project_urls =
+    Bug Tracker = https://git.noc.ac.uk/NOCSurfaceProcesses/AirSeaFluxCode/issues
+classifiers =
+    Programming Language :: Python :: 3
+    License :: OSI Approved :: CCBY License
+    Operating System :: OS Independent
+
+[options]
+package_dir =
+    = src
+packages = find:
+python_requires = >=3.6
+
+[options.packages.find]
+where = src
diff --git a/AirSeaFluxCode/setup.py b/AirSeaFluxCode/setup.py
new file mode 100644
index 0000000000000000000000000000000000000000..edcd51c40fb9bf67d4d894fe4d92cef91a2eff67
--- /dev/null
+++ b/AirSeaFluxCode/setup.py
@@ -0,0 +1,240 @@
+from setuptools import setup, find_packages
+import pathlib
+
+here = pathlib.Path(__file__).parent.resolve()
+# Get the long description from the README file
+long_description = (here / 'README.md').read_text(encoding='utf-8')
+
+setup(
+    name='AirSeaFluxCode',
+    version='1.0.0',    
+    description='A package to compute turbulent surface fluxes',
+    long_description=long_description,  # Optional
+    url='https://git.noc.ac.uk/NOCSurfaceProcesses/AirSeaFluxCode',
+    author='Stavroula Biri',
+    author_email='sbiri@noc.ac.uk',
+    license='CCBY',
+    package_dir={'': 'src'},  # Optional
+    packages=find_packages(where='src'), #['AirSeaFluxCode'],
+    install_requires=['pandas',
+                      'numpy',                     
+                      ],
+
+    classifiers=[
+        # How mature is this project? Common values are
+        #   3 - Alpha
+        #   4 - Beta
+        #   5 - Production/Stable
+        'Development Status :: 4 - Beta',
+        'Intended Audience :: Science/Research',
+        'License :: OSI Approved :: CCBY License',  
+        'Operating System :: POSIX :: Linux',
+        'Programming Language :: Python :: 3',
+        'Programming Language :: Python :: 3.4',
+        'Programming Language :: Python :: 3.5',
+    ],
+)
+
+
+# """A setuptools based setup module.
+# See:
+# https://packaging.python.org/guides/distributing-packages-using-setuptools/
+# https://github.com/pypa/sampleproject
+# """
+
+# # Always prefer setuptools over distutils
+# from setuptools import setup, find_packages
+# import pathlib
+
+# here = pathlib.Path(__file__).parent.resolve()
+
+# # Get the long description from the README file
+# long_description = (here / 'README.md').read_text(encoding='utf-8')
+
+# # Arguments marked as "Required" below must be included for upload to PyPI.
+# # Fields marked as "Optional" may be commented out.
+
+# setup(
+#     # This is the name of your project. The first time you publish this
+#     # package, this name will be registered for you. It will determine how
+#     # users can install this project, e.g.:
+#     #
+#     # $ pip install sampleproject
+#     #
+#     # And where it will live on PyPI: https://pypi.org/project/sampleproject/
+#     #
+#     # There are some restrictions on what makes a valid project name
+#     # specification here:
+#     # https://packaging.python.org/specifications/core-metadata/#name
+#     name='sampleproject',  # Required
+
+#     # Versions should comply with PEP 440:
+#     # https://www.python.org/dev/peps/pep-0440/
+#     #
+#     # For a discussion on single-sourcing the version across setup.py and the
+#     # project code, see
+#     # https://packaging.python.org/guides/single-sourcing-package-version/
+#     version='2.0.0',  # Required
+
+#     # This is a one-line description or tagline of what your project does. This
+#     # corresponds to the "Summary" metadata field:
+#     # https://packaging.python.org/specifications/core-metadata/#summary
+#     description='A sample Python project',  # Optional
+
+#     # This is an optional longer description of your project that represents
+#     # the body of text which users will see when they visit PyPI.
+#     #
+#     # Often, this is the same as your README, so you can just read it in from
+#     # that file directly (as we have already done above)
+#     #
+#     # This field corresponds to the "Description" metadata field:
+#     # https://packaging.python.org/specifications/core-metadata/#description-optional
+#     long_description=long_description,  # Optional
+
+#     # Denotes that our long_description is in Markdown; valid values are
+#     # text/plain, text/x-rst, and text/markdown
+#     #
+#     # Optional if long_description is written in reStructuredText (rst) but
+#     # required for plain-text or Markdown; if unspecified, "applications should
+#     # attempt to render [the long_description] as text/x-rst; charset=UTF-8 and
+#     # fall back to text/plain if it is not valid rst" (see link below)
+#     #
+#     # This field corresponds to the "Description-Content-Type" metadata field:
+#     # https://packaging.python.org/specifications/core-metadata/#description-content-type-optional
+#     long_description_content_type='text/markdown',  # Optional (see note above)
+
+#     # This should be a valid link to your project's main homepage.
+#     #
+#     # This field corresponds to the "Home-Page" metadata field:
+#     # https://packaging.python.org/specifications/core-metadata/#home-page-optional
+#     url='https://github.com/pypa/sampleproject',  # Optional
+
+#     # This should be your name or the name of the organization which owns the
+#     # project.
+#     author='A. Random Developer',  # Optional
+
+#     # This should be a valid email address corresponding to the author listed
+#     # above.
+#     author_email='author@example.com',  # Optional
+
+#     # Classifiers help users find your project by categorizing it.
+#     #
+#     # For a list of valid classifiers, see https://pypi.org/classifiers/
+#     classifiers=[  # Optional
+#         # How mature is this project? Common values are
+#         #   3 - Alpha
+#         #   4 - Beta
+#         #   5 - Production/Stable
+#         'Development Status :: 3 - Alpha',
+
+#         # Indicate who your project is intended for
+#         'Intended Audience :: Developers',
+#         'Topic :: Software Development :: Build Tools',
+
+#         # Pick your license as you wish
+#         'License :: OSI Approved :: MIT License',
+
+#         # Specify the Python versions you support here. In particular, ensure
+#         # that you indicate you support Python 3. These classifiers are *not*
+#         # checked by 'pip install'. See instead 'python_requires' below.
+#         'Programming Language :: Python :: 3',
+#         'Programming Language :: Python :: 3.6',
+#         'Programming Language :: Python :: 3.7',
+#         'Programming Language :: Python :: 3.8',
+#         'Programming Language :: Python :: 3.9',
+#         "Programming Language :: Python :: 3.10",
+#         'Programming Language :: Python :: 3 :: Only',
+#     ],
+
+#     # This field adds keywords for your project which will appear on the
+#     # project page. What does your project relate to?
+#     #
+#     # Note that this is a list of additional keywords, separated
+#     # by commas, to be used to assist searching for the distribution in a
+#     # larger catalog.
+#     keywords='sample, setuptools, development',  # Optional
+
+#     # When your source code is in a subdirectory under the project root, e.g.
+#     # `src/`, it is necessary to specify the `package_dir` argument.
+#     package_dir={'': 'src'},  # Optional
+
+#     # You can just specify package directories manually here if your project is
+#     # simple. Or you can use find_packages().
+#     #
+#     # Alternatively, if you just want to distribute a single Python file, use
+#     # the `py_modules` argument instead as follows, which will expect a file
+#     # called `my_module.py` to exist:
+#     #
+#     #   py_modules=["my_module"],
+#     #
+#     packages=find_packages(where='src'),  # Required
+
+#     # Specify which Python versions you support. In contrast to the
+#     # 'Programming Language' classifiers above, 'pip install' will check this
+#     # and refuse to install the project if the version does not match. See
+#     # https://packaging.python.org/guides/distributing-packages-using-setuptools/#python-requires
+#     python_requires='>=3.6, <4',
+
+#     # This field lists other packages that your project depends on to run.
+#     # Any package you put here will be installed by pip when your project is
+#     # installed, so they must be valid existing projects.
+#     #
+#     # For an analysis of "install_requires" vs pip's requirements files see:
+#     # https://packaging.python.org/discussions/install-requires-vs-requirements/
+#     install_requires=['peppercorn'],  # Optional
+
+#     # List additional groups of dependencies here (e.g. development
+#     # dependencies). Users will be able to install these using the "extras"
+#     # syntax, for example:
+#     #
+#     #   $ pip install sampleproject[dev]
+#     #
+#     # Similar to `install_requires` above, these must be valid existing
+#     # projects.
+#     extras_require={  # Optional
+#         'dev': ['check-manifest'],
+#         'test': ['coverage'],
+#     },
+
+#     # If there are data files included in your packages that need to be
+#     # installed, specify them here.
+#     package_data={  # Optional
+#         'sample': ['package_data.dat'],
+#     },
+
+#     # Although 'package_data' is the preferred approach, in some case you may
+#     # need to place data files outside of your packages. See:
+#     # http://docs.python.org/distutils/setupscript.html#installing-additional-files
+#     #
+#     # In this case, 'data_file' will be installed into '<sys.prefix>/my_data'
+#     data_files=[('my_data', ['data/data_file'])],  # Optional
+
+#     # To provide executable scripts, use entry points in preference to the
+#     # "scripts" keyword. Entry points provide cross-platform support and allow
+#     # `pip` to create the appropriate form of executable for the target
+#     # platform.
+#     #
+#     # For example, the following would provide a command called `sample` which
+#     # executes the function `main` from this package when invoked:
+#     entry_points={  # Optional
+#         'console_scripts': [
+#             'sample=sample:main',
+#         ],
+#     },
+
+#     # List additional URLs that are relevant to your project as a dict.
+#     #
+#     # This field corresponds to the "Project-URL" metadata fields:
+#     # https://packaging.python.org/specifications/core-metadata/#project-url-multiple-use
+#     #
+#     # Examples listed include a pattern for specifying where the package tracks
+#     # issues, where the source is hosted, where to say thanks to the package
+#     # maintainers, and where to support the project financially. The key is
+#     # what's used to render the link text on PyPI.
+#     project_urls={  # Optional
+#         'Bug Reports': 'https://github.com/pypa/sampleproject/issues',
+#         'Funding': 'https://donate.pypi.org',
+#         'Say Thanks!': 'http://saythanks.io/to/example',
+#         'Source': 'https://github.com/pypa/sampleproject/',
+#     },
+# )
diff --git a/Code/AirSeaFluxCode.py b/AirSeaFluxCode/src/AirSeaFluxCode.py
similarity index 100%
rename from Code/AirSeaFluxCode.py
rename to AirSeaFluxCode/src/AirSeaFluxCode.py
diff --git a/Code/AirSeaFluxCode_dev.py b/AirSeaFluxCode/src/AirSeaFluxCode_dev.py
similarity index 100%
rename from Code/AirSeaFluxCode_dev.py
rename to AirSeaFluxCode/src/AirSeaFluxCode_dev.py
diff --git a/AirSeaFluxCode/src/__init__.py b/AirSeaFluxCode/src/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..c8f10649946fda329ad70975b0c82629bfcb5859
--- /dev/null
+++ b/AirSeaFluxCode/src/__init__.py
@@ -0,0 +1,3 @@
+def main():
+    """Entry point for the application script"""
+    print("Call your main application code here")
diff --git a/Code/cs_wl_subs.py b/AirSeaFluxCode/src/cs_wl_subs.py
similarity index 100%
rename from Code/cs_wl_subs.py
rename to AirSeaFluxCode/src/cs_wl_subs.py
diff --git a/Code/flux_subs.py b/AirSeaFluxCode/src/flux_subs.py
similarity index 100%
rename from Code/flux_subs.py
rename to AirSeaFluxCode/src/flux_subs.py
diff --git a/Code/hum_subs.py b/AirSeaFluxCode/src/hum_subs.py
similarity index 100%
rename from Code/hum_subs.py
rename to AirSeaFluxCode/src/hum_subs.py
diff --git a/Code/util_subs.py b/AirSeaFluxCode/src/util_subs.py
similarity index 100%
rename from Code/util_subs.py
rename to AirSeaFluxCode/src/util_subs.py
diff --git a/Code/AirSeaFluxCode_test.py b/Code/AirSeaFluxCode_test.py
deleted file mode 100644
index 52ec5e512b2e880fcc953145d82ff2b64330ef4a..0000000000000000000000000000000000000000
--- a/Code/AirSeaFluxCode_test.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import importlib
-import sys
-sys.path.insert(1, '/Users/ricorne/projects/orchestra/Code')
-import   AirSeaFluxCode
-importlib.reload(AirSeaFluxCode)
-from AirSeaFluxCode import *
-import pickle
-
-inDt = pd.read_csv("~/projects/orchestra/Test_Data/data_all.csv")
-date = np.asarray(inDt["Date"])
-lon = np.asarray(inDt["Longitude"])
-lat = np.asarray(inDt["Latitude"])
-spd = np.asarray(inDt["Wind speed"])
-t = np.asarray(inDt["Air temperature"])
-sst = np.asarray(inDt["SST"])
-rh = np.asarray(inDt["RH"])
-p = np.asarray(inDt["P"])
-sw = np.asarray(inDt["Rs"])
-hu = np.asarray(inDt["zu"])
-ht = np.asarray(inDt["zt"])
-hin = np.array([hu, ht, ht])
-Rs = np.asarray(inDt["Rs"])
-
-del hu, ht, inDt
-# run AirSeaFluxCode
-res1 = AirSeaFluxCode(spd, t, sst, lat=lat, hin=hin, P=p, maxiter=10,hum=None,cskin=0,wl=0,
-                      tol=['all', 0.01, 0.01, 1e-05, 1e-3, 0.1, 0.1], L="Rb",meth="S80",gust=None)
-
-# old version
-pickle_off = open ("/Users/ricorne/projects/AirSeaFluxCode_master/orchestra/old_code.txt", "rb")
-res = pickle.load(pickle_off)
-
-for i in res1.columns:
-    try:
-        a=res1[i].round(4)
-        b=res[i].round(4)
-        print(a.equals(b))
-    except:
-        print(res1[i].equals(res[i]))
diff --git a/Code/Documentation.pdf b/Documentation.pdf
similarity index 100%
rename from Code/Documentation.pdf
rename to Documentation.pdf
diff --git a/Code/toy_ASFC.py b/toy_ASFC.py
similarity index 100%
rename from Code/toy_ASFC.py
rename to toy_ASFC.py