diff --git a/.gitignore b/.gitignore
index a50a9e35add69243704432e9171d98e3f37cd3cc..75b0202aa47f180e3b5bbae6964201a9a3a046b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,8 @@ tests/__pycache__
 tests/OutFiles
 *.pyc
 *.so
+*.whl
+*.gz
 
 .eggs/
 build-setuptools/
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 569a6198135032baf0d287a80999aa3a7ad884f8..1a147528170cded574234278d2845374c21fbf3b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,8 @@
-cmake_minimum_required(VERSION 3.1.0)
+cmake_minimum_required(VERSION 3.3.0)
 
-project(openmesh)
+project(openmesh          
+        VERSION 1.2.1
+        LANGUAGES CXX )
 
 set(CMAKE_CXX_STANDARD 11)
 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
@@ -16,10 +18,23 @@ if (NOT WIN32)
 	)
 endif ()
 
-vci_append_files(HEADERS "src/*.hh" .)
-vci_append_files(SOURCES "src/*.cc" .)
+set( HEADERS
+src/Circulator.hh
+src/Decimater.hh
+src/InputOutput.hh
+src/Iterator.hh
+src/Mesh.hh
+src/MeshTypes.hh
+src/Miscellaneous.hh
+src/Utilities.hh
+)
+
+set( SOURCES
+src/Bindings.cc
+src/InputOutput.cc
+src/Miscellaneous.cc
+)
 
-include_directories(${OPENMESH_INCLUDE_DIRS})
 pybind11_add_module(openmesh ${HEADERS} ${SOURCES})
 
 if (WIN32)
diff --git a/README.md b/README.md
index 326bf4806a9de3e68b7f32a15028fd9b8bd0681f..8e672558e70640fa723eb0bd0172566e259a319a 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-# OpenMesh Python Bindings (1.1.6)
+# OpenMesh Python Bindings (1.2.1)
 
-[![](https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python/badges/master/pipeline.svg)](https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python/commits/master)
+[![](https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/openmesh-python/badges/master/pipeline.svg)](https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/openmesh-python/commits/master)
 
 OpenMesh is a versatile halfedge-based data structure for representing and manipulating polygon meshes.
 The OpenMesh Python bindings are are tightly integrated with [numpy](http://www.numpy.org/) and are implemented using [pybind11](https://github.com/pybind/pybind11). 
@@ -49,7 +49,7 @@ point_array += np.array([1, 0, 0])
 om.write_mesh('test.off', mesh)
 mesh_2 = om.read_trimesh('test.off')
 ```
-For further examples see the documentation or refer to the [unit tests](https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python/tree/master/tests).
+For further examples see the documentation or refer to the [unit tests](https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/openmesh-python/tree/master/tests).
 
 ## Installation
 
diff --git a/deploy.sh b/deploy.sh
index 5cde6693558592f292e5b0ed115506088c7680cc..ab37f08707e77085698efe36b9a857116e2f1654 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -7,9 +7,9 @@
 
 revision=${1:-master}
 
-for name in "deploy-sdist" "deploy-2.7-macos" "deploy-3.5-macos" "deploy-2.7-linux" "deploy-3.5-linux" "deploy-3.7-VS2017"
+for name in "deploy-sdist" "deploy-3.9-macos-m1" "deploy-3.9-macos" "deploy-3.9-linux" "deploy-3.9-VS2017"
 do
-  wget "https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python/-/jobs/artifacts/$revision/download?job=$name" -O "$name.zip"
+  wget "https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/openmesh-python/-/jobs/artifacts/$revision/download?job=$name" -O "$name.zip"
   unzip "$name.zip"
   rm -f "$name.zip"
 done
diff --git a/docs/install.rst b/docs/install.rst
index 90cae566241f8e746540b5af9de7dd7f9e853bb3..2535f073e11c3a263bcd353fc5e41632caa181e2 100644
--- a/docs/install.rst
+++ b/docs/install.rst
@@ -14,17 +14,16 @@ We provide prebuilt wheels for manual installation with `pip` for the following
 
 Linux
 ^^^^^
-* `Python 2.7 <https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python/-/jobs/artifacts/master/browse/release?job=deploy-2.7-linux>`_
-* `Python 3.5 <https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python/-/jobs/artifacts/master/browse/release?job=deploy-3.5-linux>`_
+* `Python 3.9 <https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/openmesh-python/-/jobs/artifacts/master/browse/release?job=deploy-3.9-linux>`_
 
-macOS 10.13
+macOS
 ^^^^^^^^^^^
-* `Python 2.7 <https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python/-/jobs/artifacts/master/browse/release?job=deploy-2.7-macos>`_
-* `Python 3.5 <https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python/-/jobs/artifacts/master/browse/release?job=deploy-3.5-macos>`_
+* `Python 3.9 X86 <https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/openmesh-python/-/jobs/artifacts/master/browse/release?job=deploy-3.9-macos>`_
+* `Python 3.9 ARM64 (M1) <https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/openmesh-python/-/jobs/artifacts/master/browse/release?job=deploy-3.9-macos-m1>`_
 
 Windows
 ^^^^^^^
-* `Python 3.6 <https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python/-/jobs/artifacts/master/browse/release?job=deploy-3.6-VS2017>`_
+* `Python 3.9 <https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/openmesh-python/-/jobs/artifacts/master/browse/release?job=deploy-3.9-VS2017>`_
 
 Building from source
 ^^^^^^^^^^^^^^^^^^^^
diff --git a/setup.py b/setup.py
index c916177bfa9760d92a9fc345466541fd87ce6a73..d003c1aeb2dd190b0aaefdaac3c3e0a691f0fcc5 100644
--- a/setup.py
+++ b/setup.py
@@ -29,8 +29,8 @@ class CMakeBuild(build_ext):
 
         if platform.system() == "Windows":
             cmake_version = LooseVersion(re.search(r'version\s*([\d.]+)', out.decode()).group(1))
-            if cmake_version < '3.1.0':
-                raise RuntimeError("CMake >= 3.1.0 is required on Windows")
+            if cmake_version < '3.3.0':
+                raise RuntimeError("CMake >= 3.3.0 is required on Windows")
 
         for ext in self.extensions:
             self.build_extension(ext)
@@ -81,7 +81,7 @@ class CMakeBuild(build_ext):
 
 setup(
     name='openmesh',
-    version="1.1.6",
+    version="1.2.1",
     author='Alexander Dielen, Isaak Lim, Janis Born',
     author_email='vci-pypi@cs.rwth-aachen.de',
     description='a versatile halfedge-based data structure for representing and manipulating polygon meshes',
@@ -94,17 +94,14 @@ setup(
     install_requires=['numpy'],
     options={'build': {'build_base': 'build-setuptools'}},
     license='BSD 3-Clause',
-    url='https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python',
+    url='https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/openmesh-python',
     classifiers=[
         'Development Status :: 4 - Beta',
-        'Programming Language :: Python :: 2.7',
-        'Programming Language :: Python :: 3.5',
-        'Programming Language :: Python :: 3.6',
         'Programming Language :: Python :: 3.9',
         'Topic :: Multimedia :: Graphics',
     ],
     project_urls={
-        'Source':'https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python',
-        'Tracker':'https://www.graphics.rwth-aachen.de:9000/OpenMesh/openmesh-python/issues',
+        'Source':'https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/openmesh-python',
+        'Tracker':'https://gitlab.vci.rwth-aachen.de:9000/OpenMesh/openmesh-python/issues',
     }
 )