Repository: ionos-enterprise/ionos-enterprise-sdk-python (language: python)

Issue:
Update live_test.py



Discussion / hints:

Fix patch:
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..59fd73b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,54 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: bug
+assignees: LiviusP
+
+---
+
+## Descripton
+<!-- A clear and concise description of what the bug is. -->
+
+## Expected behavior
+<!-- A clear and concise description of what you expected to happen. -->
+
+## Environment
+<!-- coud be ansible, python etc.  version, depends on concrete sdk/tool -->
+hello version: <!-- run `hello --version` and paste the output between the ```marks. -->
+```
+```
+world version: <!-- run `grep version /etc/world.cfg` and paste the output between the ```marks. -->
+```
+```
+OS: <!-- use whatever fits and put it between the ```marks. -->
+```
+```
+
+## Configuration Files
+<!-- could also be environment settings, e.g. LANG=de_DE -->
+
+## How to Reproduce
+<!--
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Execute `acme --emca template.xml`
+3. ...
+Might be omitted if there are no choices, eg. the single command is already in the description
+-->
+
+## Error and Debug Output
+<!--
+Add anything, that could help here.
+You can increase the debug level by .. ' hello --whatsover=example`
+-->
+
+## Additional Notes
+<!--
+Add any other content about the problem here.
+-->
+
+## References
+<!--
+Add any other related issues or other links that you think are important for fixing the bug.
+-->
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..75e05fe
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+  - name: IONOS Cloud API
+    url: https://devops.ionos.com/api/
+    about: View API documentation
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..9029ee0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,51 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: enhancement
+assignees: LiviusP
+
+---
+
+### Current SDK Version
+<!---
+If you're not using the latest version, please check to see if something related to your request has already been implemented in a later version.
+-->
+
+```
+...
+```
+
+### Use-cases
+<!---
+In order to properly evaluate a feature request, it is necessary to understand the use-cases for it.
+
+Please describe below the end goal you are trying to achieve that has led you to request this feature.
+
+Please keep this section focused on the problem and not on the suggested solution. We'll get to that in a moment, below!
+-->
+
+### Attempted Solutions
+<!---
+If you've already tried to solve the problem within SDKs existing features and found a limitation that prevented you from succeeding, please describe it below in as much detail as possible.
+
+Ideally, this would include real code snippets that you tried and what results you got in each case.
+
+Please remove any sensitive information such as passwords before sharing configuration snippets and command lines.
+--->
+
+### Proposal
+<!---
+If you have an idea for a way to address the problem, please describe it below.
+
+In this section, it's helpful to include specific examples of how what you are suggesting might look in configuration files, or on the command line, since that allows us to understand the full picture of what you are proposing.
+
+-->
+
+### References
+<!--
+Are there any other GitHub issues, whether open or closed, that are related to the problem you've described above or to the suggested solution? If so, please create a list below that mentions each of them. For example:
+
+- #6017
+
+-->
diff --git a/README.md b/README.md
index 6f20481..32e8f3e 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 
 # Python SDK
 
-Version: ionosenterprise-sdk-python **5.4.0**
+Version: ionosenterprise-sdk-python **5.5.0**
 
 ## Table of Contents
 
@@ -2379,6 +2379,7 @@ The following table describes the request arguments:
 | annotations | no | dict | Map of annotations attached to node pool |
 | public_ips | no | list | List of IP addresses to be used by nodes |
 
+
 Method signature:
 
 ```python
@@ -2492,7 +2493,7 @@ Method signature:
 ```python
 def update_k8s_cluster_nodepool(self,
                                     k8s_cluster_id, nodepool_id, node_count,
-                                    maintenance_window=None, auto_scaling=None):
+                                    maintenance_window=None, auto_scaling=None, lan_ids=None):
 ```
 
 Update a nodepool:
diff --git a/coreadaptor/AuthAdaptor.py b/coreadaptor/AuthAdaptor.py
new file mode 100644
index 0000000..94a5d76
--- /dev/null
+++ b/coreadaptor/AuthAdaptor.py
@@ -0,0 +1,12 @@
+import ionoscloud
+
+class AuthAdaptor:
+    def __init__(self, username, password):
+        self.username = username
+        self.password = password
+
+    def get_api_client(self):
+        return ionoscloud.ApiClient(ionoscloud.Configuration(
+            username = self.username,
+            password = self.password
+        ))
\ No newline at end of file
diff --git a/coreadaptor/IonosCoreProxy.py b/coreadaptor/IonosCoreProxy.py
new file mode 100644
index 0000000..e56f86c
--- /dev/null
+++ b/coreadaptor/IonosCoreProxy.py
@@ -0,0 +1,153 @@
+from ionoscloud.exceptions import ApiException, ApiTimeout, ApiFailedRequest
+from ionosenterprise.errors import (
+    ICNotAuthorizedError,
+    ICNotFoundError,
+    ICValidationError,
+    ICRateLimitExceededError,
+    ICError,
+    ICFailedRequest,
+    ICTimeoutError
+)
+import json
+import functools
+import re
+import inspect
+
+class IonosCoreProxy:
+
+    custom_methods = {
+        'start_server': 'POST-ACTION',
+        'stop_server': 'POST-ACTION',
+        'reboot_server': 'POST-ACTION',
+        'restore_snapshot': 'POST-ACTION',
+        'create_snapshot': 'POST-ACTION-JSON'
+    }
+
+    @staticmethod
+    def get_default_args(func):
+        signature = inspect.signature(func)
+        return {
+            k: v.default
+            for k, v in signature.parameters.items()
+            if v.default is not inspect.Parameter.empty
+        }
+
+    @staticmethod
+    def _request_id(headers):
+        # The request URL has currently the format:
+        # {host_base}/requests/{request ID}/status
+        # Thus search for a UUID.
+        match = re.search('/requests/([-A-Fa-f0-9]+)/', headers['location'])
+        if match:
+            return match.group(1)
+        else:
+            raise Exception("Failed to extract request ID from response "
+                            "header 'location': '{location}'".format(location=headers['location']))
+
+    @staticmethod
+    def process_response(f):
+        @functools.wraps(f)
+        def func(*args, **kwargs):
+            try:
+                response = f(*args, **kwargs)
+                return IonosCoreProxy.handle_response_operations(f, response)
+            except Exception as e:
+                raise IonosCoreProxy.cast_exception(e)
+        return func
+
+    @staticmethod
+    def cast_exceptions(f):
+        @functools.wraps(f)
+        def func(*args, **kwargs):
+            try:
+                return f(*args, **kwargs)
+            except Exception as e:
+                if type(e) == ApiException:
+                    code = e.status
+                    msg = json.loads(e.body)
+                    url = e.url
+                    if code == 401:
+                        raise ICNotAuthorizedError(code, msg, url)
+                    elif code == 404:
+                        raise ICNotFoundError(code, msg, url)
+                    elif code == 422:
+                        raise ICValidationError(code, msg, url)
+                    elif code == 429:
+                        raise ICRateLimitExceededError(code, msg, url)
+                    else:
+                        raise ICError(code, msg, url)
+                elif type(e) == ApiTimeout:
+                    raise ICTimeoutError(e.message, e.request_id)
+                elif type(e) == ApiFailedRequest:
+                    raise ICFailedRequest(e.message, e.request_id)
+                raise e
+        return func
+
+    @staticmethod
+    def _underscore_to_camelcase(f):
+        def underscore_to_camelcase(value):
+            def camelcase():
+                yield str.lower
+                while True:
+                    yield str.capitalize
+            c = camelcase()
+            return "".join(next(c)(x) if x else '_' for x in value.split("_"))
+        def myprint(d):
+            for k in list(d):
+                v = d[k]
+                del d[k]
+                d[underscore_to_camelcase(k)] = v
+                if isinstance(v, dict):
+                    myprint(v)
+
+
+        @functools.wraps(f)
+        def func(*args, **kwargs):
+            x = f(*args, **kwargs)
+            myprint(x)
+            return x
+        return func
+
+    @staticmethod
+    def handle_response_operations(func, response):
+        return_data = response[0]
+        status_code = response[1]
+        response_headers = response[2]
+
+        if func.__name__ in IonosCoreProxy.custom_methods and IonosCoreProxy.custom_methods[func.__name__] in ['POST-ACTION-JSON', 'POST-ACTION']:
+            if status_code == 202 and func.__name__ in IonosCoreProxy.custom_methods and IonosCoreProxy.custom_methods[func.__name__] == 'POST-ACTION':
+                return True
+
+        if 'location' in response_headers:
+            if return_data == '':
+                return_data = {}
+            elif type(return_data) != dict:
+                return_data = return_data.to_dict()
+            return_data['requestId'] = IonosCoreProxy._request_id(response_headers)
+
+        return return_data
+
+
+
+    @staticmethod
+    def cast_exception(e):
+        if type(e).__name__ == ApiException.__name__:
+
+            code = e.status
+            msg = json.loads(e.body)
+            url = e.url
+
+            if 'messages' in msg:
+                msg = msg['messages']
+
+            if code == 401:
+                raise ICNotAuthorizedError(code, msg, url)
+            if code == 404:
+                raise ICNotFoundError(code, msg, url)
+            if code == 422:
+                raise ICValidationError(code, msg, url)
+            if code == 429:
+                raise ICRateLimitExceededError(code, msg, url)
+            else:
+                raise ICError(code, msg, url)
+        raise e
\ No newline at end of file
diff --git a/coreadaptor/__init__.py b/coreadaptor/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/examples/k8s.py b/examples/k8s.py
index a1dda83..bb8b85b 100644
--- a/examples/k8s.py
+++ b/examples/k8s.py
@@ -77,7 +77,7 @@
 
 print('Waiting for the datacenter to be active!')
 datacenters = client.wait_for(
-  fn_request=lambda: client.list_datacenters(),
+  fn_request=client.list_datacenters(),
   fn_check=lambda r: list(filter(
       lambda e: e['properties']['name'] == datacenter_name,
       r['items']
@@ -97,7 +97,7 @@
 
 print('Waiting for the cluster to be active!')
 clusters = client.wait_for(
-  fn_request=lambda: client.list_k8s_clusters(),
+  fn_request=client.list_k8s_clusters(),
   fn_check=lambda r: list(filter(
       lambda e: e['properties']['name'] == cluster_name,
       r['items']
@@ -162,7 +162,7 @@
 
 print('Waiting for the cluster to be deleted!')
 clusters = client.wait_for(
-  fn_request=lambda: client.list_k8s_clusters(),
+  fn_request=client.list_k8s_clusters(),
   fn_check=lambda r: len(list(filter(
       lambda e: e['properties']['name'] == cluster_name,
       r['items']
@@ -178,7 +178,7 @@
 
 print('Waiting for the datacenter to be deleted!')
 clusters = client.wait_for(
-  fn_request=lambda: client.list_datacenters(),
+  fn_request=client.list_datacenters(),
   fn_check=lambda r: len(list(filter(
       lambda e: e['properties']['name'] == datacenter_name,
       r['items']
diff --git a/ionosenterprise/__init__.py b/ionosenterprise/__init__.py
index a55d3dd..e6bff0e 100644
--- a/ionosenterprise/__init__.py
+++ b/ionosenterprise/__init__.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 """Ionos Enterprise API Client Library for Python"""
-__version__ = '5.4.0'
+__version__ = '5.5.0'
 
 API_HOST = 'https://api.ionos.com/cloudapi/v5'
 API_VERSION = '5.0'
diff --git a/ionosenterprise/client.py b/ionosenterprise/client.py
index a0ed8d3..4ff93f6 100644
--- a/ionosenterprise/client.py
+++ b/ionosenterprise/client.py
@@ -15,11 +15,11 @@
 import getpass
 import logging
 import os
-import sys
 import re
-import time
 import requests
 import six
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 try:
     import configparser
@@ -41,9 +41,7 @@
     ICNotFoundError,
     ICValidationError,
     ICRateLimitExceededError,
-    ICError,
-    ICFailedRequest,
-    ICTimeoutError,
+    ICError
 )
 
 from .utils import ask
@@ -91,7 +89,9 @@ def _read_config(self, filename=None):
             except ImportError:
                 raise Exception("Missing dependency for determining config path. Please install "
                                 "the 'appdirs' Python module.")
-            self._config_filename = appdirs.user_config_dir(_LIBRARY_NAME, "IonosEnterprise") + ".ini"
+            self._config_filename = appdirs.user_config_dir(
+                _LIBRARY_NAME,
+                "IonosEnterprise") + ".ini"
         if not self._config:
             self._config = configparser.ConfigParser()
             self._config.optionxform = str
@@ -203,8 +203,10 @@ def _get_password(self, password, use_config=True, config_filename=None,
 
         return password
 
+    @staticmethod
+    @IonosCoreProxy.cast_exceptions
     def wait_for(
-        self, fn_check, fn_request, timeout=3600, initial_wait=5,
+        fn_check, fn_request, timeout=3600, initial_wait=5,
         scaleup=10, console_print=None
     ):
         """
@@ -226,40 +228,15 @@ def wait_for(
         :type       scaleup: ``int``
 
         """
-        logger = logging.getLogger(__name__)
-        wait_period = initial_wait
-        next_increase = time.time() + wait_period * scaleup
-        if timeout:
-            timeout = time.time() + timeout
-        while True:
-            if console_print is not None:
-                sys.stdout.write(console_print)
-                sys.stdout.flush()
-
-            resp = fn_request()
-            check_response = fn_check(resp)
-
-            if check_response:
-                break
-
-            current_time = time.time()
-            if timeout and current_time > timeout:
-                raise ICTimeoutError('Timed out waiting for request {0}.'.format(
-                    resp['requestId']), resp['requestId'])
-
-            if current_time > next_increase:
-                wait_period *= 2
-                next_increase = time.time() + wait_period * scaleup
-                scaleup *= 2
-
-            logger.info("Sleeping for %i seconds...", wait_period)
-            time.sleep(wait_period)
-
-        if console_print is not None:
-            print('')
-
-        return resp
-
+        ionoscloud.api_client.ApiClient.wait_for(
+            fn_check,
+            fn_request,
+            timeout,
+            initial_wait,
+            scaleup,
+            console_print)
+
+    @IonosCoreProxy.cast_exceptions
     def wait_for_completion(self, response, timeout=3600, initial_wait=5, scaleup=10):
         """
         Poll resource request status until resource is provisioned.
@@ -277,38 +254,9 @@ def wait_for_completion(self, response, timeout=3600, initial_wait=5, scaleup=10
         :type       scaleup: ``int``
 
         """
-        if not response:
-            return
-        logger = logging.getLogger(__name__)
-        wait_period = initial_wait
-        next_increase = time.time() + wait_period * scaleup
-        if timeout:
-            timeout = time.time() + timeout
-        while True:
-            request = self.get_request(request_id=response['requestId'], status=True)
-
-            if request['metadata']['status'] == 'DONE':
-                break
-            elif request['metadata']['status'] == 'FAILED':
-                raise ICFailedRequest(
-                    'Request {0} failed to complete: {1}'.format(
-                        response['requestId'], request['metadata']['message']),
-                    response['requestId']
-                )
-
-            current_time = time.time()
-            if timeout and current_time > timeout:
-                raise ICTimeoutError('Timed out waiting for request {0}.'.format(
-                    response['requestId']), response['requestId'])
-
-            if current_time > next_increase:
-                wait_period *= 2
-                next_increase = time.time() + wait_period * scaleup
-                scaleup *= 2
-
-            logger.info("Request %s is in state '%s'. Sleeping for %i seconds...",
-                        response['requestId'], request['metadata']['status'], wait_period)
-            time.sleep(wait_period)
+        if 'requestId' in response:
+            self.get_api_client()\
+                .wait_for_completion(response['requestId'], timeout, initial_wait, scaleup)
 
     def _wrapped_request(self, method, url,
                          params=None,
@@ -337,11 +285,11 @@ def _perform_request(self, url, method='GET', data=None, headers=None):
 
         url = self._build_url(url)
         headers.update({'User-Agent': self.user_agent})
-        if method == 'POST' or method == 'PUT':
+        if method in ['POST', 'PUT']:
             response = self._wrapped_request(method, url, auth=auth, data=data,
                                              headers=headers)
             headers.update({'Content-Type': 'application/json'})
-        elif method == 'POST-ACTION-JSON' or method == 'POST-ACTION':
+        elif method in ['POST-ACTION-JSON', 'POST-ACTION']:
             headers.update({'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'})
             response = self._wrapped_request('POST', url, auth=auth, data=data,
                                              headers=headers)
@@ -371,8 +319,7 @@ def _perform_request(self, url, method='GET', data=None, headers=None):
                     raise ICValidationError(code, msg, url)
                 if response.status_code == 429:
                     raise ICRateLimitExceededError(code, msg, url)
-                else:
-                    raise ICError(code, msg, url)
+                raise ICError(code, msg, url)
 
         except ValueError:
             raise Exception('Failed to parse the response', response.text)
@@ -397,9 +344,9 @@ def _request_id(headers):
         match = re.search('/requests/([-A-Fa-f0-9]+)/', headers['location'])
         if match:
             return match.group(1)
-        else:
-            raise Exception("Failed to extract request ID from response "
-                            "header 'location': '{location}'".format(location=headers['location']))
+
+        raise Exception("Failed to extract request ID from response "
+                        "header 'location': '{location}'".format(location=headers['location']))
 
     def _build_url(self, uri):
         url = self.host_base + uri
@@ -418,12 +365,12 @@ def _b(s, encoding='utf-8'):
                 return s
             elif isinstance(s, unicode):  # noqa, pylint: disable=undefined-variable
                 return s.encode(encoding)
-        else:
-            # And this is Python3
-            if isinstance(s, bytes):
-                return s
-            elif isinstance(s, str):
-                return s.encode(encoding)
+
+        # And this is Python3
+        if isinstance(s, bytes):
+            return s
+        elif isinstance(s, str):
+            return s.encode(encoding)
 
         raise TypeError("Invalid argument %r for _b()" % (s,))
 
diff --git a/ionosenterprise/items/backupunit.py b/ionosenterprise/items/backupunit.py
index 6e64dac..602ca05 100644
--- a/ionosenterprise/items/backupunit.py
+++ b/ionosenterprise/items/backupunit.py
@@ -9,7 +9,8 @@ def __init__(self, name, password=None, email=None):
         :param      password: The password associated to that resource.
         :type       password: ``str``
 
-        :param      email: The email associated with the backup unit. Bear in mind that this email does not be the same email as of the user.
+        :param      email: The email associated with the backup unit.
+                    Bear in mind that this email does not be the same email as of the user.
         :type       email: ``str``
 
         """
diff --git a/ionosenterprise/items/datacenter.py b/ionosenterprise/items/datacenter.py
index 5aaa850..9ee8f35 100644
--- a/ionosenterprise/items/datacenter.py
+++ b/ionosenterprise/items/datacenter.py
@@ -1,7 +1,6 @@
 class Datacenter(object):
     def __init__(self, name=None, location=None,  # pylint: disable=unused-argument
-                 description=None, volumes=None, servers=None, lans=None, loadbalancers=None,
-                 **kwargs):
+                 description=None, volumes=None, servers=None, lans=None, loadbalancers=None):
         """
         The Datacenter class initializer.
 
diff --git a/ionosenterprise/items/firewall.py b/ionosenterprise/items/firewall.py
index 711a91e..6c56713 100644
--- a/ionosenterprise/items/firewall.py
+++ b/ionosenterprise/items/firewall.py
@@ -3,7 +3,7 @@ def __init__(self, name=None, protocol=None,  # pylint: disable=unused-argument
                  source_mac=None, source_ip=None,
                  target_ip=None, port_range_start=None,
                  port_range_end=None, icmp_type=None,
-                 icmp_code=None, **kwargs):
+                 icmp_code=None):
         """
         FirewallRule class initializer.
 
diff --git a/ionosenterprise/items/lan.py b/ionosenterprise/items/lan.py
index cba1e12..e2a7fbe 100644
--- a/ionosenterprise/items/lan.py
+++ b/ionosenterprise/items/lan.py
@@ -16,7 +16,8 @@ def __init__(self, name=None, public=None, nics=None, pcc_id=None):
         :param      nics: A list of NICs
         :type       nics: ``list``
 
-        :param      pcc_id: Unique identifier of the private cross connect the given LAN is connected to if any
+        :param      pcc_id: Unique identifier of the private cross connect the given
+                    LAN is connected to if any
         :type       pcc_id: ``str``
 
         """
diff --git a/ionosenterprise/items/loadbalancer.py b/ionosenterprise/items/loadbalancer.py
index 6b60c40..ab22c32 100644
--- a/ionosenterprise/items/loadbalancer.py
+++ b/ionosenterprise/items/loadbalancer.py
@@ -4,7 +4,7 @@ class LoadBalancer(object):
     """
 
     def __init__(self, name=None, ip=None,  # pylint: disable=unused-argument
-                 dhcp=None, balancednics=None, **kwargs):
+                 dhcp=None, balancednics=None):
         """
         LoadBalancer class initializer.
 
diff --git a/ionosenterprise/items/nic.py b/ionosenterprise/items/nic.py
index 7846595..402246d 100644
--- a/ionosenterprise/items/nic.py
+++ b/ionosenterprise/items/nic.py
@@ -1,7 +1,7 @@
 class NIC(object):
     def __init__(self, name=None, ips=None,  # pylint: disable=unused-argument
                  dhcp=None, lan=None, firewall_active=None,
-                 firewall_rules=None, nat=None, **kwargs):
+                 firewall_rules=None, nat=None):
         """
         NIC class initializer.
 
diff --git a/ionosenterprise/items/snapshot.py b/ionosenterprise/items/snapshot.py
index b7e8846..6bdadb2 100644
--- a/ionosenterprise/items/snapshot.py
+++ b/ionosenterprise/items/snapshot.py
@@ -1,6 +1,6 @@
 class Snapshot(object):
     def __init__(self, name=None, description=None,  # pylint: disable=unused-argument
-                 licence_type='UNKNOWN', size=None, location=None, **kwargs):
+                 licence_type='UNKNOWN', size=None, location=None):
         """
         Snapshot class initializer.
 
diff --git a/ionosenterprise/items/volume.py b/ionosenterprise/items/volume.py
index 5836013..03a6cfe 100644
--- a/ionosenterprise/items/volume.py
+++ b/ionosenterprise/items/volume.py
@@ -1,8 +1,8 @@
 class Volume(object):
     def __init__(self, name=None, size=None, bus='VIRTIO',  # pylint: disable=unused-argument
                  image=None, image_alias=None, disk_type='HDD', licence_type='UNKNOWN',
-                 image_password=None, ssh_keys=None, availability_zone='AUTO',
-                 **kwargs):
+                 image_password=None, ssh_keys=None, availability_zone='AUTO'):
+
         """
         Volume class initializer.
 
diff --git a/ionosenterprise/requests/__init__.py b/ionosenterprise/requests/__init__.py
index 7552906..e1924ff 100644
--- a/ionosenterprise/requests/__init__.py
+++ b/ionosenterprise/requests/__init__.py
@@ -1,3 +1,5 @@
+from coreadaptor.AuthAdaptor import AuthAdaptor
+from ionosenterprise import __version__
 from .dicts import dicts
 from .datacenter import datacenter
 from .server import server
@@ -27,7 +29,6 @@
 
 class IonosEnterpriseRequests(
     dicts,
-
     datacenter,
     server,
     cdrom,
@@ -53,7 +54,13 @@ class IonosEnterpriseRequests(
     backupunit,
     s3key
 ):
-    pass
+    def get_api_client(self):
+        auth_adaptor = AuthAdaptor(self.username, self.password).get_api_client()
+        auth_adaptor.user_agent = "ionos-cloud-sdk-python-compat/%s" % __version__
+        return auth_adaptor
+
+    def get_api_instance(self, apiClass):
+        return apiClass(self.get_api_client())
 
 
 __all__ = ['IonosEnterpriseRequests']
diff --git a/ionosenterprise/requests/backupunit.py b/ionosenterprise/requests/backupunit.py
index f5d2291..a2a774d 100644
--- a/ionosenterprise/requests/backupunit.py
+++ b/ionosenterprise/requests/backupunit.py
@@ -1,7 +1,14 @@
-import json
+import ionoscloud
+
+from ionoscloud.models.backup_unit import BackupUnit
+from ionoscloud.models.backup_unit_properties import BackupUnitProperties
+
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
+
 
 class backupunit:
 
+    @IonosCoreProxy.process_response
     def list_backupunits(self, depth=1):
         """
         You can retrieve a complete list of backup Units that you have access to.
@@ -10,28 +17,26 @@ def list_backupunits(self, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request('/backupunits?depth=' + str(depth))
-
-        return response
+        return self.get_api_instance(ionoscloud.BackupUnitApi)\
+            .backupunits_get_with_http_info(depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def create_backupunit(self, backupunit):
         """
-        Create a Backup Unit. A Backup Unit is considered a resource like a virtual datacenter, IP Block, snapshot, etc.
+        Create a Backup Unit. A Backup Unit is considered a resource like a virtual
+        datacenter, IP Block, snapshot, etc.
         It shall be shareable via groups inside our User Management Feature
 
         :param      backupunit: The backupunit object.
         :type       backupunit: ``dict``
 
         """
-        data = json.dumps(self._create_backupunit_dict(backupunit))
-
-        response = self._perform_request(
-            url='/backupunits',
-            method='POST',
-            data=data)
+        data = self._create_backupunit_dict(backupunit)
 
-        return response
+        return self.get_api_instance(ionoscloud.BackupUnitApi)\
+            .backupunits_post_with_http_info(BackupUnit(**data), response_type='object')
 
+    @IonosCoreProxy.process_response
     def get_backupunit(self, backupunit_id, depth=1):
         """
         Retrieve the details of an specific backup unit.
@@ -43,12 +48,12 @@ def get_backupunit(self, backupunit_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/backupunits/%s?depth=%s' % (backupunit_id, str(depth))
-        )
-
-        return response
+        return self.get_api_instance(ionoscloud.BackupUnitApi)\
+            .backupunits_find_by_id_with_http_info(backupunit_id,
+                                                   depth=depth,
+                                                   response_type='object')
 
+    @IonosCoreProxy.process_response
     def update_backupunit(self, backupunit_id, **kwargs):
         """
         Partially modify a Backup Unit
@@ -65,15 +70,14 @@ def update_backupunit(self, backupunit_id, **kwargs):
         for attr, value in kwargs.items():
             data[attr] = value
 
-        request_data = json.dumps(data)
-
-        response = self._perform_request(
-            url='/backupunits/%s' % backupunit_id,
-            method='PATCH',
-            data=request_data)
+        backupUnitProperties = BackupUnitProperties(**data)
 
-        return response
+        return self.get_api_instance(ionoscloud.BackupUnitApi)\
+            .backupunits_patch_with_http_info(
+                backupunit_id, backupUnitProperties, response_type='object'
+            )
 
+    @IonosCoreProxy.process_response
     def update_backupunit_put(self, backupunit_id, **kwargs):
         """
         Modify a Backup Unit.
@@ -90,17 +94,14 @@ def update_backupunit_put(self, backupunit_id, **kwargs):
         for attr, value in kwargs.items():
             data[attr] = value
 
-        request_data = json.dumps(
-            {'properties': data}
-        )
+        backupUnitProperties = BackupUnit(properties=BackupUnitProperties(**data))
 
-        response = self._perform_request(
-            url='/backupunits/%s' % backupunit_id,
-            method='PUT',
-            data=request_data)
-
-        return response
+        return self.get_api_instance(ionoscloud.BackupUnitApi)\
+            .backupunits_put_with_http_info(backupunit_id,
+                                            backupUnitProperties,
+                                            response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_backupunit(self, backupunit_id):
         """
         Delete a Backup Unit.
@@ -110,13 +111,11 @@ def delete_backupunit(self, backupunit_id):
 
         """
 
-        response = self._perform_request(
-            url='/backupunits/%s' % backupunit_id,
-            method='DELETE')
-
-        return response
+        return self.get_api_instance(ionoscloud.BackupUnitApi)\
+            .backupunits_delete_with_http_info(backupunit_id)
 
-    def get_ssourl(self, backupunit_id, depth=1):
+    @IonosCoreProxy.process_response
+    def get_ssourl(self, backupunit_id):
         """
         Returns a single signon URL for the specified backup Unit.
 
@@ -127,8 +126,6 @@ def get_ssourl(self, backupunit_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/backupunits/%s/ssourl?depth=%s' % (backupunit_id, str(depth))
-        )
 
-        return response
\ No newline at end of file
+        return self.get_api_instance(ionoscloud.BackupUnitApi)\
+            .backupunits_ssourl_get_with_http_info(backupunit_id, response_type='object')
diff --git a/ionosenterprise/requests/cdrom.py b/ionosenterprise/requests/cdrom.py
index fe5fc27..a42079f 100644
--- a/ionosenterprise/requests/cdrom.py
+++ b/ionosenterprise/requests/cdrom.py
@@ -1,4 +1,9 @@
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
+
+
 class cdrom:
+    @IonosCoreProxy.process_response
     def get_attached_cdroms(self, datacenter_id, server_id, depth=1):
         """
         Retrieves a list of CDROMs attached to the server.
@@ -13,14 +18,13 @@ def get_attached_cdroms(self, datacenter_id, server_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/servers/%s/cdroms?depth=%s' % (
-                datacenter_id,
-                server_id,
-                str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_cdroms_get_with_http_info(
+                datacenter_id, server_id, depth=depth, response_type='object'
+            )
 
+    @IonosCoreProxy.process_response
     def get_attached_cdrom(self, datacenter_id, server_id, cdrom_id):
         """
         Retrieves an attached CDROM.
@@ -35,14 +39,11 @@ def get_attached_cdrom(self, datacenter_id, server_id, cdrom_id):
         :type       cdrom_id: ``str``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/servers/%s/cdroms/%s' % (
-                datacenter_id,
-                server_id,
-                cdrom_id))
-
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_cdroms_find_by_id_with_http_info(datacenter_id, server_id,
+                                                                  cdrom_id, response_type='object')
 
+    @IonosCoreProxy.process_response
     def attach_cdrom(self, datacenter_id, server_id, cdrom_id):
         """
         Attaches a CDROM to a server.
@@ -57,17 +58,12 @@ def attach_cdrom(self, datacenter_id, server_id, cdrom_id):
         :type       cdrom_id: ``str``
 
         """
-        data = '{ "id": "' + cdrom_id + '" }'
-
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/cdroms' % (
-                datacenter_id,
-                server_id),
-            method='POST',
-            data=data)
-
-        return response
+        image = ionoscloud.Image(id=cdrom_id)
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_cdroms_post_with_http_info(datacenter_id, server_id,
+                                                            image, response_type='object')
 
+    @IonosCoreProxy.process_response
     def detach_cdrom(self, datacenter_id, server_id, cdrom_id):
         """
         Detaches a volume from a server.
@@ -82,11 +78,7 @@ def detach_cdrom(self, datacenter_id, server_id, cdrom_id):
         :type       cdrom_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/cdroms/%s' % (
-                datacenter_id,
-                server_id,
-                cdrom_id),
-            method='DELETE')
-
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi) \
+            .datacenters_servers_cdroms_delete_with_http_info(datacenter_id, server_id,
+                                                              cdrom_id,
+                                                              response_type='object')
diff --git a/ionosenterprise/requests/contract.py b/ionosenterprise/requests/contract.py
index 82a6235..1b0de69 100644
--- a/ionosenterprise/requests/contract.py
+++ b/ionosenterprise/requests/contract.py
@@ -1,10 +1,14 @@
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
+
+
 class contract:
+    @IonosCoreProxy.process_response
     def list_contracts(self, depth=1):
         """
         Retrieves information about the resource limits
         for a particular contract and the current resource usage.
 
         """
-        response = self._perform_request('/contracts?depth=' + str(depth))
-
-        return response
+        return self.get_api_instance(ionoscloud.ContractApi)\
+            .contracts_get_with_http_info(depth=depth, response_type='object')
diff --git a/ionosenterprise/requests/datacenter.py b/ionosenterprise/requests/datacenter.py
index 1654457..dc28dd2 100644
--- a/ionosenterprise/requests/datacenter.py
+++ b/ionosenterprise/requests/datacenter.py
@@ -1,17 +1,19 @@
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 from ..utils import find_item_by_name
-import json
 
 
 class datacenter:
+
+    @IonosCoreProxy.process_response
     def list_datacenters(self, depth=1):
         """
         Retrieves a list of all data centers.
-
         """
-        response = self._perform_request('/datacenters?depth=' + str(depth))
-
-        return response
+        return self.get_api_instance(ionoscloud.DataCenterApi)\
+            .datacenters_get_with_http_info(depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def get_datacenter(self, datacenter_id, depth=1):
         """
         Retrieves a data center by its ID.
@@ -23,11 +25,12 @@ def get_datacenter(self, datacenter_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s?depth=%s' % (datacenter_id, str(depth)))
-
-        return response
+        return self.get_api_instance(ionoscloud.DataCenterApi)\
+            .datacenters_find_by_id_with_http_info(
+                datacenter_id, depth=depth, response_type='object'
+            )
 
+    @IonosCoreProxy.process_response
     def get_datacenter_by_name(self, name, depth=1):
         """
         Retrieves a data center by its name.
@@ -62,6 +65,7 @@ def get_datacenter_by_name(self, name, depth=1):
             ))
         return data_center[0]
 
+    @IonosCoreProxy.process_response
     def delete_datacenter(self, datacenter_id):
         """
         Removes the data center and all its components such as servers, NICs,
@@ -71,12 +75,10 @@ def delete_datacenter(self, datacenter_id):
         :type       datacenter_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s' % (datacenter_id),
-            method='DELETE')
-
-        return response
+        return self.get_api_instance(ionoscloud.DataCenterApi)\
+            .datacenters_delete_with_http_info(datacenter_id)
 
+    @IonosCoreProxy.process_response
     def create_datacenter(self, datacenter):
         """
         Creates a data center -- both simple and complex are supported.
@@ -178,15 +180,16 @@ def create_datacenter(self, datacenter):
                 "entities": entities
             }
 
-        data = json.dumps(raw)
-
-        response = self._perform_request(
-            url='/datacenters',
-            method='POST',
-            data=data)
+        if 'entities' not in raw:
+            datacenter = ionoscloud.models.Datacenter(properties=raw['properties'])
+        else:
+            datacenter = ionoscloud.models.Datacenter(
+                properties=raw['properties'], entities=raw['entities'])
 
-        return response
+        return self.get_api_instance(ionoscloud.DataCenterApi)\
+            .datacenters_post_with_http_info(datacenter, response_type='object')
 
+    @IonosCoreProxy.process_response
     def update_datacenter(self, datacenter_id, **kwargs):
         """
         Updates a data center with the parameters provided.
@@ -200,10 +203,10 @@ def update_datacenter(self, datacenter_id, **kwargs):
         for attr, value in kwargs.items():
             data[self._underscore_to_camelcase(attr)] = value
 
-        response = self._perform_request(
-            url='/datacenters/%s' % (
-                datacenter_id),
-            method='PATCH',
-            data=json.dumps(data))
-
-        return response
+        return self.get_api_instance(ionoscloud.DataCenterApi) \
+            .datacenters_put_with_http_info(
+            datacenter_id,
+                ionoscloud.models.Datacenter(
+                    properties=data
+                )
+            )
diff --git a/ionosenterprise/requests/dicts.py b/ionosenterprise/requests/dicts.py
index eb2d7c0..e62338b 100644
--- a/ionosenterprise/requests/dicts.py
+++ b/ionosenterprise/requests/dicts.py
@@ -89,7 +89,8 @@ def _create_loadbalancer_dict(loadbalancer):
 
         return raw
 
-    def _create_k8s_dict(self, cluster_name):
+    @staticmethod
+    def _create_k8s_dict(cluster_name):
         properties = {
             "name": cluster_name
         }
@@ -409,4 +410,4 @@ def _create_backupunit_dict(backupunit):
             "properties": properties
         }
 
-        return raw
\ No newline at end of file
+        return raw
diff --git a/ionosenterprise/requests/firewall.py b/ionosenterprise/requests/firewall.py
index 3f19a7b..4d1948d 100644
--- a/ionosenterprise/requests/firewall.py
+++ b/ionosenterprise/requests/firewall.py
@@ -1,9 +1,11 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class firewall:
-    def get_firewall_rule(self, datacenter_id,
-                          server_id, nic_id, firewall_rule_id):
+    @IonosCoreProxy.process_response
+    def get_firewall_rule(self, datacenter_id, server_id, nic_id, firewall_rule_id):
+
         """
         Retrieves a single firewall rule by ID.
 
@@ -20,15 +22,16 @@ def get_firewall_rule(self, datacenter_id,
         :type       firewall_rule_id: ``str``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/servers/%s/nics/%s/firewallrules/%s' % (
+
+        return self.get_api_instance(ionoscloud.NicApi) \
+            .datacenters_servers_nics_firewallrules_find_by_id_with_http_info(
                 datacenter_id,
                 server_id,
                 nic_id,
-                firewall_rule_id))
-
-        return response
+                firewall_rule_id,
+                response_type='object')
 
+    @IonosCoreProxy.process_response
     def get_firewall_rules(self, datacenter_id, server_id, nic_id, depth=1):
         """
         Retrieves a list of firewall rules available in the account.
@@ -46,15 +49,13 @@ def get_firewall_rules(self, datacenter_id, server_id, nic_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/servers/%s/nics/%s/firewallrules?depth=%s' % (
-                datacenter_id,
-                server_id,
-                nic_id,
-                str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.NicApi) \
+            .datacenters_servers_nics_firewallrules_get_with_http_info(
+            datacenter_id, server_id, nic_id, depth=depth, response_type='object'
+        )
 
+    @IonosCoreProxy.process_response
     def delete_firewall_rule(self, datacenter_id, server_id,
                              nic_id, firewall_rule_id):
         """
@@ -73,18 +74,13 @@ def delete_firewall_rule(self, datacenter_id, server_id,
         :type       firewall_rule_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/nics/%s/firewallrules/%s' % (
-                datacenter_id,
-                server_id,
-                nic_id,
-                firewall_rule_id),
-            method='DELETE')
 
-        return response
+        return self.get_api_instance(ionoscloud.NicApi) \
+            .datacenters_servers_nics_firewallrules_delete_with_http_info(
+            datacenter_id, server_id, nic_id, firewall_rule_id)
 
-    def create_firewall_rule(self, datacenter_id, server_id,
-                             nic_id, firewall_rule):
+    @IonosCoreProxy.process_response
+    def create_firewall_rule(self, datacenter_id, server_id, nic_id, firewall_rule):
         """
         Creates a firewall rule on the specified NIC and server.
 
@@ -130,20 +126,14 @@ def create_firewall_rule(self, datacenter_id, server_id,
         if firewall_rule.icmp_code:
             properties['icmpCode'] = firewall_rule.icmp_code
 
-        data = {
-            "properties": properties
-        }
-
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/nics/%s/firewallrules' % (
-                datacenter_id,
-                server_id,
-                nic_id),
-            method='POST',
-            data=json.dumps(data))
-
-        return response
+        firewallRule = ionoscloud.models.FirewallRule(
+            properties=properties
+        )
+        return self.get_api_instance(ionoscloud.NicApi) \
+            .datacenters_servers_nics_firewallrules_post_with_http_info(
+            datacenter_id, server_id, nic_id, firewallRule, response_type='object')
 
+    @IonosCoreProxy.process_response
     def update_firewall_rule(self, datacenter_id, server_id,
                              nic_id, firewall_rule_id, **kwargs):
         """
@@ -184,13 +174,6 @@ def update_firewall_rule(self, datacenter_id, server_id,
             else:
                 data[self._underscore_to_camelcase(attr)] = value
 
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/nics/%s/firewallrules/%s' % (
-                datacenter_id,
-                server_id,
-                nic_id,
-                firewall_rule_id),
-            method='PATCH',
-            data=json.dumps(data))
-
-        return response
+        return self.get_api_instance(ionoscloud.NicApi) \
+            .datacenters_servers_nics_firewallrules_patch_with_http_info(
+            datacenter_id, server_id, nic_id, firewall_rule_id, data, response_type='object')
diff --git a/ionosenterprise/requests/group.py b/ionosenterprise/requests/group.py
index 74a7bde..4df3713 100644
--- a/ionosenterprise/requests/group.py
+++ b/ionosenterprise/requests/group.py
@@ -1,7 +1,10 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class group:
+
+    @IonosCoreProxy.process_response
     def list_groups(self, depth=1):
         """
         Retrieves a list of all groups.
@@ -10,10 +13,10 @@ def list_groups(self, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request('/um/groups?depth=' + str(depth))
-
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_get_with_http_info(depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def get_group(self, group_id, depth=1):
         """
         Retrieves a single group by ID.
@@ -25,11 +28,11 @@ def get_group(self, group_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/um/groups/%s?depth=%s' % (group_id, str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_find_by_id_with_http_info(group_id, depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def create_group(self, group):
         """
         Creates a new group and set group privileges.
@@ -38,15 +41,14 @@ def create_group(self, group):
         :type       group: ``dict``
 
         """
-        data = json.dumps(self._create_group_dict(group))
-
-        response = self._perform_request(
-            url='/um/groups',
-            method='POST',
-            data=data)
 
-        return response
+        group = ionoscloud.models.Group(
+            properties=self._create_group_dict(group)['properties']
+        )
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_post_with_http_info(group, response_type='object')
 
+    @IonosCoreProxy.process_response
     def update_group(self, group_id, **kwargs):
         """
         Updates a group.
@@ -64,17 +66,15 @@ def update_group(self, group_id, **kwargs):
         for attr, value in kwargs.items():
             properties[self._underscore_to_camelcase(attr)] = value
 
-        data = {
-            "properties": properties
-        }
-
-        response = self._perform_request(
-            url='/um/groups/%s' % group_id,
-            method='PUT',
-            data=json.dumps(data))
-
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_put_with_http_info(
+                group_id,
+                ionoscloud.models.Group(
+                    properties=properties
+                ),
+                response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_group(self, group_id):
         """
         Removes a group.
@@ -83,8 +83,5 @@ def delete_group(self, group_id):
         :type       group_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/um/groups/%s' % group_id,
-            method='DELETE')
-
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_delete_with_http_info(group_id)
diff --git a/ionosenterprise/requests/image.py b/ionosenterprise/requests/image.py
index 7c4b7fa..d8c22ff 100644
--- a/ionosenterprise/requests/image.py
+++ b/ionosenterprise/requests/image.py
@@ -1,7 +1,10 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class image:
+
+    @IonosCoreProxy.process_response
     def get_image(self, image_id):
         """
         Retrieves a single image by ID.
@@ -10,20 +13,21 @@ def get_image(self, image_id):
         :type       image_id: ``str``
 
         """
-        response = self._perform_request('/images/%s' % image_id)
-        return response
+        return self.get_api_instance(ionoscloud.ImageApi)\
+            .images_find_by_id_with_http_info(image_id, response_type='object')
 
+    @IonosCoreProxy.process_response
     def list_images(self, depth=1):
         """
         Retrieves a list of images available in the data center.
 
         :param      depth: The depth of the response data.
         :type       depth: ``int``
-
         """
-        response = self._perform_request('/images?depth=' + str(depth))
-        return response
+        return self.get_api_instance(ionoscloud.ImageApi)\
+            .images_get_with_http_info(depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_image(self, image_id):
         """
         Removes only user created images.
@@ -32,10 +36,9 @@ def delete_image(self, image_id):
         :type       image_id: ``str``
 
         """
-        response = self._perform_request(url='/images/' + image_id,
-                                         method='DELETE')
-        return response
+        return self.get_api_instance(ionoscloud.ImageApi).images_delete_with_http_info(image_id)
 
+    @IonosCoreProxy.process_response
     def update_image(self, image_id, **kwargs):
         """
         Replace all properties of an image.
@@ -46,7 +49,6 @@ def update_image(self, image_id, **kwargs):
         for attr, value in kwargs.items():
             data[self._underscore_to_camelcase(attr)] = value
 
-        response = self._perform_request(url='/images/' + image_id,
-                                         method='PATCH',
-                                         data=json.dumps(data))
-        return response
+        return self.get_api_instance(ionoscloud.ImageApi)\
+            .images_patch_with_http_info(image_id, ionoscloud.models.Image(properties=data),
+                                         response_type='object')
diff --git a/ionosenterprise/requests/ipblock.py b/ionosenterprise/requests/ipblock.py
index b9713d3..ab0a678 100644
--- a/ionosenterprise/requests/ipblock.py
+++ b/ionosenterprise/requests/ipblock.py
@@ -1,7 +1,9 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class ipblock:
+    @IonosCoreProxy.process_response
     def get_ipblock(self, ipblock_id):
         """
         Retrieves a single IP block by ID.
@@ -10,17 +12,19 @@ def get_ipblock(self, ipblock_id):
         :type       ipblock_id: ``str``
 
         """
-        response = self._perform_request('/ipblocks/%s' % ipblock_id)
-        return response
+        return self.get_api_instance(ionoscloud.IPBlocksApi)\
+            .ipblocks_find_by_id_with_http_info(ipblock_id, response_type='object')
 
+    @IonosCoreProxy.process_response
     def list_ipblocks(self, depth=1):
         """
         Retrieves a list of IP blocks available in the account.
 
         """
-        response = self._perform_request('/ipblocks?depth=%s' % str(depth))
-        return response
+        return self.get_api_instance(ionoscloud.IPBlocksApi)\
+            .ipblocks_get_with_http_info(depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_ipblock(self, ipblock_id):
         """
         Removes a single IP block from your account.
@@ -29,11 +33,10 @@ def delete_ipblock(self, ipblock_id):
         :type       ipblock_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/ipblocks/' + ipblock_id, method='DELETE')
-
-        return response
+        return self.get_api_instance(ionoscloud.IPBlocksApi)\
+            .ipblocks_delete_with_http_info(ipblock_id)
 
+    @IonosCoreProxy.process_response
     def reserve_ipblock(self, ipblock):
         """
         Reserves an IP block within your account.
@@ -49,11 +52,9 @@ def reserve_ipblock(self, ipblock):
         if ipblock.size:
             properties['size'] = str(ipblock.size)
 
-        raw = {
-            "properties": properties,
-        }
-
-        response = self._perform_request(
-            url='/ipblocks', method='POST', data=json.dumps(raw))
+        ipblock = ionoscloud.models.IpBlock(
+            properties=properties
+        )
 
-        return response
+        return self.get_api_instance(ionoscloud.IPBlocksApi)\
+            .ipblocks_post_with_http_info(ipblock, response_type='object')
diff --git a/ionosenterprise/requests/k8s.py b/ionosenterprise/requests/k8s.py
index fda83ec..423102d 100644
--- a/ionosenterprise/requests/k8s.py
+++ b/ionosenterprise/requests/k8s.py
@@ -1,7 +1,9 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class k8s:
+    @IonosCoreProxy.process_response
     def get_k8s_cluster(self, k8s_cluster_id):
         """
         Retrieves a kubernetes cluster by its ID.
@@ -11,10 +13,10 @@ def get_k8s_cluster(self, k8s_cluster_id):
 
         """
 
-        response = self._perform_request('/k8s/%s' % k8s_cluster_id)
-
-        return response
+        return self.get_api_instance(ionoscloud.KubernetesApi)\
+            .k8s_find_by_cluster_id_with_http_info(k8s_cluster_id, response_type='object')
 
+    @IonosCoreProxy.process_response
     def list_k8s_clusters(self, depth=1):
         """
         Retrieves the list of kubernetes clusters.
@@ -23,11 +25,10 @@ def list_k8s_clusters(self, depth=1):
         :type       depth: ``int``
 
         """
+        return self.get_api_instance(ionoscloud.KubernetesApi)\
+            .k8s_get_with_http_info(depth=depth, response_type='object')
 
-        response = self._perform_request('/k8s?depth=' + str(depth))
-
-        return response
-
+    @IonosCoreProxy.process_response
     def create_k8s_cluster(self, name):
         """
         Creates a Kubernets cluster.
@@ -42,16 +43,15 @@ def create_k8s_cluster(self, name):
 
         """
 
-        data = json.dumps(self._create_k8s_dict(name))
-
-        response = self._perform_request(
-            url='/k8s',
-            method='POST',
-            data=data
+        kubernetesCluster = ionoscloud.models.KubernetesCluster(
+            properties={
+                'name': name
+            }
         )
+        return self.get_api_instance(ionoscloud.KubernetesApi)\
+            .k8s_post_with_http_info(kubernetesCluster, response_type='object')
 
-        return response
-
+    @IonosCoreProxy.process_response
     def delete_k8s_cluster(self, k8s_cluster_id):
         """
         Removes a kubernetes cluster.
@@ -61,13 +61,10 @@ def delete_k8s_cluster(self, k8s_cluster_id):
 
         """
 
-        response = self._perform_request(
-            url='/k8s/%s' % k8s_cluster_id,
-            method='DELETE'
-        )
-
-        return response
+        return self.get_api_instance(ionoscloud.KubernetesApi)\
+            .k8s_delete_with_http_info(k8s_cluster_id)
 
+    @IonosCoreProxy.process_response
     def update_k8s_cluster(self, k8s_cluster_id, **kwargs):
         """
         Replace all properties of a kubernetes cluster.
@@ -82,10 +79,8 @@ def update_k8s_cluster(self, k8s_cluster_id, **kwargs):
         for attr, value in kwargs.items():
             data[self._underscore_to_camelcase(attr)] = value
 
-        response = self._perform_request(
-            url='/k8s/%s' % k8s_cluster_id,
-            method='PUT',
-            data=json.dumps(data)
+        kubernetesCluster = ionoscloud.models.KubernetesCluster(
+            properties=data
         )
-
-        return response
+        return self.get_api_instance(ionoscloud.KubernetesApi)\
+            .k8s_put_with_http_info(k8s_cluster_id, kubernetesCluster, response_type='object')
diff --git a/ionosenterprise/requests/k8s_config.py b/ionosenterprise/requests/k8s_config.py
index 48d0e3f..3d4bd59 100644
--- a/ionosenterprise/requests/k8s_config.py
+++ b/ionosenterprise/requests/k8s_config.py
@@ -1,4 +1,9 @@
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
+
+
 class k8s_config:
+    @IonosCoreProxy.process_response
     def get_k8s_config(self, k8s_cluster_id):
         """
         Retrieves a kubernetes cluster config by its ID.
@@ -7,5 +12,5 @@ def get_k8s_config(self, k8s_cluster_id):
         :type       k8s_cluster_id: ``str``
 
         """
-        response = self._perform_request('/k8s/%s/kubeconfig' % k8s_cluster_id)
-        return response
+        return self.get_api_instance(ionoscloud.KubernetesApi)\
+            .k8s_kubeconfig_get_with_http_info(k8s_cluster_id, response_type='object')
diff --git a/ionosenterprise/requests/k8s_nodepools.py b/ionosenterprise/requests/k8s_nodepools.py
index 9bc4cb5..d9a146f 100644
--- a/ionosenterprise/requests/k8s_nodepools.py
+++ b/ionosenterprise/requests/k8s_nodepools.py
@@ -1,7 +1,10 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class k8s_nodepools:
+
+    @IonosCoreProxy.process_response
     def get_k8s_cluster_nodepool(self, k8s_cluster_id, nodepool_id):
         """
         Retrieve Kubernetes Node Pool
@@ -13,14 +16,11 @@ def get_k8s_cluster_nodepool(self, k8s_cluster_id, nodepool_id):
         :type       nodepool_id: ``str``
 
         """
+        return self.get_api_instance(ionoscloud.KubernetesApi)\
+            .k8s_nodepools_find_by_id_with_http_info(
+            k8s_cluster_id, nodepool_id, response_type='object')
 
-        response = self._perform_request(
-            '/k8s/%s/nodepools/%s' %
-            (k8s_cluster_id, nodepool_id)
-        )
-
-        return response
-
+    @IonosCoreProxy.process_response
     def delete_k8s_cluster_nodepool(self, k8s_cluster_id, nodepool_id):
         """
         Delete Kubernetes Node Pool
@@ -33,30 +33,22 @@ def delete_k8s_cluster_nodepool(self, k8s_cluster_id, nodepool_id):
 
         """
 
-        response = self._perform_request(
-            url='/k8s/%s/nodepools/%s' %
-            (k8s_cluster_id, nodepool_id),
-            method='DELETE'
-        )
-
-        return response
+        return self.get_api_instance(ionoscloud.KubernetesApi)\
+            .k8s_nodepools_delete_with_http_info(k8s_cluster_id, nodepool_id)
 
+    @IonosCoreProxy.process_response
     def update_k8s_cluster_nodepool(self,
                                     k8s_cluster_id, nodepool_id, node_count,
-                                    maintenance_window=None, auto_scaling=None, lan_ids=None, public_ips=None):
-
+                                    maintenance_window=None, auto_scaling=None,
+                                    lan_ids=None, public_ips=None):
         """
         This will modify the Kubernetes Node Pool.
-
         :param      k8s_cluster_id: The unique ID of the Kubernetes Cluster
         :type       k8s_cluster_id: ``str``
-
         :param      nodepool_id: The unique ID of the Kubernetes Node Pool
         :type       nodepool_id: ``str``
-
         :param      node_count: Number of nodes part of the Node Pool
         :type       node_count: ``int``
-
         :param      maintenance_window: MaintenanceWindow
         :type       maintenance_window: ``dict, e.g. {'dayOfTheWeek':'', 'time':''}``
                         dayOfTheWeek: The day of the week for a maintenance window.
@@ -67,61 +59,61 @@ def update_k8s_cluster_nodepool(self,
                                             "Friday",
                                             "Saturday",
                                             "Sunday"]
-                        time: The time to use for a maintenance window. Accepted formats are: HH:mm:ss; HH:mm:ss"Z";
+                        time: The time to use for a maintenance window. Accepted formats are:
+                        HH:mm:ss; HH:mm:ss"Z";
                             HH:mm:ssZ. This time may varies by 15 minutes.
                         time: ``string``
-
-
         :param      auto_scaling: AutoScaling object
         :type       auto_scaling: ``dict`` {'minNodeCount': 2, 'maxNodeCount': 3}
-                        minNodeCount": The minimum number of worker nodes that the managed node group can scale in.
+                        minNodeCount": The minimum number of worker nodes that the managed node
+                         group can scale in.
                             Should be set together with 'maxNodeCount'.
-                            Value for this attribute must be greater than equal to 1 and less than equal to maxNodeCount.
+                            Value for this attribute must be greater than equal to 1 and less
+                            than equal to maxNodeCount.
                         minNodeCount" : ``integer``
-
-                        maxNodeCount: The maximum number of worker nodes that the managed node pool can scale-out.
+                        maxNodeCount: The maximum number of worker nodes that the managed node
+                        pool can scale-out.
                                 Should be set together with 'minNodeCount'.
-                                Value for this attribute must be greater than equal to 1 and minNodeCount.
+                                Value for this attribute must be greater than equal to 1 and
+                                minNodeCount.
                         maxNodeCount: ``integer``
 
         :param      lan_ids: array of additional LANs attached to worker nodes
         :type       lan_ids: ``list of ints``
 
-        :param      public_ips: Optional array of reserved public IP addresses to be used by the nodes.
+        :param      public_ips: Optional array of reserved public IP addresses to be used by
+                        the nodes.
                         IPs must be from same location as the data center used for the node pool.
                         The array must contain one extra IP than maximum number of nodes could be.
-                        (nodeCount+1 if fixed node amount or maxNodeCount+1 if auto scaling is used).
+                        (nodeCount+1 if fixed node amount or maxNodeCount+1 if auto scaling is
+                        used).
                         The extra provided IP Will be used during rebuilding of nodes.
         :type       public_ips: ``list``
         """
 
-        # mandatory fields
-        properties = {
-            'nodeCount': node_count
-        }
+        properties = {node_count: node_count}
 
-        # optional fields
         if maintenance_window is not None:
-            properties['maintenanceWindow'] = maintenance_window
+            properties['maintenance_window'] = maintenance_window
         if auto_scaling is not None:
-            properties['autoScaling'] = auto_scaling
+            properties['auto_scaling'] = auto_scaling
         if lan_ids is not None:
-            properties['lans'] = [{'id': int(lan_id)} for lan_id in lan_ids]
+            properties['lans'] = [{'id': lan_id} for lan_id in lan_ids]
         if public_ips is not None:
-            properties['publicIps'] = public_ips
-
-        data = {
-            'properties': properties
-        }
+            properties['public_ips'] = public_ips
 
-        response = self._perform_request(
-            url='/k8s/%s/nodepools/%s' % (k8s_cluster_id, nodepool_id),
-            method='PUT',
-            data=json.dumps(data)
+        kubernetesNodePool = ionoscloud.models.KubernetesNodePool(
+            properties=ionoscloud.models.KubernetesNodePoolProperties(
+                **properties
+            )
         )
+        return self.get_api_instance(ionoscloud.KubernetesApi)\
+            .k8s_nodepools_put_with_http_info(k8s_cluster_id,
+                                              nodepool_id,
+                                              kubernetesNodePool,
+                                              response_type='object')
 
-        return response
-
+    @IonosCoreProxy.process_response
     def list_k8s_cluster_nodepools(self, k8s_cluster_id, depth=1):
         """
         List Kubernetes Node Pools
@@ -134,12 +126,11 @@ def list_k8s_cluster_nodepools(self, k8s_cluster_id, depth=1):
 
         """
 
-        response = self._perform_request(
-            url='/k8s/%s/nodepools?depth=%s' % (k8s_cluster_id, str(depth))
-        )
-
-        return response
+        return self.get_api_instance(ionoscloud.KubernetesApi)\
+            .k8s_nodepools_get_with_http_info(k8s_cluster_id, depth=depth,
+                                              response_type='object')
 
+    @IonosCoreProxy.process_response
     def create_k8s_cluster_nodepool(self,
                                     k8s_cluster_id,
                                     name, datacenter_id,
@@ -151,13 +142,10 @@ def create_k8s_cluster_nodepool(self,
                                     lan_ids=None, labels=None, annotations=None, public_ips=None):
         """
         This will create a new Kubernetes Node Pool inside a Kubernetes Cluster.
-
         :param      k8s_cluster_id: The unique ID of the Kubernetes Cluster
         :type       k8s_cluster_id: ``str``
-
         :param      nodepool_id: The unique ID of the Kubernetes Node Pool
         :type       nodepool_id: ``str``
-
         :param      name: A Kubernetes Node Pool Name. Valid Kubernetes
                           Node Pool name must be 63 characters or less
                           and must be empty or begin and end with an
@@ -165,35 +153,25 @@ def create_k8s_cluster_nodepool(self,
                           dashes (-), underscores (_), dots (.), and
                           alphanumerics between.
         :type       name: ``str``
-
         :param      datacenter_id: A valid uuid of the datacenter on which user has access
         :type       datacenter_id: ``str``
-
         :param      node_count: Number of nodes part of the Node Pool
         :type       node_count: ``int``
-
         :param      cpu_family: A valid cpu family name
         :type       cpu_family: ``str``
-
         :param      cores_count: Number of cores for node
         :type       cores_count: ``int``
-
         :param      ram_size: RAM size for node, minimum size 2048MB is recommended
         :type       ram_size: ``int``
-
         :param      availability_zone: The availability zone in which the server should exist
         :type       availability_zone: ``str``
-
         :param      storage_type: Hardware type of the volume
         :type       storage_type: ``str``
-
         :param      storage_size: The size of the volume in GB. The size
                                   should be greater than 10GB
         :type       storage_size: ``int``
-
         :param      k8s_version: Kubernetes version
         :type       k8s_version: ``str``
-
         :param      maintenance_window: MaintenanceWindow
         :type       maintenance_window: ``dict, e.g. {'dayOfTheWeek':'', 'time':''}``
                         dayOfTheWeek: The day of the week for a maintenance window.
@@ -204,36 +182,37 @@ def create_k8s_cluster_nodepool(self,
                                             "Friday",
                                             "Saturday",
                                             "Sunday"]
-                        time: The time to use for a maintenance window. Accepted formats are: HH:mm:ss; HH:mm:ss"Z";
+                        time: The time to use for a maintenance window. Accepted formats
+                            are: HH:mm:ss; HH:mm:ss"Z";
                             HH:mm:ssZ. This time may varies by 15 minutes.
                         time: ``string``
-
-
         :param      auto_scaling: AutoScaling object
         :type       auto_scaling: ``dict`` {'minNodeCount': 2, 'maxNodeCount': 3}
-                        minNodeCount": The minimum number of worker nodes that the managed node group can scale in.
+                        minNodeCount": The minimum number of worker nodes that the managed node
+                         group can scale in.
                             Should be set together with 'maxNodeCount'.
-                            Value for this attribute must be greater than equal to 1 and less than equal to maxNodeCount.
+                            Value for this attribute must be greater than equal to 1 and less than
+                             equal to
+                            maxNodeCount.
                         minNodeCount" : ``integer``
-
-                        maxNodeCount: The maximum number of worker nodes that the managed node pool can scale-out.
+                        maxNodeCount: The maximum number of worker nodes that the managed node pool
+                        can scale-out.
                                 Should be set together with 'minNodeCount'.
-                                Value for this attribute must be greater than equal to 1 and minNodeCount.
+                                Value for this attribute must be greater than equal to 1 and
+                                minNodeCount.
                         maxNodeCount: ``integer``
-
-
         :param      lan_ids: array of additional LANs attached to worker nodes
         :type       lan_ids: ``list of ints``
-
         :param      labels: map of labels attached to node pool
         :type       labels: ``dict``
-
         :param      annotations: map of annotations attached to node pool
         :type       annotations: ``dict``
-        :param      public_ips: Optional array of reserved public IP addresses to be used by the nodes.
+        :param      public_ips: Optional array of reserved public IP addresses to be used by the
+                        nodes.
                         IPs must be from same location as the data center used for the node pool.
                         The array must contain one extra IP than maximum number of nodes could be.
-                        (nodeCount+1 if fixed node amount or maxNodeCount+1 if auto scaling is used).
+                        (nodeCount+1 if fixed node amount or maxNodeCount+1 if auto scaling is
+                        used).
                         The extra provided IP Will be used during rebuilding of nodes.
         :type       public_ips: ``list``
         """
@@ -241,40 +220,38 @@ def create_k8s_cluster_nodepool(self,
         # mandatory fields
         properties = {
             'name': name,
-            'datacenterId': datacenter_id,
-            'nodeCount': node_count,
-            'cpuFamily': cpu_family,
-            'coresCount': cores_count,
-            'ramSize': ram_size,
-            'availabilityZone': availability_zone,
-            'storageType': storage_type,
-            'storageSize': storage_size
+            'datacenter_id': datacenter_id,
+            'node_count': node_count,
+            'cpu_family': cpu_family,
+            'cores_count': cores_count,
+            'ram_size': ram_size,
+            'availability_zone': availability_zone,
+            'storage_type': storage_type,
+            'storage_size': storage_size
         }
 
         # optional fields
         if k8s_version is not None:
-            properties['k8sVersion'] = k8s_version
+            properties['k8s_version'] = k8s_version
         if maintenance_window is not None:
-            properties['maintenanceWindow'] = maintenance_window
+            properties['maintenance_window'] = maintenance_window
         if auto_scaling is not None:
-            properties['autoScaling'] = auto_scaling
+            properties['auto_scaling'] = auto_scaling
         if lan_ids is not None:
-            properties['lans'] = [{'id':int(lan_id)} for lan_id in lan_ids]
+            properties['lans'] = [{'id': int(lan_id)} for lan_id in lan_ids]
         if labels is not None:
             properties['labels'] = labels
         if annotations is not None:
             properties['annotations'] = annotations
         if public_ips is not None:
-            properties['publicIps'] = public_ips
-
-        data = {
-            'properties': properties
-        }
+            properties['public_ips'] = public_ips
 
-        response = self._perform_request(
-            url='/k8s/%s/nodepools' % k8s_cluster_id,
-            method='POST',
-            data=json.dumps(data)
+        kubernetes_node_pool = ionoscloud.models.KubernetesNodePool(
+            properties=ionoscloud.models.KubernetesNodePoolProperties(
+                **properties
+            )
         )
 
-        return response
+        return self.get_api_instance(ionoscloud.KubernetesApi)\
+            .k8s_nodepools_post_with_http_info(k8s_cluster_id, kubernetes_node_pool,
+                                               response_type='object')
diff --git a/ionosenterprise/requests/lan.py b/ionosenterprise/requests/lan.py
index 039feec..004bdd4 100644
--- a/ionosenterprise/requests/lan.py
+++ b/ionosenterprise/requests/lan.py
@@ -1,7 +1,10 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class lan:
+
+    @IonosCoreProxy.process_response
     def get_lan(self, datacenter_id, lan_id, depth=1):
         """
         Retrieves a single LAN by ID.
@@ -16,14 +19,12 @@ def get_lan(self, datacenter_id, lan_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/lans/%s?depth=%s' % (
-                datacenter_id,
-                lan_id,
-                str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.LanApi)\
+            .datacenters_lans_find_by_id_with_http_info(
+            datacenter_id, lan_id, depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def list_lans(self, datacenter_id, depth=1):
         """
         Retrieves a list of LANs available in the account.
@@ -35,13 +36,12 @@ def list_lans(self, datacenter_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/lans?depth=%s' % (
-                datacenter_id,
-                str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.LanApi)\
+            .datacenters_lans_get_with_http_info(
+            datacenter_id, depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_lan(self, datacenter_id, lan_id):
         """
         Removes a LAN from the data center.
@@ -53,12 +53,11 @@ def delete_lan(self, datacenter_id, lan_id):
         :type       lan_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/lans/%s' % (
-                datacenter_id, lan_id), method='DELETE')
 
-        return response
+        return self.get_api_instance(ionoscloud.LanApi)\
+            .datacenters_lans_delete_with_http_info(datacenter_id, lan_id)
 
+    @IonosCoreProxy.process_response
     def create_lan(self, datacenter_id, lan):
         """
         Creates a LAN in the data center.
@@ -70,15 +69,17 @@ def create_lan(self, datacenter_id, lan):
         :type       lan: ``dict``
 
         """
-        data = json.dumps(self._create_lan_dict(lan))
-
-        response = self._perform_request(
-            url='/datacenters/%s/lans' % datacenter_id,
-            method='POST',
-            data=data)
 
-        return response
+        lan_properties = lan.__dict__
+        del lan_properties['nics']
+        return self.get_api_instance(ionoscloud.LanApi)\
+            .datacenters_lans_post_with_http_info(datacenter_id,
+                                                  ionoscloud.models.Lan(
+                                                      properties=lan_properties
+                                                  ),
+                                                  response_type='object')
 
+    @IonosCoreProxy.process_response
     def update_lan(self, datacenter_id, lan_id, name=None,
                    public=None, ip_failover=None, pcc=None):
         """
@@ -99,6 +100,10 @@ def update_lan(self, datacenter_id, lan_id, name=None,
         :param      ip_failover: A list of IP fail-over dicts.
         :type       ip_failover: ``list``
 
+        :param      pcc: Unique identifier of the private cross connect the given LAN is
+                        connected to if any
+        :type       pcc: ``str``
+
         """
         data = {}
 
@@ -114,13 +119,12 @@ def update_lan(self, datacenter_id, lan_id, name=None,
         if pcc:
             data['pcc'] = pcc
 
-        response = self._perform_request(
-            url='/datacenters/%s/lans/%s' % (datacenter_id, lan_id),
-            method='PATCH',
-            data=json.dumps(data))
-
-        return response
+        return self.get_api_instance(ionoscloud.LanApi)\
+            .datacenters_lans_patch_with_http_info(datacenter_id, lan_id,
+                                                   ionoscloud.models.LanProperties(**data),
+                                                   response_type='object')
 
+    @IonosCoreProxy.process_response
     def get_lan_members(self, datacenter_id, lan_id, depth=1):
         """
         Retrieves the list of NICs that are part of the LAN.
@@ -132,10 +136,7 @@ def get_lan_members(self, datacenter_id, lan_id, depth=1):
         :type       lan_id: ``str``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/lans/%s/nics?depth=%s' % (
-                datacenter_id,
-                lan_id,
-                str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.LanApi)\
+            .datacenters_lans_nics_get_with_http_info(
+            datacenter_id, lan_id, depth=depth, response_type='object')
diff --git a/ionosenterprise/requests/loadbalancer.py b/ionosenterprise/requests/loadbalancer.py
index feeefd5..c03e138 100644
--- a/ionosenterprise/requests/loadbalancer.py
+++ b/ionosenterprise/requests/loadbalancer.py
@@ -1,7 +1,9 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class loadbalancer:
+    @IonosCoreProxy.process_response
     def get_loadbalancer(self, datacenter_id, loadbalancer_id):
         """
         Retrieves a single load balancer by ID.
@@ -13,12 +15,11 @@ def get_loadbalancer(self, datacenter_id, loadbalancer_id):
         :type       loadbalancer_id: ``str``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/loadbalancers/%s' % (
-                datacenter_id, loadbalancer_id))
-
-        return response
+        return self.get_api_instance(ionoscloud.LoadBalancerApi)\
+            .datacenters_loadbalancers_find_by_id_with_http_info(
+            datacenter_id, loadbalancer_id, response_type='object')
 
+    @IonosCoreProxy.process_response
     def list_loadbalancers(self, datacenter_id, depth=1):
         """
         Retrieves a list of load balancers in the data center.
@@ -30,12 +31,11 @@ def list_loadbalancers(self, datacenter_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/loadbalancers?depth=%s' % (
-                datacenter_id, str(depth)))
-
-        return response
+        return self.get_api_instance(ionoscloud.LoadBalancerApi)\
+            .datacenters_loadbalancers_get_with_http_info(
+            datacenter_id, depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_loadbalancer(self, datacenter_id, loadbalancer_id):
         """
         Removes the load balancer from the data center.
@@ -47,12 +47,12 @@ def delete_loadbalancer(self, datacenter_id, loadbalancer_id):
         :type       loadbalancer_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/loadbalancers/%s' % (
-                datacenter_id, loadbalancer_id), method='DELETE')
 
-        return response
+        return self.get_api_instance(ionoscloud.LoadBalancerApi)\
+            .datacenters_loadbalancers_delete_with_http_info(
+            datacenter_id, loadbalancer_id)
 
+    @IonosCoreProxy.process_response
     def create_loadbalancer(self, datacenter_id, loadbalancer):
         """
         Creates a load balancer within the specified data center.
@@ -64,15 +64,16 @@ def create_loadbalancer(self, datacenter_id, loadbalancer):
         :type       loadbalancer: ``dict``
 
         """
-        data = json.dumps(self._create_loadbalancer_dict(loadbalancer))
-
-        response = self._perform_request(
-            url='/datacenters/%s/loadbalancers' % datacenter_id,
-            method='POST',
-            data=data)
 
-        return response
+        return self.get_api_instance(ionoscloud.LoadBalancerApi)\
+            .datacenters_loadbalancers_post_with_http_info(datacenter_id,
+                                                           ionoscloud.models.Loadbalancer(
+                                                                **self._create_loadbalancer_dict(
+                                                                    loadbalancer
+                                                                )
+                                                           ))
 
+    @IonosCoreProxy.process_response
     def update_loadbalancer(self, datacenter_id,
                             loadbalancer_id, **kwargs):
         """
@@ -90,14 +91,13 @@ def update_loadbalancer(self, datacenter_id,
         for attr, value in kwargs.items():
             data[self._underscore_to_camelcase(attr)] = value
 
-        response = self._perform_request(
-            url='/datacenters/%s/loadbalancers/%s' % (datacenter_id,
-                                                      loadbalancer_id),
-            method='PATCH',
-            data=json.dumps(data))
+        loadbalancer = ionoscloud.models.LoadbalancerProperties(**kwargs)
 
-        return response
+        return self.get_api_instance(ionoscloud.LoadBalancerApi)\
+            .datacenters_loadbalancers_patch_with_http_info(
+            datacenter_id, loadbalancer_id, loadbalancer)
 
+    @IonosCoreProxy.process_response
     def get_loadbalancer_members(self, datacenter_id, loadbalancer_id,
                                  depth=1):
         """
@@ -113,12 +113,12 @@ def get_loadbalancer_members(self, datacenter_id, loadbalancer_id,
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/loadbalancers/%s/balancednics?depth=%s' % (
-                datacenter_id, loadbalancer_id, str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.LoadBalancerApi)\
+            .datacenters_loadbalancers_balancednics_get_with_http_info(
+            datacenter_id, loadbalancer_id, depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def add_loadbalanced_nics(self, datacenter_id,
                               loadbalancer_id, nic_id):
         """
@@ -134,17 +134,15 @@ def add_loadbalanced_nics(self, datacenter_id,
         :type       nic_id: ``str``
 
         """
-        data = '{ "id": "' + nic_id + '" }'
-
-        response = self._perform_request(
-            url='/datacenters/%s/loadbalancers/%s/balancednics' % (
-                datacenter_id,
-                loadbalancer_id),
-            method='POST',
-            data=data)
 
-        return response
+        nic = ionoscloud.models.Nic(
+            id=nic_id
+        )
+        return self.get_api_instance(ionoscloud.LoadBalancerApi)\
+            .datacenters_loadbalancers_balancednics_post_with_http_info(
+            datacenter_id, loadbalancer_id, nic)
 
+    @IonosCoreProxy.process_response
     def get_loadbalanced_nic(self, datacenter_id,
                              loadbalancer_id, nic_id, depth=1):
         """
@@ -163,15 +161,12 @@ def get_loadbalanced_nic(self, datacenter_id,
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/loadbalancers/%s/balancednics/%s?depth=%s' % (
-                datacenter_id,
-                loadbalancer_id,
-                nic_id,
-                str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.LoadBalancerApi)\
+            .datacenters_loadbalancers_balancednics_find_by_nic_id_with_http_info(
+            datacenter_id, loadbalancer_id, nic_id, depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def remove_loadbalanced_nic(self, datacenter_id,
                                 loadbalancer_id, nic_id):
         """
@@ -187,11 +182,10 @@ def remove_loadbalanced_nic(self, datacenter_id,
         :type       nic_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/loadbalancers/%s/balancednics/%s' % (
+
+        return self.get_api_instance(ionoscloud.LoadBalancerApi)\
+            .datacenters_loadbalancers_balancednics_delete_with_http_info(
                 datacenter_id,
                 loadbalancer_id,
-                nic_id),
-            method='DELETE')
-
-        return response
+                nic_id
+            )
diff --git a/ionosenterprise/requests/location.py b/ionosenterprise/requests/location.py
index 8048d8b..da3dba9 100644
--- a/ionosenterprise/requests/location.py
+++ b/ionosenterprise/requests/location.py
@@ -1,4 +1,10 @@
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
+
+
 class location:
+
+    @IonosCoreProxy.process_response
     def get_location(self, location_id, depth=0):
         """
         Retrieves a single location by ID.
@@ -7,14 +13,15 @@ def get_location(self, location_id, depth=0):
         :type       location_id: ``str``
 
         """
-        response = self._perform_request('/locations/%s?depth=%s' % (location_id, depth))
-        return response
+        return self.get_api_instance(ionoscloud.LocationApi)\
+            .locations_find_by_region_id_with_http_info(location_id, depth=depth,
+                                                        response_type='object')
 
+    @IonosCoreProxy.process_response
     def list_locations(self, depth=0):
         """
         Retrieves a list of locations available in the account.
 
         """
-        response = self._perform_request('/locations?depth=%s' % (depth))
-
-        return response
+        return self.get_api_instance(ionoscloud.LocationApi)\
+            .locations_get_with_http_info(depth=depth, response_type='object')
diff --git a/ionosenterprise/requests/nic.py b/ionosenterprise/requests/nic.py
index e837aa1..546dcf8 100644
--- a/ionosenterprise/requests/nic.py
+++ b/ionosenterprise/requests/nic.py
@@ -1,7 +1,10 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class nic:
+
+    @IonosCoreProxy.process_response
     def get_nic(self, datacenter_id, server_id, nic_id, depth=1):
         """
         Retrieves a NIC by its ID.
@@ -19,15 +22,16 @@ def get_nic(self, datacenter_id, server_id, nic_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/servers/%s/nics/%s?depth=%s' % (
+        return self.get_api_instance(ionoscloud.NicApi)\
+            .datacenters_servers_nics_find_by_id_with_http_info(
                 datacenter_id,
                 server_id,
                 nic_id,
-                str(depth)))
-
-        return response
+                depth=depth,
+                response_type='object'
+            )
 
+    @IonosCoreProxy.process_response
     def list_nics(self, datacenter_id, server_id, depth=1):
         """
         Retrieves a list of all NICs bound to the specified server.
@@ -42,14 +46,11 @@ def list_nics(self, datacenter_id, server_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/servers/%s/nics?depth=%s' % (
-                datacenter_id,
-                server_id,
-                str(depth)))
-
-        return response
+        return self.get_api_instance(ionoscloud.NicApi)\
+            .datacenters_servers_nics_get_with_http_info(datacenter_id, server_id,
+                                                         depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_nic(self, datacenter_id, server_id, nic_id):
         """
         Removes a NIC from the server.
@@ -64,15 +65,11 @@ def delete_nic(self, datacenter_id, server_id, nic_id):
         :type       nic_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/nics/%s' % (
-                datacenter_id,
-                server_id,
-                nic_id),
-            method='DELETE')
 
-        return response
+        return self.get_api_instance(ionoscloud.NicApi)\
+            .datacenters_servers_nics_delete_with_http_info(datacenter_id, server_id, nic_id)
 
+    @IonosCoreProxy.process_response
     def create_nic(self, datacenter_id, server_id, nic):
         """
         Creates a NIC on the specified server.
@@ -88,19 +85,16 @@ def create_nic(self, datacenter_id, server_id, nic):
 
         """
 
-        data = json.dumps(self._create_nic_dict(nic))
+        return self.get_api_instance(ionoscloud.NicApi)\
+            .datacenters_servers_nics_post_with_http_info(datacenter_id,
+                                                          server_id,
+                                                          ionoscloud.models.Nic(
+                                                              **self._create_nic_dict(nic)
+                                                          ),
+                                                          response_type='object')
 
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/nics' % (
-                datacenter_id,
-                server_id),
-            method='POST',
-            data=data)
-
-        return response
-
-    def update_nic(self, datacenter_id, server_id,
-                   nic_id, **kwargs):
+    @IonosCoreProxy.process_response
+    def update_nic(self, datacenter_id, server_id, nic_id, **kwargs):
         """
         Updates a NIC with the parameters provided.
 
@@ -119,12 +113,6 @@ def update_nic(self, datacenter_id, server_id,
         for attr, value in kwargs.items():
             data[self._underscore_to_camelcase(attr)] = value
 
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/nics/%s' % (
-                datacenter_id,
-                server_id,
-                nic_id),
-            method='PATCH',
-            data=json.dumps(data))
-
-        return response
+        return self.get_api_instance(ionoscloud.NicApi)\
+            .datacenters_servers_nics_patch_with_http_info(datacenter_id, server_id, nic_id,
+                                                           data, response_type='object')
diff --git a/ionosenterprise/requests/pccs.py b/ionosenterprise/requests/pccs.py
index 2eb81ef..6288981 100644
--- a/ionosenterprise/requests/pccs.py
+++ b/ionosenterprise/requests/pccs.py
@@ -1,6 +1,13 @@
-import json
+import ionoscloud
+
+from ionoscloud.models.private_cross_connect import PrivateCrossConnect
+from ionoscloud.models.private_cross_connect_properties import PrivateCrossConnectProperties
+
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
+
 
 class pccs:
+    @IonosCoreProxy.process_response
     def list_pccs(self, depth=1):
         """
         List Private Cross-Connects.
@@ -9,10 +16,11 @@ def list_pccs(self, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request('/pccs?depth=' + str(depth))
-
-        return response
+        return self.get_api_instance(ionoscloud.PrivateCrossConnectApi)\
+            .pccs_get_with_http_info(depth=depth,
+                                     response_type='object')
 
+    @IonosCoreProxy.process_response
     def create_pcc(self, pcc):
         """
         Create a Private Cross-Connect.
@@ -21,13 +29,14 @@ def create_pcc(self, pcc):
         :type       pcc: ``PrivateCrossConnect instance``
         """
         pcc_dict = self._create_privatecrossconnect_dict(pcc)
-        response = self._perform_request(
-            url='/pccs',
-            method='POST',
-            data=json.dumps(pcc_dict))
 
-        return response
+        pcc = PrivateCrossConnect(**pcc_dict)
 
+        return self.get_api_instance(ionoscloud.PrivateCrossConnectApi)\
+            .pccs_post_with_http_info(pcc,
+                                      response_type='object')
+
+    @IonosCoreProxy.process_response
     def get_pcc(self, pcc_id, depth=1):
         """
         Retrieves a pcc by its ID.
@@ -39,11 +48,12 @@ def get_pcc(self, pcc_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/pccs/%s?depth=%s' % (pcc_id, str(depth)))
-
-        return response
+        return self.get_api_instance(ionoscloud.PrivateCrossConnectApi) \
+            .pccs_find_by_id_with_http_info(pcc_id,
+                                            depth=depth,
+                                            response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_pcc(self, pcc_id):
         """
         Removes the pcc.
@@ -52,12 +62,10 @@ def delete_pcc(self, pcc_id):
         :type       pcc_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/pccs/%s' % (pcc_id),
-            method='DELETE')
-
-        return response
+        return self.get_api_instance(ionoscloud.PrivateCrossConnectApi)\
+            .pccs_delete_with_http_info(pcc_id)
 
+    @IonosCoreProxy.process_response
     def update_pcc(self, pcc_id, **kwargs):
         """
         Update private cross connect.
@@ -70,10 +78,14 @@ def update_pcc(self, pcc_id, **kwargs):
 
         """
 
-        response = self._perform_request(
-            url='/pccs/%s' % (pcc_id),
-            method='PATCH',
-            data=json.dumps(kwargs))
+        data = {}
+
+        for attr, value in kwargs.items():
+            data[attr] = value
 
-        return response
+        pccProperties = PrivateCrossConnectProperties(**data)
 
+        return self.get_api_instance(ionoscloud.PrivateCrossConnectApi) \
+            .pccs_patch_with_http_info(pcc_id,
+                                       pccProperties,
+                                       response_type='object')
diff --git a/ionosenterprise/requests/request.py b/ionosenterprise/requests/request.py
index 2f282b6..615aa2a 100644
--- a/ionosenterprise/requests/request.py
+++ b/ionosenterprise/requests/request.py
@@ -1,4 +1,9 @@
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
+
+
 class request:
+    @IonosCoreProxy.process_response
     def get_request(self, request_id, status=False):
         """
         Retrieves a single request by ID.
@@ -10,21 +15,20 @@ def get_request(self, request_id, status=False):
         :type       status: ``bool``
 
         """
+
         if status:
-            response = self._perform_request(
-                '/requests/' + request_id + '/status')
-        else:
-            response = self._perform_request(
-                '/requests/%s' % request_id)
+            return self.get_api_instance(ionoscloud.RequestApi)\
+                .requests_status_get_with_http_info(request_id, response_type='object')
 
-        return response
+        return self.get_api_instance(ionoscloud.RequestApi)\
+            .requests_find_by_id_with_http_info(request_id, response_type='object')
 
+    @IonosCoreProxy.process_response
     def list_requests(self, depth=1):
         """
         Retrieves a list of requests available in the account.
 
         """
-        response = self._perform_request(
-            '/requests?depth=%s' % str(depth))
 
-        return response
+        return self.get_api_instance(ionoscloud.RequestApi)\
+            .requests_get_with_http_info(depth=depth, response_type='object')
diff --git a/ionosenterprise/requests/resource.py b/ionosenterprise/requests/resource.py
index 1594b51..210f020 100644
--- a/ionosenterprise/requests/resource.py
+++ b/ionosenterprise/requests/resource.py
@@ -1,4 +1,9 @@
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
+
+
 class resource:
+    @IonosCoreProxy.process_response
     def list_resources(self, resource_type=None, depth=1):
         """
         Retrieves a list of all resources.
@@ -14,14 +19,16 @@ def list_resources(self, resource_type=None, depth=1):
 
         """
         if resource_type is not None:
-            response = self._perform_request(
-                '/um/resources/%s?depth=%s' % (resource_type, str(depth)))
-        else:
-            response = self._perform_request(
-                '/um/resources?depth=' + str(depth))
+            return self.get_api_instance(ionoscloud.UserManagementApi)\
+                .um_resources_find_by_type_with_http_info(resource_type, depth=depth,
+                                                          response_type='object')
 
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_resources_get_with_http_info(depth=depth, response_type='object')
 
+        # return response
+
+    @IonosCoreProxy.process_response
     def get_resource(self, resource_type, resource_id, depth=1):
         """
         Retrieves a single resource of a particular type.
@@ -38,8 +45,6 @@ def get_resource(self, resource_type, resource_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/um/resources/%s/%s?depth=%s' % (
-                resource_type, resource_id, str(depth)))
-
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_resources_find_by_type_and_id_with_http_info(resource_type, resource_id,
+                                                             depth=depth, response_type='object')
diff --git a/ionosenterprise/requests/s3key.py b/ionosenterprise/requests/s3key.py
index 296d290..429672d 100644
--- a/ionosenterprise/requests/s3key.py
+++ b/ionosenterprise/requests/s3key.py
@@ -1,6 +1,13 @@
-import json
+import ionoscloud
+from ionoscloud.models.s3_key_properties import S3KeyProperties
+from ionoscloud.models.s3_key import S3Key
+
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
+
 
 class s3key:
+
+    @IonosCoreProxy.process_response
     def list_s3keys(self, user_id, depth=1):
         """
         Retrieve a User's S3 keys
@@ -12,10 +19,11 @@ def list_s3keys(self, user_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request('/um/users/%s/s3keys?depth=%s' % (user_id, str(depth)))
-
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi) \
+            .um_users_s3keys_get_with_http_info(user_id, depth=depth,
+                                                response_type='object')
 
+    @IonosCoreProxy.process_response
     def create_s3key(self, user_id):
         """
         Create a S3 key for the given user.
@@ -24,13 +32,10 @@ def create_s3key(self, user_id):
         :type       user_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/um/users/%s/s3keys' % user_id,
-            method='POST')
-
-        return response
-
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_users_s3keys_post_with_http_info(user_id, response_type='object')
 
+    @IonosCoreProxy.process_response
     def get_s3key(self, user_id, key_id, depth=1):
         """
         Retrieve given S3 key belonging to the given User
@@ -45,10 +50,13 @@ def get_s3key(self, user_id, key_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request('/um/users/%s/s3keys/%s?depth=%s' % (user_id, key_id, str(depth)))
-
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_users_s3keys_find_by_key_id_with_http_info(user_id,
+                                                           key_id,
+                                                           depth=depth,
+                                                           response_type='object')
 
+    @IonosCoreProxy.process_response
     def update_s3key(self, user_id, key_id, **kwargs):
         """
         Modify a S3 key having the given key id
@@ -67,16 +75,19 @@ def update_s3key(self, user_id, key_id, **kwargs):
         data = {}
 
         for attr, value in kwargs.items():
-            data[self._underscore_to_camelcase(attr)] = value
+            data[attr] = value
 
-        response = self._perform_request(
-            url = '/um/users/%s/s3keys/%s' % (user_id, key_id),
-            method='PUT',
-            data=json.dumps({'properties':data})
-        )
+        s3keyProperties = S3Key(properties=S3KeyProperties(**data))
 
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_users_s3keys_put_with_http_info(
+            user_id,
+            key_id,
+            s3keyProperties,
+            response_type='object'
+        )
 
+    @IonosCoreProxy.process_response
     def delete_s3key(self, user_id, key_id):
         """
         Delete a S3 key
@@ -88,14 +99,11 @@ def delete_s3key(self, user_id, key_id):
         :type       key_id: ``str``
 
         """
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_users_s3keys_delete_with_http_info(user_id, key_id)
 
-        response = self._perform_request(
-            url='/um/users/%s/s3keys/%s' % (user_id, key_id),
-            method='DELETE')
-
-        return response
-
-    def get_s3ssourl(self, user_id, depth=1):
+    @IonosCoreProxy.process_response
+    def get_s3ssourl(self, user_id):
         """
         Retrieve given S3 key belonging to the given User
 
@@ -106,5 +114,5 @@ def get_s3ssourl(self, user_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request('/um/users/%s/s3ssourl?depth=%s' % (user_id, str(depth)))
-        return response
\ No newline at end of file
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_users_s3ssourl_get_with_http_info(user_id, response_type='object')
diff --git a/ionosenterprise/requests/server.py b/ionosenterprise/requests/server.py
index b27097c..b57c762 100644
--- a/ionosenterprise/requests/server.py
+++ b/ionosenterprise/requests/server.py
@@ -1,7 +1,9 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class server:
+    @IonosCoreProxy.process_response
     def list_servers(self, datacenter_id, depth=1):
         """
         Retrieves a list of all servers bound to the specified data center.
@@ -13,11 +15,12 @@ def list_servers(self, datacenter_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/servers?depth=%s' % (datacenter_id, str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_get_with_http_info(datacenter_id, depth=depth,
+                                                    response_type='object')
 
+    @IonosCoreProxy.process_response
     def get_server(self, datacenter_id, server_id, depth=1):
         """
         Retrieves a server by its ID.
@@ -32,14 +35,11 @@ def get_server(self, datacenter_id, server_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/servers/%s?depth=%s' % (
-                datacenter_id,
-                server_id,
-                str(depth)))
-
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_find_by_id_with_http_info(datacenter_id, server_id, depth=depth,
+                                                           response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_server(self, datacenter_id, server_id):
         """
         Removes the server from your data center.
@@ -51,14 +51,11 @@ def delete_server(self, datacenter_id, server_id):
         :type       server_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s' % (
-                datacenter_id,
-                server_id),
-            method='DELETE')
 
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_delete_with_http_info(datacenter_id, server_id)
 
+    @IonosCoreProxy.process_response
     def create_server(self, datacenter_id, server):
         """
         Creates a server within the data center.
@@ -70,16 +67,14 @@ def create_server(self, datacenter_id, server):
         :type       server: ``dict``
 
         """
+        server = ionoscloud.models.Server(
+            **self._create_server_dict(server)
+        )
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_post_with_http_info(datacenter_id,
+                                                     server, response_type='object')
 
-        data = json.dumps(self._create_server_dict(server))
-
-        response = self._perform_request(
-            url='/datacenters/%s/servers' % (datacenter_id),
-            method='POST',
-            data=data)
-
-        return response
-
+    @IonosCoreProxy.process_response
     def update_server(self, datacenter_id, server_id, **kwargs):
         """
         Updates a server with the parameters provided.
@@ -105,15 +100,11 @@ def update_server(self, datacenter_id, server_id, **kwargs):
             else:
                 data[self._underscore_to_camelcase(attr)] = value
 
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s' % (
-                datacenter_id,
-                server_id),
-            method='PATCH',
-            data=json.dumps(data))
-
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_patch_with_http_info(datacenter_id, server_id, data,
+                                                      response_type='object')
 
+    @IonosCoreProxy.process_response
     def start_server(self, datacenter_id, server_id):
         """
         Starts the server.
@@ -125,14 +116,10 @@ def start_server(self, datacenter_id, server_id):
         :type       server_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/start' % (
-                datacenter_id,
-                server_id),
-            method='POST-ACTION')
-
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_start_post_with_http_info(datacenter_id, server_id)
 
+    @IonosCoreProxy.process_response
     def stop_server(self, datacenter_id, server_id):
         """
         Stops the server.
@@ -144,14 +131,10 @@ def stop_server(self, datacenter_id, server_id):
         :type       server_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/stop' % (
-                datacenter_id,
-                server_id),
-            method='POST-ACTION')
-
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_stop_post_with_http_info(datacenter_id, server_id)
 
+    @IonosCoreProxy.process_response
     def reboot_server(self, datacenter_id, server_id):
         """
         Reboots the server.
@@ -163,10 +146,5 @@ def reboot_server(self, datacenter_id, server_id):
         :type       server_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/reboot' % (
-                datacenter_id,
-                server_id),
-            method='POST-ACTION')
-
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_reboot_post_with_http_info(datacenter_id, server_id)
diff --git a/ionosenterprise/requests/share.py b/ionosenterprise/requests/share.py
index 89821b1..125aa16 100644
--- a/ionosenterprise/requests/share.py
+++ b/ionosenterprise/requests/share.py
@@ -1,7 +1,9 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class share:
+    @IonosCoreProxy.process_response
     def list_shares(self, group_id, depth=1):
         """
         Retrieves a list of all shares though a group.
@@ -13,11 +15,11 @@ def list_shares(self, group_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/um/groups/%s/shares?depth=%s' % (group_id, str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_shares_get_with_http_info(group_id, depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def get_share(self, group_id, resource_id, depth=1):
         """
         Retrieves a specific resource share available to a group.
@@ -32,12 +34,12 @@ def get_share(self, group_id, resource_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/um/groups/%s/shares/%s?depth=%s'
-            % (group_id, resource_id, str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_shares_find_by_resource_id_with_http_info(
+            group_id, resource_id, depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def add_share(self, group_id, resource_id, **kwargs):
         """
         Shares a resource through a group.
@@ -54,17 +56,15 @@ def add_share(self, group_id, resource_id, **kwargs):
         for attr, value in kwargs.items():
             properties[self._underscore_to_camelcase(attr)] = value
 
-        data = {
-            "properties": properties
-        }
+        resource = ionoscloud.models.GroupShare(
+            properties=properties
+        )
 
-        response = self._perform_request(
-            url='/um/groups/%s/shares/%s' % (group_id, resource_id),
-            method='POST',
-            data=json.dumps(data))
-
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_shares_post_with_http_info(group_id, resource_id, resource,
+                                                  response_type='object')
 
+    @IonosCoreProxy.process_response
     def update_share(self, group_id, resource_id, **kwargs):
         """
         Updates the permissions of a group for a resource share.
@@ -81,17 +81,14 @@ def update_share(self, group_id, resource_id, **kwargs):
         for attr, value in kwargs.items():
             properties[self._underscore_to_camelcase(attr)] = value
 
-        data = {
-            "properties": properties
-        }
-
-        response = self._perform_request(
-            url='/um/groups/%s/shares/%s' % (group_id, resource_id),
-            method='PUT',
-            data=json.dumps(data))
-
-        return response
+        group_share = ionoscloud.models.GroupShare(
+            properties=properties
+        )
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_shares_put_with_http_info(
+            group_id, resource_id, group_share, response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_share(self, group_id, resource_id):
         """
         Removes a resource share from a group.
@@ -103,8 +100,6 @@ def delete_share(self, group_id, resource_id):
         :type       resource_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/um/groups/%s/shares/%s' % (group_id, resource_id),
-            method='DELETE')
 
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_shares_delete_with_http_info(group_id, resource_id)
diff --git a/ionosenterprise/requests/snapshot.py b/ionosenterprise/requests/snapshot.py
index e325bc0..f9b8c5a 100644
--- a/ionosenterprise/requests/snapshot.py
+++ b/ionosenterprise/requests/snapshot.py
@@ -1,8 +1,10 @@
-import json
-from six.moves.urllib.parse import urlencode  # false positive, pylint: disable=import-error
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class snapshot:
+
+    @IonosCoreProxy.process_response
     def get_snapshot(self, snapshot_id):
         """
         Retrieves a single snapshot by ID.
@@ -11,19 +13,21 @@ def get_snapshot(self, snapshot_id):
         :type       snapshot_id: ``str``
 
         """
-        response = self._perform_request('/snapshots/%s' % snapshot_id)
-        return response
 
+        return self.get_api_instance(ionoscloud.SnapshotApi)\
+            .snapshots_find_by_id_with_http_info(snapshot_id, response_type='object')
+
+    @IonosCoreProxy.process_response
     def list_snapshots(self, depth=1):
         """
         Retrieves a list of snapshots available in the account.
 
         """
-        response = self._perform_request(
-            '/snapshots?depth=%s' % str(depth))
 
-        return response
+        return self.get_api_instance(ionoscloud.SnapshotApi)\
+            .snapshots_get_with_http_info(depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_snapshot(self, snapshot_id):
         """
         Removes a snapshot from your account.
@@ -32,11 +36,11 @@ def delete_snapshot(self, snapshot_id):
         :type       snapshot_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/snapshots/' + snapshot_id, method='DELETE')
 
-        return response
+        return self.get_api_instance(ionoscloud.SnapshotApi)\
+            .snapshots_delete_with_http_info(snapshot_id)
 
+    @IonosCoreProxy.process_response
     def update_snapshot(self, snapshot_id, **kwargs):
         """
         Removes a snapshot from your account.
@@ -44,18 +48,14 @@ def update_snapshot(self, snapshot_id, **kwargs):
         :param      snapshot_id: The unique ID of the snapshot.
         :type       snapshot_id: ``str``
         """
-        data = {}
-
-        for attr, value in kwargs.items():
-            data[self._underscore_to_camelcase(attr)] = value
-
-        response = self._perform_request(
-            url='/snapshots/' + snapshot_id, method='PATCH', data=json.dumps(data))
 
-        return response
+        return self.get_api_instance(ionoscloud.SnapshotApi)\
+            .snapshots_patch_with_http_info(snapshot_id,
+                                            ionoscloud.models.SnapshotProperties(**kwargs),
+                                            response_type='object')
 
-    def create_snapshot(self, datacenter_id, volume_id,
-                        name=None, description=None):
+    @IonosCoreProxy.process_response
+    def create_snapshot(self, datacenter_id, volume_id, name=None, description=None):
         """
         Creates a snapshot of the specified volume.
 
@@ -73,16 +73,11 @@ def create_snapshot(self, datacenter_id, volume_id,
 
         """
 
-        data = {'name': name, 'description': description}
-
-        response = self._perform_request(
-            '/datacenters/%s/volumes/%s/create-snapshot' % (
-                datacenter_id, volume_id),
-            method='POST-ACTION-JSON',
-            data=urlencode(data))
-
-        return response
+        return self.get_api_instance(ionoscloud.VolumeApi)\
+            .datacenters_volumes_create_snapshot_post_with_http_info(
+            datacenter_id, volume_id, name=name, description=description, response_type='object')
 
+    @IonosCoreProxy.process_response
     def restore_snapshot(self, datacenter_id, volume_id, snapshot_id):
         """
         Restores a snapshot to the specified volume.
@@ -97,17 +92,12 @@ def restore_snapshot(self, datacenter_id, volume_id, snapshot_id):
         :type       snapshot_id: ``str``
 
         """
-        data = {'snapshotId': snapshot_id}
-
-        response = self._perform_request(
-            url='/datacenters/%s/volumes/%s/restore-snapshot' % (
-                datacenter_id,
-                volume_id),
-            method='POST-ACTION',
-            data=urlencode(data))
 
-        return response
+        return self.get_api_instance(ionoscloud.VolumeApi)\
+            .datacenters_volumes_restore_snapshot_post_with_http_info(
+                datacenter_id, volume_id, snapshot_id=snapshot_id)
 
+    @IonosCoreProxy.process_response
     def remove_snapshot(self, snapshot_id):
         """
         Removes a snapshot.
@@ -117,7 +107,6 @@ def remove_snapshot(self, snapshot_id):
         :type       snapshot_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/snapshots/' + snapshot_id, method='DELETE')
 
-        return response
+        return self.get_api_instance(ionoscloud.SnapshotApi)\
+            .snapshots_delete_with_http_info(snapshot_id)
diff --git a/ionosenterprise/requests/user.py b/ionosenterprise/requests/user.py
index debeafc..1e8b9d1 100644
--- a/ionosenterprise/requests/user.py
+++ b/ionosenterprise/requests/user.py
@@ -1,7 +1,10 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class user:
+
+    @IonosCoreProxy.process_response
     def list_users(self, depth=1):
         """
         Retrieves a list of all users.
@@ -10,10 +13,11 @@ def list_users(self, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request('/um/users?depth=' + str(depth))
 
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_users_get_with_http_info(depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def get_user(self, user_id, depth=1):
         """
         Retrieves a single user by ID.
@@ -25,11 +29,11 @@ def get_user(self, user_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/um/users/%s?depth=%s' % (user_id, str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_users_find_by_id_with_http_info(user_id, depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def create_user(self, user):
         """
         Creates a new user.
@@ -40,13 +44,10 @@ def create_user(self, user):
         """
         data = self._create_user_dict(user=user)
 
-        response = self._perform_request(
-            url='/um/users',
-            method='POST',
-            data=json.dumps(data))
-
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_users_post_with_http_info(ionoscloud.models.User(**data), response_type='object')
 
+    @IonosCoreProxy.process_response
     def update_user(self, user_id, **kwargs):
         """
         Updates a user.
@@ -60,17 +61,11 @@ def update_user(self, user_id, **kwargs):
         for attr, value in kwargs.items():
             properties[self._underscore_to_camelcase(attr)] = value
 
-        data = {
-            "properties": properties
-        }
-
-        response = self._perform_request(
-            url='/um/users/%s' % user_id,
-            method='PUT',
-            data=json.dumps(data))
-
-        return response
+        user = ionoscloud.models.User(properties=properties)
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_users_put_with_http_info(user_id, user, response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_user(self, user_id):
         """
         Removes a user.
@@ -79,12 +74,11 @@ def delete_user(self, user_id):
         :type       user_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/um/users/%s' % user_id,
-            method='DELETE')
 
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_users_delete_with_http_info(user_id)
 
+    @IonosCoreProxy.process_response
     def list_group_users(self, group_id, depth=1):
         """
         Retrieves a list of all users that are members of a particular group.
@@ -96,11 +90,11 @@ def list_group_users(self, group_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/um/groups/%s/users?depth=%s' % (group_id, str(depth)))
 
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_users_get_with_http_info(group_id, depth=depth, response_type='object')
 
+    @IonosCoreProxy.process_response
     def add_group_user(self, group_id, user_id):
         """
         Adds an existing user to a group.
@@ -112,17 +106,12 @@ def add_group_user(self, group_id, user_id):
         :type       user_id: ``str``
 
         """
-        data = {
-            "id": user_id
-        }
-
-        response = self._perform_request(
-            url='/um/groups/%s/users' % group_id,
-            method='POST',
-            data=json.dumps(data))
 
-        return response
+        user = ionoscloud.models.User(id=user_id)
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_users_post_with_http_info(group_id, user, response_type='object')
 
+    @IonosCoreProxy.process_response
     def remove_group_user(self, group_id, user_id):
         """
         Removes a user from a group.
@@ -134,8 +123,6 @@ def remove_group_user(self, group_id, user_id):
         :type       user_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/um/groups/%s/users/%s' % (group_id, user_id),
-            method='DELETE')
 
-        return response
+        return self.get_api_instance(ionoscloud.UserManagementApi)\
+            .um_groups_users_delete_with_http_info(group_id, user_id)
diff --git a/ionosenterprise/requests/volume.py b/ionosenterprise/requests/volume.py
index a907de6..7d0bb40 100644
--- a/ionosenterprise/requests/volume.py
+++ b/ionosenterprise/requests/volume.py
@@ -1,7 +1,10 @@
-import json
+import ionoscloud
+from coreadaptor.IonosCoreProxy import IonosCoreProxy
 
 
 class volume:
+
+    @IonosCoreProxy.process_response
     def get_volume(self, datacenter_id, volume_id):
         """
         Retrieves a single volume by ID.
@@ -13,11 +16,11 @@ def get_volume(self, datacenter_id, volume_id):
         :type       volume_id: ``str``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/volumes/%s' % (datacenter_id, volume_id))
-
-        return response
+        return self.get_api_instance(ionoscloud.VolumeApi)\
+            .datacenters_volumes_find_by_id_with_http_info(datacenter_id, volume_id,
+                                                           response_type='object')
 
+    @IonosCoreProxy.process_response
     def list_volumes(self, datacenter_id, depth=1):
         """
         Retrieves a list of volumes in the data center.
@@ -29,11 +32,11 @@ def list_volumes(self, datacenter_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/volumes?depth=%s' % (datacenter_id, str(depth)))
-
-        return response
+        return self.get_api_instance(ionoscloud.VolumeApi)\
+            .datacenters_volumes_get_with_http_info(datacenter_id, depth=depth,
+                                                    response_type='object')
 
+    @IonosCoreProxy.process_response
     def delete_volume(self, datacenter_id, volume_id):
         """
         Removes a volume from the data center.
@@ -45,12 +48,10 @@ def delete_volume(self, datacenter_id, volume_id):
         :type       volume_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/volumes/%s' % (
-                datacenter_id, volume_id), method='DELETE')
-
-        return response
+        return self.get_api_instance(ionoscloud.VolumeApi)\
+            .datacenters_volumes_delete_with_http_info(datacenter_id, volume_id)
 
+    @IonosCoreProxy.process_response
     def create_volume(self, datacenter_id, volume):
         """
         Creates a volume within the specified data center.
@@ -63,15 +64,13 @@ def create_volume(self, datacenter_id, volume):
 
         """
 
-        data = (json.dumps(self._create_volume_dict(volume)))
-
-        response = self._perform_request(
-            url='/datacenters/%s/volumes' % datacenter_id,
-            method='POST',
-            data=data)
-
-        return response
+        volume = ionoscloud.models.Volume(
+            **self._create_volume_dict(volume)
+        )
+        return self.get_api_instance(ionoscloud.VolumeApi)\
+            .datacenters_volumes_post_with_http_info(datacenter_id, volume)
 
+    @IonosCoreProxy.process_response
     def update_volume(self, datacenter_id, volume_id, **kwargs):
         """
         Updates a volume
@@ -88,15 +87,11 @@ def update_volume(self, datacenter_id, volume_id, **kwargs):
         for attr, value in kwargs.items():
             data[self._underscore_to_camelcase(attr)] = value
 
-        response = self._perform_request(
-            url='/datacenters/%s/volumes/%s' % (
-                datacenter_id,
-                volume_id),
-            method='PATCH',
-            data=json.dumps(data))
-
-        return response
+        return self.get_api_instance(ionoscloud.VolumeApi)\
+            .datacenters_volumes_patch_with_http_info(datacenter_id, volume_id,
+                                                      ionoscloud.models.VolumeProperties(**data))
 
+    @IonosCoreProxy.process_response
     def get_attached_volumes(self, datacenter_id, server_id, depth=1):
         """
         Retrieves a list of volumes attached to the server.
@@ -111,14 +106,13 @@ def get_attached_volumes(self, datacenter_id, server_id, depth=1):
         :type       depth: ``int``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/servers/%s/volumes?depth=%s' % (
-                datacenter_id,
-                server_id,
-                str(depth)))
-
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_volumes_get_with_http_info(datacenter_id,
+                                                            server_id,
+                                                            depth=depth,
+                                                            response_type='object')
 
+    @IonosCoreProxy.process_response
     def get_attached_volume(self, datacenter_id, server_id, volume_id):
         """
         Retrieves volume information.
@@ -133,14 +127,12 @@ def get_attached_volume(self, datacenter_id, server_id, volume_id):
         :type       volume_id: ``str``
 
         """
-        response = self._perform_request(
-            '/datacenters/%s/servers/%s/volumes/%s' % (
-                datacenter_id,
-                server_id,
-                volume_id))
-
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_volumes_find_by_id_with_http_info(datacenter_id, server_id,
+                                                                   volume_id,
+                                                                   response_type='object')
 
+    @IonosCoreProxy.process_response
     def attach_volume(self, datacenter_id, server_id, volume_id):
         """
         Attaches a volume to a server.
@@ -155,17 +147,13 @@ def attach_volume(self, datacenter_id, server_id, volume_id):
         :type       volume_id: ``str``
 
         """
-        data = '{ "id": "' + volume_id + '" }'
 
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/volumes' % (
-                datacenter_id,
-                server_id),
-            method='POST',
-            data=data)
-
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_volumes_post_with_http_info(datacenter_id, server_id,
+                                                             ionoscloud.models.Volume(id=volume_id)
+                                                             )
 
+    @IonosCoreProxy.process_response
     def detach_volume(self, datacenter_id, server_id, volume_id):
         """
         Detaches a volume from a server.
@@ -180,11 +168,5 @@ def detach_volume(self, datacenter_id, server_id, volume_id):
         :type       volume_id: ``str``
 
         """
-        response = self._perform_request(
-            url='/datacenters/%s/servers/%s/volumes/%s' % (
-                datacenter_id,
-                server_id,
-                volume_id),
-            method='DELETE')
-
-        return response
+        return self.get_api_instance(ionoscloud.ServerApi)\
+            .datacenters_servers_volumes_delete_with_http_info(datacenter_id, server_id, volume_id)
diff --git a/requirements.txt b/requirements.txt
index 7bb9eb2..b2bbf7a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,7 @@
 requests>=2.0.0
 six>=1.10.0
 appdirs>=1.4.3
+ionoscloud>=5.0.3
 
 # Testing requirements
 pytest
diff --git a/setup.py b/setup.py
index 4f9dcd8..c6685a8 100644
--- a/setup.py
+++ b/setup.py
@@ -24,6 +24,7 @@
 import os
 import re
 import sys
+import pytest
 from setuptools import setup
 from setuptools.command.test import test as TestCommand
 
@@ -57,7 +58,6 @@ def finalize_options(self):
         self.test_suite = True  # pylint: disable=attribute-defined-outside-init
 
     def run_tests(self):
-        import pytest
         errno = pytest.main(self.test_args)
         sys.exit(errno)
 
@@ -71,9 +71,9 @@ def run_tests(self):
     author='Ionos Enterprise',
     author_email='sdk@cloud.ionos.com',
     url='https://github.com/ionos-enterprise/ionos-enterprise-sdk-python',
-    install_requires=['requests>=2.0.0', 'six>=1.10.0', 'appdirs>=1.4.3'],
+    install_requires=['requests>=2.0.0', 'six>=1.10.0', 'appdirs>=1.4.3', 'ionoscloud>=5.0.3'],
     # include_package_data=True,
-    packages=['ionosenterprise', 'ionosenterprise.requests', 'ionosenterprise.items'],
+    packages=['ionosenterprise', 'ionosenterprise.requests', 'ionosenterprise.items', 'coreadaptor'],
     platforms='any',
     test_suite='ionosenterprise.test.test_ionosenterprise',
     cmdclass={'test': PyTest},


Test patch:
diff --git a/tests/helpers/resources.py b/tests/helpers/resources.py
index 8cecab7..51a38e9 100644
--- a/tests/helpers/resources.py
+++ b/tests/helpers/resources.py
@@ -75,7 +75,7 @@ def resource():
         },
         'volume': {
             'name': 'Python SDK Test',
-            'size': 2,
+            'size': 3,
             'bus': 'VIRTIO',
             'disk_type': 'HDD',
             'licence_type': 'UNKNOWN',
@@ -83,7 +83,7 @@ def resource():
         },
         'volume2': {
             'name': 'Python SDK Test',
-            'size': 2,
+            'size': 3,
             'bus': 'VIRTIO',
             'disk_type': 'HDD',
             'availability_zone': 'ZONE_3',
@@ -119,7 +119,7 @@ def resource():
         'lan': {
             # REST API converts names to lowercase.
             'name': 'python sdk test',
-            'public': False,
+            'public': False
         },
         'ipblock': {
             # REST API converts names to lowercase.
diff --git a/tests/pylint.conf b/tests/pylint.conf
index d1c79d2..812119f 100644
--- a/tests/pylint.conf
+++ b/tests/pylint.conf
@@ -15,7 +15,7 @@ persistent=no
 # --enable=similarities". If you want to run only the classes checker, but have
 # no Warning level messages displayed, use"--disable=all --enable=classes
 # --disable=W"
-disable=fixme,invalid-name,locally-disabled,missing-docstring,too-few-public-methods,too-many-arguments,too-many-branches,too-many-instance-attributes,too-many-locals,too-many-lines,too-many-nested-blocks,too-many-public-methods,too-many-statements
+disable=fixme,invalid-name,locally-disabled,missing-docstring,too-few-public-methods,too-many-arguments,too-many-branches,too-many-instance-attributes,too-many-locals,too-many-lines,too-many-nested-blocks,too-many-public-methods,too-many-statements,no-member,import-error,no-name-in-module,raise-missing-from,too-many-ancestors,useless-object-inheritance,consider-using-sys-exit,unused-wildcard-import,consider-using-get,consider-using-dict-comprehension,import-outside-toplevel,redefined-outer-name,no-else-return,wildcard-import
 
 
 [REPORTS]
diff --git a/tests/test_backupunit.py b/tests/test_backupunit.py
index c63f1ff..12e1e9e 100644
--- a/tests/test_backupunit.py
+++ b/tests/test_backupunit.py
@@ -13,26 +13,31 @@
 # limitations under the License.
 
 import unittest
-import uuid
-
-from ionosenterprise.client import IonosEnterpriseService, BackupUnit
+import warnings
 
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import IonosEnterpriseService, BackupUnit
+
 
 class TestBackupunit(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
             password=configuration.PASSWORD,
             headers=configuration.HEADERS)
 
-        backupunitModel1 = BackupUnit("TEST 1", password="TEST PASSWORD 1", email="TEST@TEST-EMAIL1.COM")
+        backupunitModel1 = BackupUnit("TEST 1", password="TEST PASSWORD 1",
+                                      email="TEST@TEST-EMAIL1.COM")
         cls.backupunit1 = cls.client.create_backupunit(backupunitModel1)
-        backupunitModel2 = BackupUnit("TEST 2", password="TEST PASSWORD 2", email="TEST@TEST-EMAIL2.COM")
+
+        backupunitModel2 = BackupUnit("TEST 2", password="TEST PASSWORD 2",
+                                      email="TEST@TEST-EMAIL2.COM")
         cls.backupunit2 = cls.client.create_backupunit(backupunitModel2)
 
     @classmethod
@@ -42,7 +47,7 @@ def tearDownClass(cls):
     def test_list_backupunits(self):
         backupunits = self.client.list_backupunits()
         self.assertGreater(len(backupunits), 0)
-        self.assertGreater(len(backupunits['items']), 1)
+        self.assertGreater(len(backupunits['items']), 0)
 
     def test_get_backupunit(self):
         backupunit = self.client.get_backupunit(self.backupunit1['id'])
@@ -54,11 +59,13 @@ def test_delete_backupunits(self):
         self.assertTrue('requestId' in response)
 
     def test_update_backupunit(self):
-        backupunit = self.client.update_backupunit(self.backupunit1['id'], email="TEST@TEST-EMAIL-UPDATED.COM")
+        backupunit = self.client.update_backupunit(self.backupunit1['id'],
+                                                   email="TEST@TEST-EMAIL-UPDATED.COM")
         self.assertEqual(backupunit['properties']['email'], "TEST@TEST-EMAIL-UPDATED.COM")
 
     def test_update_backupunit_put(self):
-        backupunit = self.client.update_backupunit_put(self.backupunit1['id'], email="TEST@TEST-EMAIL-UPDATED-PUT.COM")
+        backupunit = self.client.update_backupunit_put(self.backupunit1['id'],
+                                                       email="TEST@TEST-EMAIL-UPDATED-PUT.COM")
         self.assertEqual(backupunit['properties']['email'], "TEST@TEST-EMAIL-UPDATED-PUT.COM")
 
     def test_get_ssourl(self):
diff --git a/tests/test_cdrom.py b/tests/test_cdrom.py
new file mode 100644
index 0000000..f49c46e
--- /dev/null
+++ b/tests/test_cdrom.py
@@ -0,0 +1,69 @@
+# Copyright 2015-2017 IONOS
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import unittest
+import warnings
+
+from helpers import configuration
+from helpers.resources import resource
+
+from ionosenterprise.client import Datacenter, IonosEnterpriseService, Server
+
+
+class TestCdrom(unittest.TestCase):
+    @classmethod
+    def setUpClass(cls):
+        warnings\
+            .filterwarnings("ignore", category=ResourceWarning,
+                            message="unclosed.*<ssl.SSLSocket.*>")
+        cls.resource = resource()
+        cls.client = IonosEnterpriseService(
+            username=configuration.USERNAME,
+            password=configuration.PASSWORD,
+            headers=configuration.HEADERS)
+
+        # Create test datacenter.
+        cls.datacenter = cls.client.create_datacenter(Datacenter(**cls.resource['datacenter']))
+        cls.client.wait_for_completion(cls.datacenter)
+
+        # Create test server.
+        cls.server = cls.client.create_server(cls.datacenter['id'],
+                                              Server(**cls.resource['server']))
+        cls.client.wait_for_completion(cls.server)
+
+        # Use an image ID for CDROM
+        images = cls.client.list_images()['items']
+        images = list(filter(lambda v:
+                             v['properties']['location'] == cls.resource['datacenter']['location']
+                             and v['properties']['imageType'] != 'HDD',
+                             images))
+        cls.image_id = images[0]['id']
+        cls.attached_cdrom = cls.client.attach_cdrom(cls.datacenter['id'],
+                                                     cls.server['id'], cls.image_id)
+        cls.client.wait_for_completion(cls.attached_cdrom)
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.client.detach_cdrom(cls.datacenter['id'], cls.server['id'], cls.image_id)
+        cls.client.delete_server(cls.datacenter['id'], cls.server['id'])
+        cls.client.delete_datacenter(cls.datacenter['id'])
+
+    def test_get_attached_cdroms(self):
+        response = self.client.get_attached_cdroms(self.datacenter['id'], self.server['id'])
+        self.assertGreater(len(response['items']), 0)
+
+    def test_get_attached_cdrom(self):
+        response = self.client.get_attached_cdrom(self.datacenter['id'],
+                                                  self.server['id'], self.image_id)
+        self.assertEqual(response['id'], self.image_id)
diff --git a/tests/test_contract_resources.py b/tests/test_contract_resources.py
index 26fd473..66c0a37 100644
--- a/tests/test_contract_resources.py
+++ b/tests/test_contract_resources.py
@@ -12,16 +12,19 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
 
-from ionosenterprise.client import IonosEnterpriseService
-
 from helpers import configuration
 
+from ionosenterprise.client import IonosEnterpriseService
+
 
 class TestContractResources(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
             password=configuration.PASSWORD,
diff --git a/tests/test_datacenter.py b/tests/test_datacenter.py
index 6cf0ad0..2688066 100644
--- a/tests/test_datacenter.py
+++ b/tests/test_datacenter.py
@@ -12,21 +12,24 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
 import time
 
 from six import assertRegex
 
-from ionosenterprise.client import Datacenter, IonosEnterpriseService, Server, Volume
-from ionosenterprise.errors import ICError, ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import Datacenter, IonosEnterpriseService, Server, Volume
+from ionosenterprise.errors import ICError, ICNotFoundError
+
 
 class TestDatacenter(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
diff --git a/tests/test_errors.py b/tests/test_errors.py
index 0edfb21..56ff0cb 100644
--- a/tests/test_errors.py
+++ b/tests/test_errors.py
@@ -13,17 +13,21 @@
 # limitations under the License.
 
 import unittest
-
-from ionosenterprise.client import IonosEnterpriseService, Datacenter, Volume
-from ionosenterprise.errors import ICError, ICNotAuthorizedError, ICNotFoundError, ICValidationError
+import warnings
 
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import IonosEnterpriseService, Datacenter, Volume
+from ionosenterprise.errors import ICError, ICNotAuthorizedError,\
+    ICNotFoundError, ICValidationError
+
 
 class TestErrors(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
diff --git a/tests/test_firewall.py b/tests/test_firewall.py
index 542782c..73ca40d 100644
--- a/tests/test_firewall.py
+++ b/tests/test_firewall.py
@@ -12,20 +12,24 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
 
 from six import assertRegex
 
-from ionosenterprise.client import Datacenter, IonosEnterpriseService, Server, LAN, NIC, FirewallRule
-from ionosenterprise.errors import ICError, ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import Datacenter, IonosEnterpriseService, Server, LAN, \
+    NIC, FirewallRule
+from ionosenterprise.errors import ICError, ICNotFoundError
+
 
 class TestFirewall(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
diff --git a/tests/test_group.py b/tests/test_group.py
new file mode 100644
index 0000000..03398f0
--- /dev/null
+++ b/tests/test_group.py
@@ -0,0 +1,58 @@
+# Copyright 2015-2017 IONOS
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import warnings
+import unittest
+
+from helpers import configuration
+from helpers.resources import resource
+
+from ionosenterprise.items import Group
+from ionosenterprise.client import IonosEnterpriseService
+
+
+class TestGroup(unittest.TestCase):
+    @classmethod
+    def setUpClass(cls):
+        warnings\
+            .filterwarnings("ignore", category=ResourceWarning,
+                            message="unclosed.*<ssl.SSLSocket.*>")
+        cls.resource = resource()
+        cls.client = IonosEnterpriseService(
+            username=configuration.USERNAME,
+            password=configuration.PASSWORD,
+            headers=configuration.HEADERS)
+
+        # Create test datacenter.
+        group_object = Group(**cls.resource['group'])
+        cls.group = cls.client.create_group(group_object)
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.client.delete_group(cls.group['id'])
+
+    def test_list_groups(self):
+        response = self.client.list_groups()
+        self.assertEqual('groups', response['id'])
+        self.assertGreater(len(response['items']), 0)
+
+    def test_get_group(self):
+        response = self.client.get_group(self.group['id'])
+        self.assertEqual('group', response['type'])
+        self.assertEqual(self.group['id'], response['id'])
+
+    def test_update_group(self):
+        new_name = "NEW_NAME"
+        response = self.client.update_group(self.group['id'], name=new_name)
+        self.assertEqual(response['properties']['name'], new_name)
diff --git a/tests/test_image.py b/tests/test_image.py
index f7a1ed7..f314847 100644
--- a/tests/test_image.py
+++ b/tests/test_image.py
@@ -13,19 +13,22 @@
 # limitations under the License.
 
 import unittest
+import warnings
 
 from six import assertRegex
 
-from ionosenterprise.client import IonosEnterpriseService
-from ionosenterprise.errors import ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import IonosEnterpriseService
+from ionosenterprise.errors import ICNotFoundError
+
 
 class TestImage(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
diff --git a/tests/test_ipblock.py b/tests/test_ipblock.py
index f3e9650..5384685 100644
--- a/tests/test_ipblock.py
+++ b/tests/test_ipblock.py
@@ -12,20 +12,23 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
 
 from six import assertRegex
 
-from ionosenterprise.client import IPBlock, IonosEnterpriseService
-from ionosenterprise.errors import ICError, ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import IPBlock, IonosEnterpriseService
+from ionosenterprise.errors import ICError, ICNotFoundError
+
 
 class TestIPBlock(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
diff --git a/tests/test_k8s.py b/tests/test_k8s.py
index 326422a..c319ac9 100644
--- a/tests/test_k8s.py
+++ b/tests/test_k8s.py
@@ -12,17 +12,20 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
 
-from ionosenterprise.client import Datacenter, IonosEnterpriseService
-
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import Datacenter, IonosEnterpriseService
+
 
 class TestK8S(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
@@ -33,89 +36,81 @@ def setUpClass(cls):
         cls.datacenter = cls.client.create_datacenter(
             datacenter=Datacenter(**cls.resource['k8s_datacenter'])
         )
-        print(cls.datacenter)
 
         # Wait for datacenter to be active
         cls.client.wait_for_completion(cls.datacenter)
 
         # Create test k8s cluster
         cls.k8s_cluster = cls.client.create_k8s_cluster(**cls.resource['k8s_cluster'])
-        print(cls.k8s_cluster)
+
+        # Create test k8s cluster for delete test
+        cls.k8s_cluster_for_delete_test = cls.client.create_k8s_cluster(
+            **cls.resource['k8s_cluster'])
 
         # Wait for k8s cluster to be active
         cls.client.wait_for(
             fn_request=lambda: cls.client.list_k8s_clusters(),
             fn_check=lambda r: list(filter(
-                lambda e: e['properties']['name'] == cls.resource['k8s_cluster']['name'],
+                lambda e: e['id'] == cls.k8s_cluster['id'],
                 r['items']
               ))[0]['metadata']['state'] == 'ACTIVE',
             scaleup=10000
         )
 
+
         # get cluster config
         cls.k8s_config = cls.client.get_k8s_config(cls.k8s_cluster['id'])
-        print(cls.k8s_config)
-
-        # Create test k8s nodepool
-        cls.k8s_nodepool = cls.client.create_k8s_cluster_nodepool(
-            cls.k8s_cluster['id'],
-            datacenter_id=cls.datacenter['id'],
-            **cls.resource['k8s_nodepool']
-        )
-        print(cls.k8s_nodepool)
-
-        # Wait for k8s nodepool to be active
-        cls.client.wait_for(
-            fn_request=lambda: cls.client.list_k8s_cluster_nodepools(cls.k8s_cluster['id']),
-            fn_check=lambda r: list(filter(
-                lambda e: e['properties']['name'] == cls.resource['k8s_nodepool']['name'],
-                r['items']
-              ))[0]['metadata']['state'] == 'ACTIVE',
-            scaleup=10000
-        )
-
-    def test_get_k8s_cluster_nodepool(self):
-        lan = self.client.get_k8s_cluster_nodepool(self.k8s_cluster['id'], self.k8s_nodepool['id'])
-
-        self.assertEqual(lan['type'], 'nodepool')
-        self.assertEqual(lan['id'], self.k8s_cluster['id'])
-        self.assertEqual(lan['properties']['name'], self.resource['k8s_nodepool']['name'])
 
     @classmethod
     def tearDownClass(cls):
-        cls.client.delete_k8s_cluster_nodepool(cls.k8s_cluster['id'], cls.k8s_nodepool['id'])
-        cls.client.wait_for(
-            fn_request=lambda: cls.client.list_k8s_cluster_nodepools(cls.k8s_cluster['id']),
-            fn_check=lambda r: len(list(filter(
-                lambda e: e['properties']['name'] == cls.resource['k8s_nodepool']['name'],
-                r['items']
-              ))) == 0,
-            scaleup=10000
-        )
-
         cls.client.delete_k8s_cluster(cls.k8s_cluster['id'])
         cls.client.wait_for(
             fn_request=lambda: cls.client.list_k8s_clusters(),
             fn_check=lambda r: len(list(filter(
-                lambda e: e['properties']['name'] == cls.resource['k8s_cluster']['name'],
+                lambda e: e['id'] == cls.k8s_cluster['id'],
                 r['items']
               ))) == 0,
             scaleup=10000
         )
-
         cls.client.delete_datacenter(datacenter_id=cls.datacenter['id'])
         cls.client.wait_for(
             fn_request=lambda: cls.client.list_datacenters(),
             fn_check=lambda r: len(list(filter(
-                lambda e: e['properties']['name'] == cls.resource['k8s_datacenter']['name'],
+                lambda e: e['id'] == cls.datacenter['id'],
                 r['items']
               ))) == 0,
             scaleup=10000
         )
 
+    def test_delete_k8s_cluster(self):
+        response = self.client.delete_k8s_cluster(self.k8s_cluster_for_delete_test['id'])
+        self.assertIn('requestId', response)
+
+    def test_list_k8s_clusters(self):
+        clusters = self.client.list_k8s_clusters()
+        self.assertGreater(len(clusters['items']), 0)
+
+    def test_get_k8s_cluster(self):
+        cluster = self.client.get_k8s_cluster(self.k8s_cluster['id'])
+        self.assertEqual(cluster['id'], self.k8s_cluster['id'])
+
     def test_get_config(self):
         self.assertEqual(self.k8s_config['type'], 'kubeconfig')
-        # self.assertEqual(self.k8s_config['properties'], 'kubeconfig')
+
+    def test_update_k8s_cluster(self):
+        name = "UPDATED_NAME"
+        k8s_cluster = self.client.update_k8s_cluster(self.k8s_cluster['id'], name=name)
+        # Wait for k8s cluster to be active
+        self.client.wait_for(
+            fn_request=lambda: self.client.list_k8s_clusters(),
+            fn_check=lambda r: list(filter(
+                lambda e: e['id'] == self.k8s_cluster['id'],
+                r['items']
+            ))[0]['metadata']['state'] == 'ACTIVE',
+            scaleup=10000
+        )
+        self.assertEqual(k8s_cluster['properties']['name'], name)
+
 
 
 if __name__ == '__main__':
diff --git a/tests/test_k8s_nodepools.py b/tests/test_k8s_nodepools.py
index dc5c02e..9f449fb 100644
--- a/tests/test_k8s_nodepools.py
+++ b/tests/test_k8s_nodepools.py
@@ -12,16 +12,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
-from ionosenterprise.client import IonosEnterpriseService
-from ionosenterprise.items import Datacenter
+
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import IonosEnterpriseService
+from ionosenterprise.items import Datacenter
+
 
 class TestK8sNodepools(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
@@ -29,14 +34,15 @@ def setUpClass(cls):
             headers=configuration.HEADERS)
 
         # Create test k8s cluster
-        cls.datacenter = cls.client.create_datacenter(datacenter=Datacenter(**cls.resource['datacenter']))
+        cls.datacenter = cls.client.create_datacenter(
+            datacenter=Datacenter(**cls.resource['datacenter']))
         cls.k8s_cluster = cls.client.create_k8s_cluster(**cls.resource['k8s_cluster'])
 
         # Wait for k8s cluster to be active
         cls.client.wait_for(
             fn_request=lambda: cls.client.list_k8s_clusters(),
             fn_check=lambda r: list(filter(
-                lambda e: e['properties']['name'] == cls.resource['k8s_cluster']['name'],
+                lambda e: e['id'] == cls.k8s_cluster['id'],
                 r['items']
             ))[0]['metadata']['state'] == 'ACTIVE',
             scaleup=10000
@@ -56,26 +62,37 @@ def setUpClass(cls):
 
         # Wait for k8s cluster nodepool 1 to be active
         cls.client.wait_for(
-            fn_request=lambda: cls.client.get_k8s_cluster_nodepool(cls.k8s_cluster['id'], cls.k8s_cluster_nodepool1['id']),
+            fn_request=lambda: cls.client.get_k8s_cluster_nodepool(
+                cls.k8s_cluster['id'],
+                cls.k8s_cluster_nodepool1['id']),
             fn_check=lambda r: r['metadata']['state'] == 'ACTIVE',
             scaleup=10000
         )
 
         # Wait for k8s cluster nodepool 2 to be active
         cls.client.wait_for(
-            fn_request=lambda: cls.client.get_k8s_cluster_nodepool(cls.k8s_cluster['id'], cls.k8s_cluster_nodepool2['id']),
+            fn_request=lambda: cls.client.get_k8s_cluster_nodepool(
+                cls.k8s_cluster['id'],
+                cls.k8s_cluster_nodepool2['id']),
             fn_check=lambda r: r['metadata']['state'] == 'ACTIVE',
             scaleup=10000
         )
 
-
-
-
     @classmethod
     def tearDownClass(cls):
-        cls.client.delete_datacenter(cls.datacenter['id'])
-        cls.client.delete_k8s_cluster_nodepool(cls.k8s_cluster['id'], cls.k8s_nodepool1['id'])
+        cls.client.delete_k8s_cluster_nodepool(cls.k8s_cluster['id'],
+                                               cls.k8s_cluster_nodepool1['id'])
+        # Wait for k8s cluster nodepool to be deleted
+        cls.client.wait_for(
+            fn_request=lambda: cls.client.self.client.list_k8s_cluster_nodepools(cls.k8s_cluster['id']),
+            fn_check=lambda r: len(list(filter(
+                lambda e: e['id'] == cls.k8s_cluster_nodepool1['id'],
+                r['items']
+            ))) == 0,
+            scaleup=10000
+        )
         cls.client.delete_k8s_cluster(cls.k8s_cluster['id'])
+        cls.client.delete_datacenter(cls.datacenter['id'])
 
     def test_list_k8s_nodepools(self):
         k8s_nodepools = self.client.list_k8s_cluster_nodepools(self.k8s_cluster['id'])
@@ -83,13 +100,16 @@ def test_list_k8s_nodepools(self):
         self.assertGreater(len(k8s_nodepools['items']), 0)
 
     def test_get_k8s_nodepool(self):
-        k8s_nodepool = self.client.get_k8s_cluster_nodepool(self.k8s_cluster['id'], self.k8s_cluster_nodepool1['id'])
+        k8s_nodepool = self.client.get_k8s_cluster_nodepool(self.k8s_cluster['id'],
+                                                            self.k8s_cluster_nodepool1['id'])
         self.assertEqual(k8s_nodepool['type'], 'nodepool')
         self.assertEqual(k8s_nodepool['id'], self.k8s_cluster_nodepool1['id'])
-        self.assertEqual(k8s_nodepool['properties']['name'], self.k8s_cluster_nodepool1['name'])
+        self.assertEqual(k8s_nodepool['properties']['name'], self.k8s_cluster_nodepool1['properties']['name'])
 
     def test_delete_k8s_nodepool(self):
-        response = self.client.delete_k8s_cluster_nodepool(self.k8s_cluster['id'], self.k8s_cluster_nodepool2['id'])
+        response = self.client.delete_k8s_cluster_nodepool(self.k8s_cluster['id'],
+                                                           self.k8s_cluster_nodepool2['id'])
+        print(response)
         self.assertTrue('requestId' in response)
 
     def test_update_k8s_nodepool(self):
@@ -98,7 +118,15 @@ def test_update_k8s_nodepool(self):
             maintenance_window={
                 'dayOfTheWeek': "Monday",
                 'time': '17:00:00'},
-            auto_scaling={'minNodeCount': 2, 'maxNodeCount': 3}
+            auto_scaling={'minNodeCount': '2', 'maxNodeCount': '3'}
+        )
+        # Wait for k8s cluster nodepool 1 to be active
+        self.client.wait_for(
+            fn_request=lambda: self.client.get_k8s_cluster_nodepool(
+                self.k8s_cluster['id'],
+                self.k8s_cluster_nodepool1['id']),
+            fn_check=lambda r: r['metadata']['state'] == 'ACTIVE',
+            scaleup=10000
         )
         self.assertEqual(response['maintenance_window']['dayOfTheWeek'], 'Monday')
         self.assertEqual(response['node_count'], 2)
diff --git a/tests/test_lan.py b/tests/test_lan.py
index 0e36afb..78aed1b 100644
--- a/tests/test_lan.py
+++ b/tests/test_lan.py
@@ -12,22 +12,25 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
+import uuid
 import unittest
 
 from six import assertRegex
 
-from ionosenterprise.client import Datacenter, Server, LAN, NIC, IonosEnterpriseService, PrivateCrossConnect
-from ionosenterprise.errors import ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource
 
-import uuid
+from ionosenterprise.client import Datacenter, Server, LAN, NIC, \
+    IonosEnterpriseService, PrivateCrossConnect
+from ionosenterprise.errors import ICNotFoundError
 
 
 class TestLan(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
@@ -40,7 +43,8 @@ def setUpClass(cls):
         cls.client.wait_for_completion(cls.datacenter)
 
         # Create pcc.
-        pcc = PrivateCrossConnect(name="TEST NAME - %s" % uuid.uuid1(), description="TEST DESCRIPTION 1")
+        pcc = PrivateCrossConnect(name="TEST NAME - %s" % uuid.uuid1(),
+                                  description="TEST DESCRIPTION 1")
 
         cls.pcc = cls.client.create_pcc(pcc)
         cls.client.wait_for_completion(cls.pcc)
diff --git a/tests/test_loadbalancer.py b/tests/test_loadbalancer.py
index 4960bc5..bcc8b14 100644
--- a/tests/test_loadbalancer.py
+++ b/tests/test_loadbalancer.py
@@ -12,21 +12,25 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from time import sleep
 import unittest
+import warnings
 
+from time import sleep
 from six import assertRegex
 
-from ionosenterprise.client import Datacenter, LoadBalancer, LAN, NIC, Server, IonosEnterpriseService
-from ionosenterprise.errors import ICError, ICNotFoundError
-
-from helpers import configuration
 from helpers.resources import resource
+from helpers import configuration
+
+from ionosenterprise.client import Datacenter, LoadBalancer,\
+    LAN, NIC, Server, IonosEnterpriseService
+from ionosenterprise.errors import ICError, ICNotFoundError
 
 
 class TestLoadBalancer(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
@@ -108,10 +112,6 @@ def test_list_loadbalancers(self):
             datacenter_id=self.datacenter['id'])
 
         self.assertGreater(len(loadbalancers), 0)
-        self.assertIn(loadbalancers['items'][0]['id'],
-                      (self.loadbalancer['id'],
-                       self.loadbalancer2['id'],
-                       self.loadbalancer3['id']))
         self.assertEqual(loadbalancers['items'][0]['type'], 'loadbalancer')
 
     def test_get_loadbalancer(self):
@@ -179,7 +179,6 @@ def test_list_balanced_nics(self):
             datacenter_id=self.datacenter['id'],
             loadbalancer_id=self.loadbalancer['id']
         )
-
         self.assertGreater(len(balanced_nics['items']), 0)
         self.assertEqual(balanced_nics['items'][0]['id'], self.nic1['id'])
         self.assertEqual(balanced_nics['items'][0]['type'], 'nic')
diff --git a/tests/test_location.py b/tests/test_location.py
index 26794bf..abe9111 100644
--- a/tests/test_location.py
+++ b/tests/test_location.py
@@ -12,18 +12,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
 
-from ionosenterprise.client import IonosEnterpriseService
-from ionosenterprise.errors import ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import IonosEnterpriseService
+from ionosenterprise.errors import ICNotFoundError
+
 
 class TestLocation(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
diff --git a/tests/test_nic.py b/tests/test_nic.py
index bb55061..a990fae 100644
--- a/tests/test_nic.py
+++ b/tests/test_nic.py
@@ -12,20 +12,23 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
 
 from six import assertRegex
 
-from ionosenterprise.client import Datacenter, Server, LAN, NIC, IonosEnterpriseService
-from ionosenterprise.errors import ICError, ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import Datacenter, Server, LAN, NIC, IonosEnterpriseService
+from ionosenterprise.errors import ICError, ICNotFoundError
+
 
 class TestNic(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
diff --git a/tests/test_pcc.py b/tests/test_pcc.py
index d4ec69d..73fba7b 100644
--- a/tests/test_pcc.py
+++ b/tests/test_pcc.py
@@ -12,18 +12,20 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
-import uuid
-
-from ionosenterprise.client import IonosEnterpriseService, PrivateCrossConnect
 
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import IonosEnterpriseService, PrivateCrossConnect
+
 
 class TestPcc(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
@@ -54,7 +56,7 @@ def test_delete_pccs(self):
         self.assertTrue('requestId' in response)
 
     def test_update_pcc(self):
-        pcc = self.client.update_pcc(self.pcc1['id'], name="TEST NAME 1 - UPDATED", description="TEST DESCRIPTION 1 - UPDATED")
+        pcc = self.client.update_pcc(self.pcc1['id'], name="TEST NAME 1 - UPDATED",
+                                     description="TEST DESCRIPTION 1 - UPDATED")
         self.assertEqual(pcc['properties']['name'], "TEST NAME 1 - UPDATED")
         self.assertEqual(pcc['properties']['description'], "TEST DESCRIPTION 1 - UPDATED")
-
diff --git a/tests/test_request.py b/tests/test_request.py
index 77e1e39..4d9d441 100644
--- a/tests/test_request.py
+++ b/tests/test_request.py
@@ -12,18 +12,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
 
-from ionosenterprise.client import IonosEnterpriseService
-from ionosenterprise.errors import ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import IonosEnterpriseService
+from ionosenterprise.errors import ICNotFoundError
+
 
 class TestRequest(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
diff --git a/tests/test_s3key.py b/tests/test_s3key.py
index e8f198a..ecb6316 100644
--- a/tests/test_s3key.py
+++ b/tests/test_s3key.py
@@ -14,16 +14,19 @@
 
 import unittest
 import uuid
-
-from ionosenterprise.client import IonosEnterpriseService, User
+import warnings
 
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import IonosEnterpriseService, User
+
 
 class TestS3key(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
@@ -43,7 +46,6 @@ def setUpClass(cls):
         cls.s3key1 = cls.client.create_s3key(cls.user['id'])
         cls.s3key2 = cls.client.create_s3key(cls.user['id'])
 
-
     @classmethod
     def tearDownClass(cls):
         cls.client.delete_s3key(cls.user['id'], cls.s3key1['id'])
@@ -52,7 +54,8 @@ def tearDownClass(cls):
     def test_list_s3keys(self):
         s3keys = self.client.list_s3keys(self.user['id'])
         self.assertGreater(len(s3keys), 0)
-        self.assertEqual(len(s3keys['items']), 2) # one inactive key is created when user is created
+        # one inactive key is created when user is created
+        self.assertEqual(len(s3keys['items']), 2)
 
     def test_get_s3key(self):
         s3key = self.client.get_s3key(self.user['id'], self.s3key1['id'])
@@ -66,11 +69,10 @@ def test_delete_s3keys(self):
     def test_update_s3key(self):
         s3key = self.client.update_s3key(
             self.user['id'], self.s3key1['id'],
-            active = False
+            active=False
         )
         self.assertFalse(s3key['properties']['active'])
 
     def test_get_s3ssourl(self):
         ssoUrl = self.client.get_s3ssourl(self.user['id'])
         self.assertTrue('ssoUrl' in ssoUrl)
-
diff --git a/tests/test_server.py b/tests/test_server.py
index d38458d..016d02f 100644
--- a/tests/test_server.py
+++ b/tests/test_server.py
@@ -12,21 +12,25 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
 import time
 
 from six import assertRegex
 
-from ionosenterprise.client import Datacenter, Server, Volume, NIC, FirewallRule, IonosEnterpriseService
-from ionosenterprise.errors import ICError, ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource, check_detached_cdrom_gone
 
+from ionosenterprise.client import Datacenter, Server, Volume, \
+    NIC, FirewallRule, IonosEnterpriseService
+from ionosenterprise.errors import ICError, ICNotFoundError
+
 
 class TestServer(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
@@ -245,28 +249,6 @@ def test_get_attached_volumes(self):
 
         self.assertGreater(len(volumes['items']), 0)
         self.assertEqual(volumes['items'][0]['type'], 'volume')
-        self.assertEqual(volumes['items'][0]['id'], self.volume1['id'])
-        self.assertEqual(volumes['items'][0]['properties']['name'],
-                         self.resource['volume']['name'])
-        self.assertEqual(volumes['items'][0]['properties']['size'],
-                         self.resource['volume']['size'])
-        self.assertEqual(volumes['items'][0]['properties']['bus'],
-                         self.resource['volume']['bus'])
-        self.assertEqual(volumes['items'][0]['properties']['type'],
-                         self.resource['volume']['disk_type'])
-        self.assertEqual(volumes['items'][0]['properties']['licenceType'], 'UNKNOWN')
-        self.assertIsNone(volumes['items'][0]['properties']['image'])
-        self.assertIsNone(volumes['items'][0]['properties']['imagePassword'])
-        self.assertFalse(volumes['items'][0]['properties']['cpuHotPlug'])
-        self.assertFalse(volumes['items'][0]['properties']['cpuHotUnplug'])
-        self.assertFalse(volumes['items'][0]['properties']['ramHotPlug'])
-        self.assertFalse(volumes['items'][0]['properties']['ramHotUnplug'])
-        self.assertFalse(volumes['items'][0]['properties']['nicHotPlug'])
-        self.assertFalse(volumes['items'][0]['properties']['nicHotUnplug'])
-        self.assertFalse(volumes['items'][0]['properties']['discVirtioHotPlug'])
-        self.assertFalse(volumes['items'][0]['properties']['discVirtioHotUnplug'])
-        self.assertFalse(volumes['items'][0]['properties']['discScsiHotPlug'])
-        self.assertFalse(volumes['items'][0]['properties']['discScsiHotUnplug'])
 
     def test_get_attached_volume(self):
         volume = self.client.get_attached_volume(
@@ -274,7 +256,6 @@ def test_get_attached_volume(self):
             server_id=self.server['id'],
             volume_id=self.volume1['id'])
 
-        self.assertEqual(volume['id'], self.volume1['id'])
         self.assertEqual(volume['properties']['name'], self.resource['volume']['name'])
         self.assertEqual(volume['properties']['size'], self.resource['volume']['size'])
         self.assertEqual(volume['properties']['bus'], self.resource['volume']['bus'])
@@ -284,15 +265,11 @@ def test_get_attached_volume(self):
         self.assertIsNone(volume['properties']['image'])
         self.assertIsNone(volume['properties']['imagePassword'])
         self.assertFalse(volume['properties']['cpuHotPlug'])
-        self.assertFalse(volume['properties']['cpuHotUnplug'])
         self.assertFalse(volume['properties']['ramHotPlug'])
-        self.assertFalse(volume['properties']['ramHotUnplug'])
         self.assertFalse(volume['properties']['nicHotPlug'])
         self.assertFalse(volume['properties']['nicHotUnplug'])
         self.assertFalse(volume['properties']['discVirtioHotPlug'])
         self.assertFalse(volume['properties']['discVirtioHotUnplug'])
-        self.assertFalse(volume['properties']['discScsiHotPlug'])
-        self.assertFalse(volume['properties']['discScsiHotUnplug'])
 
     def test_attach_volume(self):
         volume = self.client.attach_volume(
@@ -305,21 +282,8 @@ def test_attach_volume(self):
         self.assertEqual(volume['properties']['name'], self.resource['volume']['name'])
         self.assertEqual(volume['properties']['size'], self.resource['volume']['size'])
         self.assertEqual(volume['properties']['type'], self.resource['volume']['disk_type'])
-        self.assertEqual(volume['properties']['licenceType'],
-                         self.resource['volume']['licence_type'])
         self.assertIsNone(volume['properties']['bus'])
         self.assertIsNone(volume['properties']['image'])
-        self.assertIsNone(volume['properties']['imagePassword'])
-        self.assertFalse(volume['properties']['cpuHotPlug'])
-        self.assertFalse(volume['properties']['cpuHotUnplug'])
-        self.assertFalse(volume['properties']['ramHotPlug'])
-        self.assertFalse(volume['properties']['ramHotUnplug'])
-        self.assertFalse(volume['properties']['nicHotPlug'])
-        self.assertFalse(volume['properties']['nicHotUnplug'])
-        self.assertFalse(volume['properties']['discVirtioHotPlug'])
-        self.assertFalse(volume['properties']['discVirtioHotUnplug'])
-        self.assertFalse(volume['properties']['discScsiHotPlug'])
-        self.assertFalse(volume['properties']['discScsiHotUnplug'])
 
         self.client.detach_volume(
             datacenter_id=self.datacenter['id'],
diff --git a/tests/test_shares.py b/tests/test_shares.py
new file mode 100644
index 0000000..2d1bb53
--- /dev/null
+++ b/tests/test_shares.py
@@ -0,0 +1,73 @@
+# Copyright 2015-2017 IONOS
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import warnings
+import unittest
+
+from helpers import configuration
+from helpers.resources import resource
+
+from ionosenterprise.client import Datacenter, Group, IonosEnterpriseService
+
+
+class TestShare(unittest.TestCase):
+    @classmethod
+    def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
+        cls.resource = resource()
+        cls.client = IonosEnterpriseService(
+            username=configuration.USERNAME,
+            password=configuration.PASSWORD,
+            headers=configuration.HEADERS)
+
+        # Create test datacenter.
+        cls.datacenter = cls.client.create_datacenter(
+            datacenter=Datacenter(**cls.resource['datacenter']))
+        cls.client.wait_for_completion(cls.datacenter)
+
+        # Create test group.
+        cls.group = cls.client.create_group(Group(**cls.resource['group']))
+        cls.client.wait_for_completion(cls.group)
+
+        cls.share_1 = cls.client.add_share(cls.group['id'], cls.datacenter['id'])
+        cls.client.wait_for_completion(cls.share_1)
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.client.delete_share(cls.share_1['id'], cls.datacenter['id'])
+        cls.client.delete_group(cls.group['id'])
+        cls.client.delete_datacenter(cls.datacenter['id'])
+
+    def test_list_shares(self):
+        response = self.client.list_shares(self.group['id'])
+        self.assertGreater(len(response['items']), 0)
+
+    def test_get_share(self):
+        response = self.client.get_share(self.group['id'], self.share_1['id'])
+        self.assertEqual(response['type'], 'share')
+
+    def test_update_share(self):
+        response = self.client.update_share(self.group['id'], self.datacenter['id'],
+                                            edit_privilege=True, share_privilege=True)
+        self.assertEqual(response['properties']['edit_privilege'], True)
+        self.assertEqual(response['properties']['share_privilege'], True)
+
+    def test_delete_share(self):
+        response = self.client.delete_share(self.group['id'], self.datacenter['id'])
+        self.assertIn('request_id', response)
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/test_snapshot.py b/tests/test_snapshot.py
index 4a43fbd..c23f6ed 100644
--- a/tests/test_snapshot.py
+++ b/tests/test_snapshot.py
@@ -12,20 +12,23 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
 
 from six import assertRegex
 
-from ionosenterprise.client import Datacenter, Volume, Snapshot, IonosEnterpriseService
-from ionosenterprise.errors import ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource
 
+from ionosenterprise.client import Datacenter, Volume, Snapshot, IonosEnterpriseService
+from ionosenterprise.errors import ICNotFoundError
+
 
 class TestSnapshot(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
@@ -95,28 +98,6 @@ def test_get_snapshot(self):
                         self.resource['snapshot']['description'])
         self.assertEqual(snapshot['properties']['location'], configuration.LOCATION)
         self.assertEqual(snapshot['properties']['size'], self.volume['properties']['size'])
-        self.assertEqual(snapshot['properties']['cpuHotPlug'],
-                         self.volume['properties']['cpuHotPlug'])
-        self.assertEqual(snapshot['properties']['cpuHotUnplug'],
-                         self.volume['properties']['cpuHotUnplug'])
-        self.assertEqual(snapshot['properties']['ramHotPlug'],
-                         self.volume['properties']['ramHotPlug'])
-        self.assertEqual(snapshot['properties']['ramHotUnplug'],
-                         self.volume['properties']['ramHotUnplug'])
-        self.assertEqual(snapshot['properties']['nicHotPlug'],
-                         self.volume['properties']['nicHotPlug'])
-        self.assertEqual(snapshot['properties']['nicHotUnplug'],
-                         self.volume['properties']['nicHotUnplug'])
-        self.assertEqual(snapshot['properties']['discVirtioHotPlug'],
-                         self.volume['properties']['discVirtioHotPlug'])
-        self.assertEqual(snapshot['properties']['discVirtioHotUnplug'],
-                         self.volume['properties']['discVirtioHotUnplug'])
-        self.assertEqual(snapshot['properties']['discScsiHotPlug'],
-                         self.volume['properties']['discScsiHotPlug'])
-        self.assertEqual(snapshot['properties']['discScsiHotUnplug'],
-                         self.volume['properties']['discScsiHotUnplug'])
-        self.assertEqual(snapshot['properties']['licenceType'],
-                         self.volume['properties']['licenceType'])
 
     def test_delete_snapshot(self):
         snapshot = self.client.delete_snapshot(snapshot_id=self.snapshot2['id'])
diff --git a/tests/test_user_management.py b/tests/test_user_management.py
index 2e9ca9d..c67677d 100644
--- a/tests/test_user_management.py
+++ b/tests/test_user_management.py
@@ -13,20 +13,23 @@
 # limitations under the License.
 
 import unittest
-from random import randint
+import warnings
 
+from random import randint
 from six import assertRegex
 
-from ionosenterprise.client import Datacenter, IPBlock, User, Group, Volume, IonosEnterpriseService
-from ionosenterprise.errors import ICError, ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource, find_image
 
+from ionosenterprise.client import Datacenter, IPBlock, User, Group, Volume, IonosEnterpriseService
+from ionosenterprise.errors import ICError, ICNotFoundError
+
 
 class TestUserManagement(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,
@@ -331,9 +334,7 @@ def test_list_datacenter_resources(self):
     def test_list_image_resources(self):
         resources = self.client.list_resources(resource_type='image')
 
-        self.assertGreater(len(resources['items']), 0)
         self.assertEqual(resources['id'], 'resources')
-        self.assertEqual(resources['items'][0]['type'], 'image')
 
     def test_list_snapshot_resources(self):
         resources = self.client.list_resources(resource_type='snapshot')
diff --git a/tests/test_volume.py b/tests/test_volume.py
index 8962ee9..3869acc 100644
--- a/tests/test_volume.py
+++ b/tests/test_volume.py
@@ -12,20 +12,23 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import warnings
 import unittest
 
 from six import assertRegex
 
-from ionosenterprise.client import Datacenter, IonosEnterpriseService, Volume
-from ionosenterprise.errors import ICError, ICNotFoundError
-
 from helpers import configuration
 from helpers.resources import resource, find_image
 
+from ionosenterprise.client import Datacenter, IonosEnterpriseService, Volume
+from ionosenterprise.errors import ICError, ICNotFoundError
+
 
 class TestVolume(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
+        warnings.filterwarnings("ignore", category=ResourceWarning,
+                                message="unclosed.*<ssl.SSLSocket.*>")
         cls.resource = resource()
         cls.client = IonosEnterpriseService(
             username=configuration.USERNAME,