diff --git a/.travis.yml b/.travis.yml
index 1e92e42e..a1d0aacc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,8 +4,10 @@ python:
     - "3.6"
 
 env:
-    # Set a dummy secret key 
+    # Set a dummy secret key
     - DJANGO_SECRET_KEY=0
 # install dependencies
 install: "pip install -r requirements.txt"
-script: python manage.py test
+script:
+- flake8
+- python manage.py test
diff --git a/alplora/admin.py b/alplora/admin.py
index 8c38f3f3..4185d360 100644
--- a/alplora/admin.py
+++ b/alplora/admin.py
@@ -1,3 +1,3 @@
-from django.contrib import admin
+# from django.contrib import admin
 
 # Register your models here.
diff --git a/alplora/models.py b/alplora/models.py
index 71a83623..0b4331b3 100644
--- a/alplora/models.py
+++ b/alplora/models.py
@@ -1,3 +1,3 @@
-from django.db import models
+# from django.db import models
 
 # Create your models here.
diff --git a/alplora/tests.py b/alplora/tests.py
index 7ce503c2..a79ca8be 100644
--- a/alplora/tests.py
+++ b/alplora/tests.py
@@ -1,3 +1,3 @@
-from django.test import TestCase
+# from django.test import TestCase
 
 # Create your tests here.
diff --git a/alplora/urls.py b/alplora/urls.py
index f792f13f..071bb2ac 100644
--- a/alplora/urls.py
+++ b/alplora/urls.py
@@ -7,6 +7,6 @@ urlpatterns = [
     url(r'^/?$', IndexView.as_view(), name='index'),
     url(r'/login/', LoginView.as_view(), name='login'),
     url(r'/contact', ContactView.as_view(), name='contact'),
-#     url(r'^/beta-program/?$', BetaProgramView.as_view(), name='beta'),
-#     url(r'^/landing/?$', LandingProgramView.as_view(), name='landing'),
+    #     url(r'^/beta-program/?$', BetaProgramView.as_view(), name='beta'),
+    #     url(r'^/landing/?$', LandingProgramView.as_view(), name='landing'),
 ]
diff --git a/alplora/views.py b/alplora/views.py
index ba249887..0a10b4e0 100644
--- a/alplora/views.py
+++ b/alplora/views.py
@@ -4,11 +4,11 @@ from django.utils.translation import get_language, get_language_info
 from django.utils.translation import ugettext_lazy as _
 from django.views.generic.edit import FormView
 from django.contrib import messages
-from django.core.urlresolvers import reverse_lazy, reverse
 from django.shortcuts import render
 
 from utils.forms import ContactUsForm
 
+
 class IndexView(TemplateView):
     template_name = "alplora/index.html"
 
@@ -18,6 +18,7 @@ class IndexView(TemplateView):
         context.update(languages)
         return context
 
+
 class ContactView(FormView):
     template_name = 'alplora/contact.html'
     form_class = ContactUsForm
@@ -33,7 +34,8 @@ class ContactView(FormView):
         form.save()
         form.send_email(email_to='info@alplora.ch')
         messages.add_message(self.request, messages.SUCCESS, self.success_message)
-        return render(self.request, 'alplora/contact_success.html', {}) 
+        return render(self.request, 'alplora/contact_success.html', {})
+
 
 class LoginView(TemplateView):
     template_name = "alplora/login.html"
diff --git a/datacenterlight/forms.py b/datacenterlight/forms.py
index 90340e8d..33d95c29 100644
--- a/datacenterlight/forms.py
+++ b/datacenterlight/forms.py
@@ -1,6 +1,6 @@
 from django import forms
 
-from .models import BetaAccess, BetaAccessVM
+from .models import BetaAccess
 
 
 class BetaAccessForm(forms.ModelForm):
diff --git a/datacenterlight/templatetags/custom_tags.py b/datacenterlight/templatetags/custom_tags.py
index 915e68fe..edbda197 100644
--- a/datacenterlight/templatetags/custom_tags.py
+++ b/datacenterlight/templatetags/custom_tags.py
@@ -5,20 +5,18 @@ from django.utils.translation import activate, get_language
 register = template.Library()
 
 
-
 @register.simple_tag(takes_context=True)
 def change_lang(context, lang=None, *args, **kwargs):
 
     path = context['request'].path
-    url_parts = resolve( path )
+    url_parts = resolve(path)
 
     url = path
     cur_language = get_language()
     try:
         activate(lang)
-        url = reverse( url_parts.view_name, kwargs=url_parts.kwargs )
+        url = reverse(url_parts.view_name, kwargs=url_parts.kwargs)
     finally:
         activate(cur_language)
 
-
-    return "%s" % url
\ No newline at end of file
+    return "%s" % url
diff --git a/datacenterlight/tests.py b/datacenterlight/tests.py
index 7ce503c2..a79ca8be 100644
--- a/datacenterlight/tests.py
+++ b/datacenterlight/tests.py
@@ -1,3 +1,3 @@
-from django.test import TestCase
+# from django.test import TestCase
 
 # Create your tests here.
diff --git a/datacenterlight/views.py b/datacenterlight/views.py
index 427f8c70..75b05d72 100644
--- a/datacenterlight/views.py
+++ b/datacenterlight/views.py
@@ -3,7 +3,7 @@ from django.http import HttpResponseRedirect
 from .forms import BetaAccessForm
 from .models import BetaAccess, BetaAccessVMType, BetaAccessVM
 from django.contrib import messages
-from django.core.urlresolvers import reverse_lazy, reverse
+from django.core.urlresolvers import reverse
 from django.core.mail import EmailMessage
 from utils.mailer import BaseEmail
 from django.shortcuts import render
@@ -14,12 +14,15 @@ from django.core.exceptions import ValidationError
 from opennebula_api.models import OpenNebulaManager
 from opennebula_api.serializers import VirtualMachineTemplateSerializer
 
+
 class LandingProgramView(TemplateView):
     template_name = "datacenterlight/landing.html"
 
+
 class SuccessView(TemplateView):
     template_name = "datacenterlight/success.html"
 
+
 class PricingView(TemplateView):
     template_name = "datacenterlight/pricing.html"
 
@@ -32,17 +35,16 @@ class PricingView(TemplateView):
                 'templates': VirtualMachineTemplateSerializer(templates, many=True).data,
             }
         except:
-            messages.error( request,
-                'We have a temporary problem to connect to our backend. \
-                Please try again in a few minutes'
-                )
+            messages.error(request,
+                           'We have a temporary problem to connect to our backend. \
+                           Please try again in a few minutes'
+                           )
             context = {
-                'error' : 'connection'
+                'error': 'connection'
                     }
 
         return render(request, self.template_name, context)
 
-
     def post(self, request):
 
         cores = request.POST.get('cpu')
@@ -61,7 +63,7 @@ class PricingView(TemplateView):
             request.session['next'] = reverse('hosting:payment')
 
         request.session['specs'] = {
-            'cpu':cores,
+            'cpu': cores,
             'memory': memory,
             'disk_size': storage,
             'price': price,
@@ -111,6 +113,7 @@ class BetaAccessView(FormView):
         messages.add_message(self.request, messages.SUCCESS, self.success_message)
         return render(self.request, 'datacenterlight/beta_success.html', {})
 
+
 class BetaProgramView(CreateView):
     template_name = "datacenterlight/beta.html"
     model = BetaAccessVM
@@ -169,7 +172,7 @@ class IndexView(CreateView):
     form_class = BetaAccessForm
     success_url = "/datacenterlight#requestform"
     success_message = "Thank you, we will contact you as soon as possible"
-    
+
     def get(self, request, *args, **kwargs):
         try:
             manager = OpenNebulaManager()
@@ -178,12 +181,12 @@ class IndexView(CreateView):
                 'templates': VirtualMachineTemplateSerializer(templates, many=True).data,
             }
         except:
-            messages.error( request,
-                'We have a temporary problem to connect to our backend. \
-                Please try again in a few minutes'
-                )
+            messages.error(request,
+                           'We have a temporary problem to connect to our backend. \
+                           Please try again in a few minutes'
+                           )
             context = {
-                'error' : 'connection'
+                'error': 'connection'
                     }
         return render(request, self.template_name, context)
 
@@ -196,7 +199,7 @@ class IndexView(CreateView):
         manager = OpenNebulaManager()
         template = manager.get_template(template_id)
         template_data = VirtualMachineTemplateSerializer(template).data
-        
+
         name = request.POST.get('name')
         email = request.POST.get('email')
         name_field = forms.CharField()
@@ -207,7 +210,7 @@ class IndexView(CreateView):
             messages.add_message(self.request, messages.ERROR, '%(value) is not a proper name.'.format(name))
             return HttpResponseRedirect(reverse('datacenterlight:index'))
 
-        try:    
+        try:
             email = email_field.clean(email)
         except ValidationError as err:
             messages.add_message(self.request, messages.ERROR, '%(value) is not a proper email.'.format(email))
@@ -230,7 +233,7 @@ class IndexView(CreateView):
             'reply_to': [context['email']],
         }
         email = EmailMessage(**email_data)
-        email.send()        
+        email.send()
 
         return HttpResponseRedirect(reverse('datacenterlight:order_success'))
 
diff --git a/digitalglarus/admin.py b/digitalglarus/admin.py
index 4f8bdcfa..c887e8d2 100644
--- a/digitalglarus/admin.py
+++ b/digitalglarus/admin.py
@@ -1,5 +1,5 @@
 from django.contrib import admin
-from .models import Supporter, DGGallery, DGPicture, Booking, BookingPrice,\
+from .models import DGGallery, DGPicture, Booking, BookingPrice,\
     MembershipOrder, Membership, MembershipType, BookingOrder, BookingCancellation
 
 from django.core.urlresolvers import reverse
diff --git a/digitalglarus/cms_plugins.py b/digitalglarus/cms_plugins.py
index e58dffb9..7c61bea6 100644
--- a/digitalglarus/cms_plugins.py
+++ b/digitalglarus/cms_plugins.py
@@ -1,9 +1,9 @@
 from cms.plugin_base import CMSPluginBase
 from cms.plugin_pool import plugin_pool
-from cms.wizards import wizard_base
 from .models import DGGalleryPlugin, DGSupportersPlugin, Supporter
 from django.utils.translation import ugettext as _
-#
+
+
 class CMSGalleryPlugin(CMSPluginBase):
     model = DGGalleryPlugin
     name = _("Digital Glarus Gallery")
@@ -11,12 +11,13 @@ class CMSGalleryPlugin(CMSPluginBase):
 
     def render(self, context, instance, placeholder):
         context.update({
-            'gallery':instance.dgGallery,
-            'object':instance,
-            'placeholder':placeholder
+            'gallery': instance.dgGallery,
+            'object': instance,
+            'placeholder': placeholder
         })
         return context
 
+
 class CMSSupportersPlugin(CMSPluginBase):
     name = _("Digital Glarus Supporters")
     model = DGSupportersPlugin
@@ -26,11 +27,10 @@ class CMSSupportersPlugin(CMSPluginBase):
         context.update({
             'supporters': Supporter.objects.all().order_by('name'),
             'object': instance,
-            'placeholder':placeholder
+            'placeholder': placeholder
         })
         return context
-#
-#
-#
+
+
 plugin_pool.register_plugin(CMSGalleryPlugin)
 plugin_pool.register_plugin(CMSSupportersPlugin)
diff --git a/digitalglarus/forms.py b/digitalglarus/forms.py
index 90a1024e..a0e685f8 100644
--- a/digitalglarus/forms.py
+++ b/digitalglarus/forms.py
@@ -1,7 +1,6 @@
 from django import forms
 from django.db.models import Q
 from django.utils.translation import ugettext_lazy as _
-from datetime import datetime
 
 
 from utils.models import BillingAddress
@@ -92,7 +91,7 @@ class CancelBookingForm(forms.ModelForm):
 class BookingDateForm(forms.Form):
     start_date = forms.DateField(required=False,
                                  widget=forms.TextInput(attrs={'id': 'booking-date-1',
-                                                                     'value': 'Select your date'}))
+                                                               'value': 'Select your date'}))
     end_date = forms.DateField(required=False,
                                widget=forms.TextInput(attrs={'id': 'booking-date-2'}))
 
diff --git a/digitalglarus/management/commands/list.py b/digitalglarus/management/commands/list.py
index e2d6b1b3..653966e8 100644
--- a/digitalglarus/management/commands/list.py
+++ b/digitalglarus/management/commands/list.py
@@ -3,6 +3,7 @@ from django.conf import settings
 import stripe
 stripe.api_key = settings.STRIPE_API_PRIVATE_KEY
 
+
 class Command(BaseCommand):
     help = "Record payment plans for Digital Glarus on stripe"
 
@@ -10,5 +11,3 @@ class Command(BaseCommand):
         print("Available plans:")
         for plan in stripe.Plan.all():
             print(plan)
-
-
diff --git a/digitalglarus/management/commands/plans.py b/digitalglarus/management/commands/plans.py
index 2104cc1d..9e6dbc01 100644
--- a/digitalglarus/management/commands/plans.py
+++ b/digitalglarus/management/commands/plans.py
@@ -11,11 +11,11 @@ PAYMENT_PLANS = [
                      'id': "spontaneus"
                      }),
     ('committed', {
-        'amount':36000,
-        'interval':'year',
-        'name':'The Committed',
-        'currency':'chf',
-        'id':'committed'
+        'amount': 36000,
+        'interval': 'year',
+        'name': 'The Committed',
+        'currency': 'chf',
+        'id': 'committed'
     })
 ]
 
@@ -26,8 +26,6 @@ class Command(BaseCommand):
     def handle(self, *args, **options):
         for payment_plan, data in PAYMENT_PLANS:
             try:
-                res = stripe.Plan.create(**data)
+                stripe.Plan.create(**data)
             except stripe.InvalidRequestError as e:
                 print(e)
-
-
diff --git a/digitalglarus/models.py b/digitalglarus/models.py
index 2e12e265..16d6b639 100644
--- a/digitalglarus/models.py
+++ b/digitalglarus/models.py
@@ -105,7 +105,7 @@ class Membership(models.Model):
         has_order_current_month = Q(membershiporder__customer__user=user,
                                     membershiporder__created_at__month=datetime.today().month)
         # has_order_past_month = Q(membershiporder__customer__user=user,
-                                 # membershiporder__created_at__month=past_month)
+        #  membershiporder__created_at__month=past_month)
         active_membership = Q(active=True)
         # return cls.objects.filter(has_order_past_month | has_order_current_month).\
         return cls.objects.filter(has_order_current_month).\
@@ -316,17 +316,20 @@ class DGGallery(models.Model):
 
     class Meta:
         verbose_name_plural = 'dgGallery'
-#
+
+
 class DGPicture(models.Model):
     gallery = models.ForeignKey(DGGallery)
-    image =  FilerImageField(related_name='dg_gallery')
+    image = FilerImageField(related_name='dg_gallery')
     description = models.CharField(max_length=60)
 
     def __str__(self):
         return "%s" % (self.image.name)
 
+
 class DGGalleryPlugin(CMSPlugin):
     dgGallery = models.ForeignKey(DGGallery)
 
+
 class DGSupportersPlugin(CMSPlugin):
     pass
diff --git a/digitalglarus/test_views.py b/digitalglarus/test_views.py
index 63b2cc06..f3e427ba 100644
--- a/digitalglarus/test_views.py
+++ b/digitalglarus/test_views.py
@@ -1,4 +1,3 @@
-import json
 from model_mommy import mommy
 from unittest import mock
 
@@ -150,7 +149,7 @@ class MembershipPaymentViewTest(BaseTestCase):
         # self.assertTrue(HostingOrder.objects.filter(customer=stripe_customer).exists())
         # hosting_order = HostingOrder.objects.filter(customer=stripe_customer)[0]
         # vm_plan = {
-            # 'cores': hosting_order.vm_plan.cores,
+        #  'cores': hosting_order.vm_plan.cores,
         #     'memory': hosting_order.vm_plan.memory,
         #     'disk_size': hosting_order.vm_plan.disk_size,
         #     'price': hosting_order.vm_plan.price,
diff --git a/digitalglarus/views.py b/digitalglarus/views.py
index a33775c9..87c1ccd2 100644
--- a/digitalglarus/views.py
+++ b/digitalglarus/views.py
@@ -720,7 +720,9 @@ class ContactView(FormView):
         messages.add_message(self.request, messages.SUCCESS, self.success_message)
         return super(ContactView, self).form_valid(form)
 
-############## OLD VIEWS 
+
+# OLD VIEWS
+
 
 def blog(request):
     tags = ["digitalglarus"]
@@ -751,6 +753,3 @@ def supporters(request):
         'supporters': Supporter.objects.order_by('name')
     }
     return render(request, 'supporters.html', context)
-
-
-
diff --git a/dynamicweb/settings-test/__init__.py b/dynamicweb/settings-test/__init__.py
index 22ef8531..1a8babdd 100644
--- a/dynamicweb/settings-test/__init__.py
+++ b/dynamicweb/settings-test/__init__.py
@@ -9,12 +9,15 @@ from django.utils.translation import ugettext_lazy as _
 # dotenv
 import dotenv
 
-gettext = lambda s: s
+
+def gettext(s):
+    return s
 
 
 def env(env_name):
     return os.environ.get(env_name)
 
+
 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 
 PROJECT_DIR = os.path.abspath(
@@ -83,7 +86,7 @@ INSTALLED_APPS = (
     'django_select2',
     'meta',
     'meta_mixin',
-#    'admin_enhancer',
+    # 'admin_enhancer',
     'djangocms_blog',
     'bootstrap3',
     'compressor',
@@ -433,5 +436,5 @@ MANAGERS = ADMINS
 
 ALLOWED_HOSTS = [
     ".ungleich.ch",
-    "digital.glarus.ungleich.ch" ,
+    "digital.glarus.ungleich.ch",
 ]
diff --git a/dynamicweb/settings/__init__.py b/dynamicweb/settings/__init__.py
index 9b5ed21c..3a9877ad 100644
--- a/dynamicweb/settings/__init__.py
+++ b/dynamicweb/settings/__init__.py
@@ -1 +1 @@
-from .base import *
+# from .base import *
diff --git a/dynamicweb/settings/base.py b/dynamicweb/settings/base.py
index ec240691..33910930 100644
--- a/dynamicweb/settings/base.py
+++ b/dynamicweb/settings/base.py
@@ -11,7 +11,9 @@ from django.utils.translation import ugettext_lazy as _
 # dotenv
 import dotenv
 
-gettext = lambda s: s
+
+def gettext(s):
+    return s
 
 
 def env(env_name):
@@ -186,7 +188,11 @@ CMS_TEMPLATES = (
 DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.postgresql_psycopg2',
-        'NAME': 'app'
+        'NAME': 'app',
+        'HOST': 'localhost',
+        'USER': 'ubuntu',
+        'PASSWORD': 'Qwerty123',
+
     }
 }
 
@@ -462,17 +468,20 @@ STRIPE_DESCRIPTION_ON_PAYMENT = "Payment for ungleich GmbH services"
 
 # EMAIL MESSAGES
 REGISTRATION_MESSAGE = {'subject': "Validation mail",
-                        'message': 'Thank You for registering for account on Digital Glarus.\nPlease verify Your account under following link http://{host}/en-us/digitalglarus/login/validate/{slug}',
+                        'message': 'Thank You for registering for account on Digital Glarus.\n'
+                                   'Please verify Your account under following link '
+                                   'http://{host}/en-us/digitalglarus/login/validate/{slug}',
                         }
 STRIPE_API_PRIVATE_KEY = env('STRIPE_API_PRIVATE_KEY')
 STRIPE_API_PUBLIC_KEY = env('STRIPE_API_PUBLIC_KEY')
 
 DEBUG = True
 
-if DEBUG:
-    from .local import *
-else:
-    from .prod import *
+# not used
+# if DEBUG:
+#     from .local import *
+# # else:
+# #     from .prod import *
 
 
 ANONYMOUS_USER_NAME = 'anonymous@ungleich.ch'
diff --git a/dynamicweb/settings/local.py b/dynamicweb/settings/local.py
index 799df594..1b03f3fe 100644
--- a/dynamicweb/settings/local.py
+++ b/dynamicweb/settings/local.py
@@ -1,5 +1,7 @@
-from .base import *
-REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='dynamicweb-development.ungleich.ch',slug='{slug}')
+from .base import * # flake8: noqa
+
+REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='dynamicweb-development.ungleich.ch',
+                                                                         slug='{slug}')
 ALLOWED_HOSTS = [
     "*"
     ]
@@ -13,9 +15,9 @@ CACHES = {
     }
 }
 
-MIDDLEWARE_CLASSES+=("debug_toolbar.middleware.DebugToolbarMiddleware",)
+MIDDLEWARE_CLASSES += ("debug_toolbar.middleware.DebugToolbarMiddleware",)
 
-INSTALLED_APPS+=(
+INSTALLED_APPS += (
     'django_extensions',
     'debug_toolbar'
     )
diff --git a/dynamicweb/settings/prod.py b/dynamicweb/settings/prod.py
index 4f96593f..e449e3cb 100644
--- a/dynamicweb/settings/prod.py
+++ b/dynamicweb/settings/prod.py
@@ -1,15 +1,16 @@
-from .base import *
+from .base import * # flake8: noqa
 
 # List of people that get admin messages
-ADMINS = ( (x, x + "@ungleich.ch") for x in ["web-team"] )
+ADMINS = ((x, x + "@ungleich.ch") for x in ["web-team"])
 
-DEBUG=False
+DEBUG = False
 
 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
 
-#MANAGERS = ADMINS
+# MANAGERS = ADMINS
 
-REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='digitalglarus.ungleich.ch',slug='{slug}')
+REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='digitalglarus.ungleich.ch',
+                                                                         slug='{slug}')  # flake8: noqa
 
 ALLOWED_HOSTS = [
     ".ungleich.ch",
diff --git a/dynamicweb/urls.py b/dynamicweb/urls.py
index 0b1a0844..5ae11689 100644
--- a/dynamicweb/urls.py
+++ b/dynamicweb/urls.py
@@ -12,30 +12,31 @@ from django.views.generic import RedirectView
 from django.core.urlresolvers import reverse_lazy
 import debug_toolbar
 
-urlpatterns = [   url(r'^index.html$', LandingView.as_view()),
-                  url(r'^hosting/', include('hosting.urls', namespace="hosting")),
-                  url(r'^open_api/', include('opennebula_api.urls',
-                      namespace='opennebula_api')),
-                  url(r'^railshosting/', RailsHostingView.as_view(), name="rails.hosting"),
-                  url(r'^nodehosting/', NodeJSHostingView.as_view(), name="node.hosting"),
-                  url(r'^djangohosting/', DjangoHostingView.as_view(), name="django.hosting"),
-                  url(r'^nosystemd/', include('nosystemd.urls', namespace="nosystemd")),
-                  url(r'^taggit_autosuggest/', include('taggit_autosuggest.urls')),
-                  url(r'^jsi18n/(?P<packages>\S+?)/$',
-                      'django.views.i18n.javascript_catalog'),
-              ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+urlpatterns = [url(r'^index.html$', LandingView.as_view()),
+               url(r'^hosting/', include('hosting.urls', namespace="hosting")),
+               url(r'^open_api/', include('opennebula_api.urls',
+                                          namespace='opennebula_api')),
+               url(r'^railshosting/', RailsHostingView.as_view(), name="rails.hosting"),
+               url(r'^nodehosting/', NodeJSHostingView.as_view(), name="node.hosting"),
+               url(r'^djangohosting/', DjangoHostingView.as_view(), name="django.hosting"),
+               url(r'^nosystemd/', include('nosystemd.urls', namespace="nosystemd")),
+               url(r'^taggit_autosuggest/', include('taggit_autosuggest.urls')),
+               url(r'^jsi18n/(?P<packages>\S+?)/$',
+                   'django.views.i18n.javascript_catalog'),
+               ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
 
 # note the django CMS URLs included via i18n_patterns
 urlpatterns += i18n_patterns('',
                              url(r'^/?$', LandingView.as_view()),
                              url(r'^admin/', include(admin.site.urls)),
                              url(r'^datacenterlight', include('datacenterlight.urls', namespace="datacenterlight")),
-                             url(r'^hosting/', RedirectView.as_view(url=reverse_lazy('hosting:login')), name='redirect_hosting_login'),
+                             url(r'^hosting/', RedirectView.as_view(
+                                 url=reverse_lazy('hosting:login')), name='redirect_hosting_login'),
                              url(r'^alplora', include('alplora.urls', namespace="alplora")),
                              url(r'^membership/', include(membership_urls)),
                              url(r'^digitalglarus/', include('digitalglarus.urls',
                                                              namespace="digitalglarus")),
-                             #url(r'^blog/', include('ungleich.urls', namespace='ungleich')),
+                             # url(r'^blog/', include('ungleich.urls', namespace='ungleich')),
                              url(r'^',
                                  include('ungleich_page.urls', namespace='ungleich_page'),
                                  name='ungleich_page'),
@@ -50,4 +51,4 @@ if settings.DEBUG:
                                     'document_root': settings.MEDIA_ROOT,
                                 }),
                             )
-    urlpatterns += patterns('',url(r'^__debug__/', include(debug_toolbar.urls)))
+    urlpatterns += patterns('', url(r'^__debug__/', include(debug_toolbar.urls)))
diff --git a/dynamicweb/wsgi.py b/dynamicweb/wsgi.py
index 69d05eb9..8b8d9981 100644
--- a/dynamicweb/wsgi.py
+++ b/dynamicweb/wsgi.py
@@ -7,13 +7,13 @@ For more information on this file, see
 https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
 """
 
-import os,sys
-#sys.path.append(os.path.dirname(__file__))
+import os
+import sys
+from django.core.wsgi import get_wsgi_application
+
+# sys.path.append(os.path.dirname(__file__))
 sys.path.append('/home/app/pyvenv/lib/python3.4/site-packages/')
 
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dynamicweb.settings.prod")
 
-from django.core.wsgi import get_wsgi_application
-
-
 application = get_wsgi_application()
diff --git a/hosting/admin.py b/hosting/admin.py
index c38fa8d0..6ebe461d 100644
--- a/hosting/admin.py
+++ b/hosting/admin.py
@@ -1,8 +1,4 @@
 from django.contrib import admin
-from django.utils.html import format_html
-from django.core.urlresolvers import reverse
-
-from utils.mailer import BaseEmail
 
 from .models import HostingOrder, HostingBill, HostingPlan
 
diff --git a/hosting/forms.py b/hosting/forms.py
index d9a3b985..505ecbce 100644
--- a/hosting/forms.py
+++ b/hosting/forms.py
@@ -1,14 +1,11 @@
-import random
-import string
 from django import forms
 from membership.models import CustomUser
 from django.contrib.auth import authenticate
 
 from django.utils.translation import ugettext_lazy as _
 
-from utils.stripe_utils import StripeUtils
+from .models import UserHostingKey
 
-from .models import HostingOrder, UserHostingKey
 
 class HostingUserLoginForm(forms.Form):
 
@@ -62,9 +59,9 @@ class HostingUserSignupForm(forms.ModelForm):
 class UserHostingKeyForm(forms.ModelForm):
     private_key = forms.CharField(widget=forms.HiddenInput(), required=False)
     public_key = forms.CharField(widget=forms.Textarea(), required=False,
-            help_text=_('Paste here your public key'))
+                                 help_text=_('Paste here your public key'))
     user = forms.models.ModelChoiceField(queryset=CustomUser.objects.all(),
-            required=False, widget=forms.HiddenInput())
+                                         required=False, widget=forms.HiddenInput())
     name = forms.CharField(required=True)
 
     def __init__(self, *args, **kwargs):
diff --git a/hosting/management/commands/create_vm_types.py b/hosting/management/commands/create_vm_types.py
index f92cc3a1..0b5f8df5 100644
--- a/hosting/management/commands/create_vm_types.py
+++ b/hosting/management/commands/create_vm_types.py
@@ -1,4 +1,4 @@
-from django.core.management.base import BaseCommand, CommandError
+from django.core.management.base import BaseCommand
 from hosting.models import VirtualMachineType
 
 
@@ -55,15 +55,15 @@ class Command(BaseCommand):
             },
         ]
 
-
-        hetzner = {
-            'base_price': 10,
-            'core_price': 5,
-            'memory_price': 2,
-            'disk_size_price': 0.6,
-            'description': 'VM auf einzelner HW, Raid1, kein HA',
-            'location': 'DE'
-        }
+        # not used
+        #  hetzner = {
+        #     'base_price': 10,
+        #     'core_price': 5,
+        #     'memory_price': 2,
+        #     'disk_size_price': 0.6,
+        #     'description': 'VM auf einzelner HW, Raid1, kein HA',
+        #     'location': 'DE'
+        # }
 
         # return {
         #     # 'hetzner_nug': {
diff --git a/hosting/models.py b/hosting/models.py
index 25f852f1..bb53589d 100644
--- a/hosting/models.py
+++ b/hosting/models.py
@@ -1,22 +1,16 @@
 import os
-import socket
 import logging
 
 
-import oca
 from django.db import models
-from django.utils.translation import ugettext_lazy as _
 from django.utils.functional import cached_property
 
-from django.conf import settings
 
 from Crypto.PublicKey import RSA
-from stored_messages.settings import stored_messages_settings
 
 from membership.models import StripeCustomer, CustomUser
 from utils.models import BillingAddress
 from utils.mixins import AssignPermissionsMixin
-from .managers import VMPlansManager
 
 logger = logging.getLogger(__name__)
 
@@ -29,7 +23,7 @@ class HostingPlan(models.Model):
     def serialize(self):
         return {
             'id': self.id,
-            'cpu':self.cpu_cores,
+            'cpu': self.cpu_cores,
             'memory': self.memory,
             'disk_size': self.disk_size,
             'price': self.price(),
@@ -46,6 +40,7 @@ class HostingPlan(models.Model):
         price += self.memory * 2
         return price
 
+
 class HostingOrder(AssignPermissionsMixin, models.Model):
 
     ORDER_APPROVED_STATUS = 'Approved'
@@ -128,6 +123,7 @@ class UserHostingKey(models.Model):
         # self.save(update_fields=['public_key'])
         return private_key, public_key
 
+
 class HostingBill(AssignPermissionsMixin, models.Model):
     customer = models.ForeignKey(StripeCustomer)
     billing_address = models.ForeignKey(BillingAddress)
@@ -147,4 +143,3 @@ class HostingBill(AssignPermissionsMixin, models.Model):
     def create(cls, customer=None, billing_address=None):
         instance = cls.objects.create(customer=customer, billing_address=billing_address)
         return instance
-
diff --git a/hosting/templates/hosting/payment.html b/hosting/templates/hosting/payment.html
index e41f57d7..91d209fb 100644
--- a/hosting/templates/hosting/payment.html
+++ b/hosting/templates/hosting/payment.html
@@ -1,6 +1,6 @@
 {% extends "hosting/base_short.html" %}
 {% load staticfiles bootstrap3 i18n %}
-{% block content %} 
+{% block content %}
 <!-- Credit card form -->
 <div>
 	<div class="payment-container">
@@ -29,7 +29,7 @@
 						</div>
 					</div>
 				</form>
-				
+
 			</div>
 			<div class="col-xs-12 col-md-4  billing">
 				<h3><b>{%trans "Billing Address"%}</b></h3>
@@ -56,7 +56,7 @@
                         <h5 class="membership-lead">Last 4: *****{{credit_card_data.last4}}</h5>
                         <h5 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h5>
                         <input type="hidden" name="credit_card_needed" value="false"/>
-                      </form>  
+                      </form>
                       <div class="col-xs-6">
                         <button id="payment_button_with_creditcard" class="btn btn-success btn-sm btn-block" type="submit">
 							 {% trans "Submit Payment" %}
@@ -86,7 +86,7 @@
 											placeholder="{%trans "Valid Card Number"%}" required autofocus data-stripe="number" />
 	                                        <span class="input-group-addon"><i class="fa fa-credit-card"></i></span>
 	                                    </div>
-	                                </div>                            
+	                                </div>
 	                            </div>
 	                        </div>
 	                        <div class="row">
@@ -128,7 +128,7 @@
 	                        </div>
 	                        {% endif %}
 
-                           
+
 	                    </form>
                     {% endif %}
 
@@ -143,7 +143,7 @@
 <!-- stripe key data -->
 {% if stripe_key %}
 {% get_current_language as LANGUAGE_CODE %}
-<script type="text/javascript"> 
+<script type="text/javascript">
 
 
      (function () {
@@ -154,7 +154,7 @@
 {%endif%}
 
 {% if credit_card_data.last4 and credit_card_data.cc_brand %}
-<script type="text/javascript"> 
+<script type="text/javascript">
      (function () {window.hasCreditcard = true;})();
 </script>
 
diff --git a/hosting/test_views.py b/hosting/test_views.py
index c3777840..aa9a9ace 100644
--- a/hosting/test_views.py
+++ b/hosting/test_views.py
@@ -4,7 +4,7 @@ from django.test import TestCase
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import resolve
 from django.contrib.auth.tokens import default_token_generator
-from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
+from django.utils.http import urlsafe_base64_encode
 from django.utils.encoding import force_bytes
 
 
diff --git a/hosting/tests.py b/hosting/tests.py
index d9b5da5b..70e47dd2 100644
--- a/hosting/tests.py
+++ b/hosting/tests.py
@@ -1,7 +1,7 @@
-from django.test import TestCase
+# from django.test import TestCase
 
 # Create your tests here.
 
-test_user_can_add_ssh_key()
-
-test_user_can_delete_ssh_ke()
+# test_user_can_add_ssh_key()
+#
+# test_user_can_delete_ssh_ke()
diff --git a/hosting/views.py b/hosting/views.py
index 45e23df4..4cd552e0 100644
--- a/hosting/views.py
+++ b/hosting/views.py
@@ -1,5 +1,3 @@
-from collections import namedtuple
-
 from django.shortcuts import render
 from django.http import Http404
 from django.core.urlresolvers import reverse_lazy, reverse
@@ -7,7 +5,6 @@ from django.contrib.auth.mixins import LoginRequiredMixin
 from django.views.generic import View, CreateView, FormView, ListView, DetailView,\
     DeleteView, TemplateView, UpdateView
 from django.http import HttpResponseRedirect
-from django.contrib.auth import authenticate, login
 from django.contrib import messages
 from django.conf import settings
 from django.shortcuts import redirect
@@ -35,7 +32,6 @@ from opennebula_api.serializers import VirtualMachineSerializer,\
 from django.utils.translation import ugettext_lazy as _
 
 
-from oca.exceptions import OpenNebulaException
 from oca.pool import WrongNameError, WrongIdError
 
 CONNECTION_ERROR = "Your VMs cannot be displayed at the moment due to a backend \
@@ -205,31 +201,35 @@ class SignupView(CreateView):
 
         return HttpResponseRedirect(reverse_lazy('hosting:signup-validate'))
 
+
 class SignupValidateView(TemplateView):
     template_name = "hosting/signup_validate.html"
-    
+
     def get_context_data(self, **kwargs):
         context = super(SignupValidateView, self).get_context_data(**kwargs)
         login_url = reverse('hosting:login')
-        message= _("Thank you for signing up. We have sent an email to you. Please follow the instructions in it to activate your account. Once activated, you can login using ") + '<a href="' + login_url +'">login</a>'
-        section_title='Sign up'
+        message = _("Thank you for signing up. We have sent an email to you. "
+                    "Please follow the instructions in it to activate your account. "
+                    "Once activated, you can login using ") + '<a href="' + login_url + '">login</a>'
+        section_title = 'Sign up'
         context['message'] = mark_safe(message)
         context['section_title'] = section_title
         return context
 
+
 class SignupValidatedView(SignupValidateView):
     template_name = "hosting/signup_validate.html"
-    
+
     def get_context_data(self, **kwargs):
         context = super(SignupValidateView, self).get_context_data(**kwargs)
         validated = CustomUser.validate_url(self.kwargs['validate_slug'])
         login_url = reverse('hosting:login')
         if validated:
-            message= _("Your account has been activated. You can now ") + '<a href="' + login_url +'">login</a>'
-            section_title=_('Account activation')
+            message = _("Your account has been activated. You can now ") + '<a href="' + login_url + '">login</a>'
+            section_title = _('Account activation')
         else:
-            message= _("Sorry. Your request is invalid.") + '<a href="' + login_url +'">login</a>'
-            section_title=_('Account activation')
+            message = _("Sorry. Your request is invalid.") + '<a href="' + login_url + '">login</a>'
+            section_title = _('Account activation')
         context['message'] = mark_safe(message)
         context['section_title'] = section_title
         return context
@@ -338,6 +338,7 @@ class SSHKeyDeleteView(LoginRequiredMixin, DeleteView):
 
         return super(SSHKeyDeleteView, self).delete(request, *args, **kwargs)
 
+
 class SSHKeyListView(LoginRequiredMixin, ListView):
     template_name = "hosting/user_keys.html"
     login_url = reverse_lazy('hosting:login')
@@ -346,7 +347,6 @@ class SSHKeyListView(LoginRequiredMixin, ListView):
     paginate_by = 10
     ordering = '-id'
 
-
     def get_queryset(self):
         user = self.request.user
         self.queryset = UserHostingKey.objects.filter(user=user)
@@ -366,7 +366,6 @@ class SSHKeyCreateView(LoginRequiredMixin, FormView):
     context_object_name = "virtual_machine"
     success_url = reverse_lazy('hosting:ssh_keys')
 
-
     def get_form_kwargs(self):
         kwargs = super(SSHKeyCreateView, self).get_form_kwargs()
         kwargs.update({'request': self.request})
@@ -463,7 +462,7 @@ class PaymentVMView(LoginRequiredMixin, FormView):
         return context
 
     def get(self, request, *args, **kwargs):
-        if not UserHostingKey.objects.filter( user=self.request.user).exists():
+        if not UserHostingKey.objects.filter(user=self.request.user).exists():
             messages.success(
                 request,
                 'In order to create a VM, you create/upload your SSH KEY first.'
@@ -525,7 +524,7 @@ class PaymentVMView(LoginRequiredMixin, FormView):
             manager = OpenNebulaManager(email=owner.email,
                                         password=owner.password)
             # Get user ssh key
-            if not UserHostingKey.objects.filter( user=self.request.user).exists():
+            if not UserHostingKey.objects.filter(user=self.request.user).exists():
                 context.update({
                     'sshError': 'error',
                     'form': form
@@ -534,7 +533,7 @@ class PaymentVMView(LoginRequiredMixin, FormView):
             # For now just get first one
             user_key = UserHostingKey.objects.filter(
                     user=self.request.user).first()
-            
+
             # Create a vm using logged user
             vm_id = manager.create_vm(
                 template_id=vm_template_id,
@@ -552,8 +551,9 @@ class PaymentVMView(LoginRequiredMixin, FormView):
             )
 
             # Create a Hosting Bill
-            bill = HostingBill.create(
-                customer=customer, billing_address=billing_address)
+            # variable bill is not used
+            # bill = HostingBill.create(
+            #     customer=customer, billing_address=billing_address)
 
             # Create Billing Address for User if he does not have one
             if not customer.user.billing_addresses.count():
@@ -686,7 +686,7 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
 
     def get(self, request, *args, **kwargs):
 
-        if not UserHostingKey.objects.filter( user=self.request.user).exists():
+        if not UserHostingKey.objects.filter(user=self.request.user).exists():
             messages.success(
                 request,
                 'In order to create a VM, you need to create/upload your SSH KEY first.'
@@ -710,7 +710,7 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
             )
             context = {
                 'error': 'connection'
-            }        
+            }
 
         return render(request, self.template_name, context)
 
diff --git a/membership/calendar/calendar.py b/membership/calendar/calendar.py
index 94416d55..ae4428f1 100644
--- a/membership/calendar/calendar.py
+++ b/membership/calendar/calendar.py
@@ -38,26 +38,26 @@ class CustomHTMLCalendar(CustomCalendar):
         self.requested_month = requested_month
         super(CustomHTMLCalendar, self).__init__()
 
-    def formatday(self, day, weekday, month=None,year=None):
+    def formatday(self, day, weekday, month=None, year=None):
         """
         Return a day as a table cell.
         """
 
         booked = CalendarModel.objects.filter(user_id=self.user.id)
-        is_booked= booked.filter(datebooked=datetime.date(day=day,month=month,year=year))
+        is_booked = booked.filter(datebooked=datetime.date(day=day, month=month, year=year))
 
         if month < int(self.requested_month):
-            return '<td class="prev-month %s">%d</td>' % ("selected" if is_booked else "",day)
+            return '<td class="prev-month %s">%d</td>' % ("selected" if is_booked else "", day)
         elif month > int(self.requested_month):
-            return '<td class="next-month %s">%d</td>' % ("selected" if is_booked else "",day)
+            return '<td class="next-month %s">%d</td>' % ("selected" if is_booked else "", day)
         else:
-            return '<td class="%s">%d</td>' % ("selected" if is_booked else "",day)
+            return '<td class="%s">%d</td>' % ("selected" if is_booked else "", day)
 
-    def formatweek(self, theweek,year):
+    def formatweek(self, theweek, year):
         """
         Return a complete week as a table row.
         """
-        s = ''.join(self.formatday(d, wd, month,year) for (d, wd, month) in theweek)
+        s = ''.join(self.formatday(d, wd, month, year) for (d, wd, month) in theweek)
         return '<tr>%s</tr>' % s
 
     def formatmonthname(self, theyear, themonth, withyear=True):
@@ -93,7 +93,7 @@ class CustomHTMLCalendar(CustomCalendar):
         a(self.formatweekheader())
         a('\n')
         for week in self.monthdays2calendar(theyear, themonth):
-            a(self.formatweek(week,theyear))
+            a(self.formatweek(week, theyear))
             a('\n')
         a('</table>')
         a('\n')
@@ -102,8 +102,8 @@ class CustomHTMLCalendar(CustomCalendar):
 
 
 class BookCalendar(CustomHTMLCalendar):
-    def __init__(self, user,requested_month):
-        self.user=user
+    def __init__(self, user, requested_month):
+        self.user = user
         super(BookCalendar, self).__init__(requested_month)
 
     def formatmonth(self, year, month):
@@ -111,7 +111,7 @@ class BookCalendar(CustomHTMLCalendar):
         return super(BookCalendar, self).formatmonth(year, month)
 
     def day_cell(self, cssclass, body):
-        return '<td>%s</td>' %  body
+        return '<td>%s</td>' % body
 
     def formatmonthname(self, theyear, themonth, withyear):
         """
diff --git a/membership/forms.py b/membership/forms.py
index 13899d97..a70b109d 100644
--- a/membership/forms.py
+++ b/membership/forms.py
@@ -1,7 +1,7 @@
 __author__ = 'tomislav'
 from django import forms
 from django.utils.translation import ugettext_lazy as _
-from django.contrib.auth import authenticate,login
+from django.contrib.auth import authenticate
 
 from .models import CreditCards
 
@@ -25,7 +25,7 @@ class LoginForm(forms.Form):
             raise forms.ValidationError("Sorry, that login was invalid. Please try again.")
         return self.cleaned_data
 
-    def login(self,request):
+    def login(self, request):
         username = self.cleaned_data.get('email')
         password = self.cleaned_data.get('password')
         user = authenticate(email=username, password=password)
@@ -36,6 +36,7 @@ class RegisterForm(SignupFormMixin):
     password = forms.CharField(widget=forms.PasswordInput())
     confirm_password = forms.CharField(widget=forms.PasswordInput())
 
+
 class PaymentForm(forms.ModelForm):
     class Meta:
         model = CreditCards
@@ -58,7 +59,7 @@ class PaymentForm(forms.ModelForm):
 
         # if CreditCards.objects.filter(card_number=data.get("card_number")):
         #     raise forms.ValidationError({'card_number': _('Credit card is used before.')})
-        return self.cleaned_data
+        return data
 
     def save(self, user_id):
         self.instance.user_id = user_id
diff --git a/membership/models.py b/membership/models.py
index 8bd9feec..bcce2f39 100644
--- a/membership/models.py
+++ b/membership/models.py
@@ -1,10 +1,9 @@
 from datetime import datetime
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
-from django.contrib.auth.models import User, AbstractBaseUser, BaseUserManager, AbstractUser, PermissionsMixin
+from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
 from django.contrib.auth.hashers import make_password
 from django.core.validators import RegexValidator
-from django.contrib.auth.models import User
 from django.contrib.sites.models import Site
 
 from utils.stripe_utils import StripeUtils
@@ -13,11 +12,12 @@ from django.core.urlresolvers import reverse
 from utils.mailer import BaseEmail
 
 REGISTRATION_MESSAGE = {'subject': "Validation mail",
-                        'message': 'Please validate Your account under this link http://localhost:8000/en-us/digitalglarus/login/validate/{}',
+                        'message': 'Please validate Your account under this link '
+                                   'http://localhost:8000/en-us/digitalglarus/login/validate/{}',
                         'from': 'test@test.com'}
 
 
-def get_anonymous_user_instance(User):
+def get_anonymous_user_instance():
     return CustomUser(name='Anonymous', email='anonymous@ungleich.ch',
                       validation_slug=make_password(None))
 
@@ -87,8 +87,9 @@ class CustomUser(AbstractBaseUser, PermissionsMixin):
                         'subject': _('Activate your Data Center Light account'),
                         'from_address': '(Data Center Light) Data Center Light Support <support@datacenterlight.ch>',
                         'to': user.email,
-                        'context': {'base_url'  : base_url, 
-                                    'activation_link' : reverse('hosting:validate', kwargs={'validate_slug': user.validation_slug})},
+                        'context': {'base_url': base_url,
+                                    'activation_link': reverse('hosting:validate',
+                                                               kwargs={'validate_slug': user.validation_slug})},
                         'template_name': 'user_activation',
                         'template_path': 'datacenterlight/emails/'
                     }
diff --git a/membership/payment.py b/membership/payment.py
index 08245d8e..a5466998 100644
--- a/membership/payment.py
+++ b/membership/payment.py
@@ -7,7 +7,7 @@ stripe.api_key = settings.STRIPE_API_PRIVATE_KEY
 
 class StripePayment(object):
     @classmethod
-    def make_payment(cls,user,amount,token,time):
+    def make_payment(cls, user, amount, token, time):
         try:
             print(amount)
             print(amount)
@@ -19,7 +19,7 @@ class StripePayment(object):
                 source=token,
                 description=settings.STRIPE_DESCRIPTION_ON_PAYMENT
             )
-            if charge['status'] =='succeeded':
+            if charge['status'] == 'succeeded':
                 obj = CreditCards.objects.filter(user_id=user.id).first()
                 obj.payment_type = time
                 obj.save()
@@ -42,7 +42,7 @@ class StripePayment(object):
             return "Currently its not possible to make payments."
         except stripe.error.StripeError as e:
             return "Currently its not possible to make payments."
-            #maybe send email
+            # maybe send email
         except Exception as e:
             return "Currently its not possible to make payments."
-            #maybe send email
+            # maybe send email
diff --git a/membership/tests.py b/membership/tests.py
index 42fd3ebe..2f2b8c04 100644
--- a/membership/tests.py
+++ b/membership/tests.py
@@ -26,6 +26,4 @@ class LoginTestCase(TestCase):
         # check fail login
 
         res4 = self.client.post(url, data={'email': 'test@gmail.com', 'password': 'falsepassword'})
-        self.assertContains(res4,'Sorry, that login was invalid.',1,200)
-
-
+        self.assertContains(res4, 'Sorry, that login was invalid.', 1, 200)
diff --git a/membership/urls.py b/membership/urls.py
index 65be6868..e4219d8d 100644
--- a/membership/urls.py
+++ b/membership/urls.py
@@ -8,7 +8,7 @@ urlpatterns = (
     url(r"^$", views.LoginRegistrationView.as_view(), name='login_glarus'),
     url(r"^validate/(?P<validate_slug>.*)/$", views.validate_email),
     url(r"^membership/$", login_required(views.MembershipView.as_view()), name='membership'),
-    url(r'logout/?$',views.logout_glarus,name='logout_glarus'),
+    url(r'logout/?$', views.logout_glarus, name='logout_glarus'),
     url(r"^buy/(?P<time>\w+)/$", login_required(views.CreditCardView.as_view()), name='payment'),
-    url(r'^buy/(?P<time>\w+)/reset',login_required(views.reset),name='reset')
+    url(r'^buy/(?P<time>\w+)/reset', login_required(views.reset), name='reset')
 )
diff --git a/membership/views.py b/membership/views.py
index fded13e1..6fea3edd 100644
--- a/membership/views.py
+++ b/membership/views.py
@@ -8,22 +8,23 @@ from django.contrib.auth import logout
 from django.http import HttpResponseRedirect
 from django.contrib.auth import login
 
-from .models import CustomUser,StripeCustomer
+from .models import CustomUser, StripeCustomer
 from .forms import LoginForm, RegisterForm, PaymentForm
 from utils.stripe_utils import StripeUtils
 
 
-
 def validate_email(request, validate_slug):
     validated = CustomUser.validate_url(validate_slug)
     if validated:
-        return render(request, 'templates/validated_email.html',{'msg':True})
+        return render(request, 'templates/validated_email.html', {'msg': True})
     else:
-        return render(request, 'templates/error.html',{'msg':'Validation failed.'})
+        return render(request, 'templates/error.html', {'msg': 'Validation failed.'})
+
+
+def reset(request, time):
+    request.session['next'] = 0
+    return redirect('payment', time=time)
 
-def reset(request,time):
-    request.session['next']=0
-    return redirect('payment',time=time)
 
 class CreditCardView(View):
     def _get_context(self, request, time):
@@ -42,20 +43,20 @@ class CreditCardView(View):
         context['form'] = PaymentForm()
         return context
 
-    @cache_control(no_cache=True,must_revalidate=True)
+    @cache_control(no_cache=True, must_revalidate=True)
     def get(self, request, time=None):
         context = self._get_context(request, time)
         next = request.session.get('next')
-        if next == 1 or next ==0:
+        if next == 1 or next == 0:
             template = 'templates/creditcard.html'
-            request.session['next'] +=1
+            request.session['next'] += 1
         elif next == 2:
-            customer = StripeCustomer.get_or_create(email=request.user.email,token=request.session['token'])
+            customer = StripeCustomer.get_or_create(email=request.user.email, token=request.session['token'])
             stripe_utils = StripeUtils()
-            charge = stripe_utils.make_charge(request.session['amount'],customer=customer.stripe_id)
+            charge = stripe_utils.make_charge(request.session['amount'], customer=customer.stripe_id)
             template = 'templates/validated.html'
-            resp = charge.get('response_object')            
-            context['msg'] = resp.get('status',None) 
+            resp = charge.get('response_object')
+            context['msg'] = resp.get('status', None)
             request.session['next'] = None
         return render(request, template, context)
 
@@ -64,11 +65,11 @@ class CreditCardView(View):
         stripe_token = request.POST['stripeToken']
 
         if form.is_valid():
-            ret = form.save(request.user)
+            form.save(request.user)
             amount = 35 if time == 'month' else 360
             request.session['token'] = stripe_token
             request.session['amount'] = amount
-            request.session['next'] +=1
+            request.session['next'] += 1
             return render(request, 'templates/confirm.html',
                           context={'name': request.user.name, 'email': request.user.email})
         else:
@@ -121,13 +122,14 @@ class LoginRegistrationView(View):
 
 class MembershipView(View):
     def get(self, request):
-        #if the user has payed already
+        # if the user has payed already
         member_payed = request.user.creditcards_set.filter(Q(payment_type='month') | Q(payment_type='year'))
         if member_payed:
             return redirect('/')
         request.session['next'] = 0
         language = get_language()
-        return render(request, 'templates/membership.html',context={'language_code':language})
+        return render(request, 'templates/membership.html', context={'language_code': language})
+
 
 def logout_glarus(request):
     logout(request)
diff --git a/nosystemd/tests.py b/nosystemd/tests.py
index 7ce503c2..a79ca8be 100644
--- a/nosystemd/tests.py
+++ b/nosystemd/tests.py
@@ -1,3 +1,3 @@
-from django.test import TestCase
+# from django.test import TestCase
 
 # Create your tests here.
diff --git a/opennebula_api/admin.py b/opennebula_api/admin.py
index 8c38f3f3..4185d360 100644
--- a/opennebula_api/admin.py
+++ b/opennebula_api/admin.py
@@ -1,3 +1,3 @@
-from django.contrib import admin
+# from django.contrib import admin
 
 # Register your models here.
diff --git a/opennebula_api/exceptions.py b/opennebula_api/exceptions.py
index 2fa15b43..e9d3c0f7 100644
--- a/opennebula_api/exceptions.py
+++ b/opennebula_api/exceptions.py
@@ -1,9 +1,10 @@
-
 class KeyExistsError(Exception):
     pass
 
+
 class UserExistsError(Exception):
     pass
 
+
 class UserCredentialError(Exception):
     pass
diff --git a/opennebula_api/models.py b/opennebula_api/models.py
index 397c0f0c..e5e656b9 100644
--- a/opennebula_api/models.py
+++ b/opennebula_api/models.py
@@ -6,7 +6,6 @@ from oca.pool import WrongNameError, WrongIdError
 from oca.exceptions import OpenNebulaException
 
 from django.conf import settings
-from django.utils.functional import cached_property
 
 from utils.models import CustomUser
 from .exceptions import KeyExistsError, UserExistsError, UserCredentialError
@@ -38,9 +37,10 @@ class OpenNebulaManager():
             )
         except:
             pass
+
     def _get_client(self, user):
-        """Get a opennebula client object for a CustomUser object 
-        
+        """Get a opennebula client object for a CustomUser object
+
         Args:
             user (CustomUser): dynamicweb CustomUser object
 
@@ -49,7 +49,7 @@ class OpenNebulaManager():
 
         Raise:
             ConnectionError: If the connection to the opennebula server can't be
-                established 
+                established
         """
         return oca.Client("{0}:{1}".format(
             user.email,
@@ -74,8 +74,8 @@ class OpenNebulaManager():
         ))
 
     def _get_user(self, user):
-        """Get the corresponding opennebula user for a CustomUser object 
-        
+        """Get the corresponding opennebula user for a CustomUser object
+
         Args:
             user (CustomUser): dynamicweb CustomUser object
 
@@ -85,7 +85,7 @@ class OpenNebulaManager():
         Raise:
             WrongNameError: If no openebula user with this credentials exists
             ConnectionError: If the connection to the opennebula server can't be
-                established 
+                established
         """
         user_pool = self._get_user_pool()
         return user_pool.get_by_name(user.email)
@@ -93,16 +93,16 @@ class OpenNebulaManager():
     def create_user(self, user: CustomUser):
         """Create a new opennebula user or a corresponding CustomUser object
 
-        
+
         Args:
             user (CustomUser): dynamicweb CustomUser object
 
         Returns:
             int: Return the opennebula user id
-            
+
         Raises:
             ConnectionError: If the connection to the opennebula server can't be
-                established 
+                established
             UserExistsError: If a user with this credeintals already exits on the
                 server
             UserCredentialError: If a user with this email exists but the
@@ -111,7 +111,7 @@ class OpenNebulaManager():
         """
         try:
             self._get_user(user)
-            try: 
+            try:
                 self._get_client(self, user)
                 logger.debug('User already exists')
                 raise UserExistsError()
@@ -122,19 +122,18 @@ class OpenNebulaManager():
 
         except WrongNameError:
             user_id = self.oneadmin_client.call(oca.User.METHODS['allocate'],
-                user.email, user.password, 'core')
+                                                user.email, user.password, 'core')
             logger.debug('Created a user for CustomObject: {user} with user id = {u_id}',
-                user=user,
-                u_id=user_id
-            )
-            return user_id 
+                         user=user,
+                         u_id=user_id
+                         )
+            return user_id
         except ConnectionRefusedError:
             logger.error('Could not connect to host: {host} via protocol {protocol}'.format(
                 host=settings.OPENNEBULA_DOMAIN,
                 protocol=settings.OPENNEBULA_PROTOCOL)
             )
             raise ConnectionRefusedError
-        
 
     def _get_or_create_user(self, email, password):
         try:
@@ -166,7 +165,7 @@ class OpenNebulaManager():
                 host=settings.OPENNEBULA_DOMAIN,
                 protocol=settings.OPENNEBULA_PROTOCOL)
             )
-            raise 
+            raise
         return user_pool
 
     def _get_vm_pool(self):
@@ -209,36 +208,6 @@ class OpenNebulaManager():
         except:
             raise ConnectionRefusedError
 
-    def create_template(self, name, cores, memory, disk_size, core_price, memory_price,
-                        disk_size_price, ssh=''):
-        """Create and add a new template to opennebula.
-        :param name:      A string representation describing the template.
-                          Used as label in view.
-        :param cores:     Amount of virtual cpu cores for the VM.
-        :param memory:  Amount of RAM for the VM (GB)
-        :param disk_size:    Amount of disk space for VM (GB)
-        :param core_price:     Price of virtual cpu for the VM per core.
-        :param memory_price:  Price of RAM for the VM per GB
-        :param disk_size_price:    Price of disk space for VM per GB
-        :param ssh: User public ssh key
-        """
-
-        template_id = oca.VmTemplate.allocate(
-            self.oneadmin_client,
-            template_string_formatter.format(
-                name=name,
-                vcpu=cores,
-                cpu=0.1 * cores,
-                size=1024 * disk_size,
-                memory=1024 * memory,
-                # * 10 because we set cpu to *0.1
-                cpu_cost=10 * core_price,
-                memory_cost=memory_price,
-                disk_cost=disk_size_price,
-                ssh=ssh
-            )
-        )
-
     def create_vm(self, template_id, specs, ssh_key=None):
 
         template = self.get_template(template_id)
@@ -286,8 +255,7 @@ class OpenNebulaManager():
                         """.format(size=1024 * int(specs['disk_size']),
                                    image=image,
                                    image_uname=image_uname)
-                        
-                                
+
         if ssh_key:
             vm_specs += """<CONTEXT>
                     <SSH_PUBLIC_KEY>{ssh}</SSH_PUBLIC_KEY>
@@ -431,30 +399,30 @@ class OpenNebulaManager():
         )
 
     def add_public_key(self, user, public_key='', merge=False):
-        """ 
+        """
 
-        Args: 
-            user (CustomUser): Dynamicweb user 
+        Args:
+            user (CustomUser): Dynamicweb user
             public_key (string): Public key to add to the user
             merge (bool): Optional if True the new public key replaces the old
 
         Raises:
             KeyExistsError: If replace is False and the user already has a
-                public key 
+                public key
             WrongNameError: If no openebula user with this credentials exists
             ConnectionError: If the connection to the opennebula server can't be
-                established 
+                established
 
         Returns:
             True if public_key was added
 
         """
         # TODO: Check if we can remove this first try because we basically just
-        # raise the possible Errors 
+        # raise the possible Errors
         try:
             open_user = self._get_user(user)
             try:
-                old_key = open_user.template.ssh_public_key 
+                old_key = open_user.template.ssh_public_key
                 if not merge:
                     raise KeyExistsError()
                 public_key += '\n{key}'.format(key=old_key)
@@ -462,7 +430,8 @@ class OpenNebulaManager():
             except AttributeError:
                 pass
             self.oneadmin_client.call('user.update', open_user.id,
-                         '<CONTEXT><SSH_PUBLIC_KEY>{key}</SSH_PUBLIC_KEY></CONTEXT>'.format(key=public_key))
+                                      '<CONTEXT><SSH_PUBLIC_KEY>{key}</SSH_PUBLIC_KEY></CONTEXT>'
+                                      .format(key=public_key))
             return True
         except WrongNameError:
             raise
@@ -471,18 +440,18 @@ class OpenNebulaManager():
             raise
 
     def remove_public_key(self, user, public_key=''):
-        """ 
+        """
 
-        Args: 
-            user (CustomUser): Dynamicweb user 
+        Args:
+            user (CustomUser): Dynamicweb user
             public_key (string): Public key to be removed to the user
 
         Raises:
             KeyDoesNotExistsError: If replace is False and the user already has a
-                public key 
+                public key
             WrongNameError: If no openebula user with this credentials exists
             ConnectionError: If the connection to the opennebula server can't be
-                established 
+                established
 
         Returns:
             True if public_key was removed
@@ -492,21 +461,22 @@ class OpenNebulaManager():
         try:
             open_user = self._get_user(user)
             try:
-                old_key = open_user.template.ssh_public_key 
+                old_key = open_user.template.ssh_public_key
                 if public_key not in old_key:
                     return False
                     # raise KeyDoesNotExistsError()
                 if '\n{}'.format(public_key) in old_key:
                     public_key = old_key.replace('\n{}'.format(public_key), '')
-                else: 
+                else:
                     public_key = old_key.replace(public_key, '')
 
             except AttributeError:
                 return False
-                #raise KeyDoesNotExistsError()
-                
+                # raise KeyDoesNotExistsError()
+
             self.oneadmin_client.call('user.update', open_user.id,
-                         '<CONTEXT><SSH_PUBLIC_KEY>{key}</SSH_PUBLIC_KEY></CONTEXT>'.format(key=public_key))
+                                      '<CONTEXT><SSH_PUBLIC_KEY>{key}</SSH_PUBLIC_KEY></CONTEXT>'
+                                      .format(key=public_key))
             return True
         except WrongNameError:
             raise
diff --git a/opennebula_api/serializers.py b/opennebula_api/serializers.py
index 824ae7c6..16ab1e76 100644
--- a/opennebula_api/serializers.py
+++ b/opennebula_api/serializers.py
@@ -1,20 +1,19 @@
-import oca
 import ipaddress
 
 from rest_framework import serializers
 
 from oca import OpenNebulaException
-from oca.template import VmTemplate
 
 from .models import OpenNebulaManager
 
+
 class VirtualMachineTemplateSerializer(serializers.Serializer):
     """Serializer to map the virtual machine template instance into JSON format."""
-    id          = serializers.IntegerField(read_only=True)
-    name        = serializers.SerializerMethodField()
-    cores       = serializers.SerializerMethodField() 
-    disk_size   = serializers.SerializerMethodField()
-    memory      = serializers.SerializerMethodField()
+    id = serializers.IntegerField(read_only=True)
+    name = serializers.SerializerMethodField()
+    cores = serializers.SerializerMethodField()
+    disk_size = serializers.SerializerMethodField()
+    memory = serializers.SerializerMethodField()
 
     def get_cores(self, obj):
         if hasattr(obj.template, 'vcpu'):
@@ -28,7 +27,7 @@ class VirtualMachineTemplateSerializer(serializers.Serializer):
         try:
             for disk in template.disks:
                 disk_size += int(disk.size)
-            return disk_size / 1024 
+            return disk_size / 1024
         except:
             return 0
 
@@ -39,30 +38,28 @@ class VirtualMachineTemplateSerializer(serializers.Serializer):
         return obj.name.strip('public-')
 
 
-
 class VirtualMachineSerializer(serializers.Serializer):
     """Serializer to map the virtual machine instance into JSON format."""
 
     name = serializers.SerializerMethodField()
-    cores       = serializers.IntegerField(source='template.vcpu') 
-    disk        = serializers.IntegerField(write_only=True)
-    set_memory      = serializers.IntegerField(write_only=True, label='Memory')
-    memory      = serializers.SerializerMethodField()
-    
+    cores = serializers.IntegerField(source='template.vcpu')
+    disk = serializers.IntegerField(write_only=True)
+    set_memory = serializers.IntegerField(write_only=True, label='Memory')
+    memory = serializers.SerializerMethodField()
 
-    disk_size   = serializers.SerializerMethodField()
-    ipv4          = serializers.SerializerMethodField()
-    ipv6          = serializers.SerializerMethodField()
-    vm_id       = serializers.IntegerField(read_only=True, source='id')
-    state       = serializers.CharField(read_only=True, source='str_state')
-    price       = serializers.SerializerMethodField()
-    ssh_key     = serializers.CharField(write_only=True)
+    disk_size = serializers.SerializerMethodField()
+    ipv4 = serializers.SerializerMethodField()
+    ipv6 = serializers.SerializerMethodField()
+    vm_id = serializers.IntegerField(read_only=True, source='id')
+    state = serializers.CharField(read_only=True, source='str_state')
+    price = serializers.SerializerMethodField()
+    ssh_key = serializers.CharField(write_only=True)
     configuration = serializers.SerializerMethodField()
 
     template_id = serializers.ChoiceField(
                 choices=[(key.id, key.name) for key in
-                        OpenNebulaManager().try_get_templates()
-                        ],
+                         OpenNebulaManager().try_get_templates()
+                         ],
                 source='template.template_id',
                 write_only=True,
                 default=[]
@@ -77,12 +74,11 @@ class VirtualMachineSerializer(serializers.Serializer):
 
         template_id = validated_data['template']['template_id']
         specs = {
-                    'cpu' : cores,
-                    'disk_size' : disk,
-                    'memory' : memory,
+                    'cpu': cores,
+                    'disk_size': disk,
+                    'memory': memory,
                 }
 
-
         try:
             manager = OpenNebulaManager(email=owner.email,
                                         password=owner.password,
@@ -92,7 +88,7 @@ class VirtualMachineSerializer(serializers.Serializer):
                                               specs=specs)
         except OpenNebulaException as err:
             raise serializers.ValidationError("OpenNebulaException occured. {0}".format(err))
-        
+
         return manager.get_vm(opennebula_id)
 
     def get_memory(self, obj):
@@ -112,6 +108,7 @@ class VirtualMachineSerializer(serializers.Serializer):
         for disk in template.disks:
             price += int(disk.size)/1024 * 0.6
         return price
+
     def get_configuration(self, obj):
         template_id = obj.template.template_id
         template = OpenNebulaManager().get_template(template_id)
@@ -123,7 +120,7 @@ class VirtualMachineSerializer(serializers.Serializer):
             return str(v4_from_mac(nic.mac))
         else:
             return '-'
-        
+
     def get_ipv6(self, obj):
         nic = obj.template.nics[0]
         return nic.ip6_global
@@ -131,12 +128,15 @@ class VirtualMachineSerializer(serializers.Serializer):
     def get_name(self, obj):
         return obj.name.strip('public-')
 
+
 def hexstr2int(string):
     return int(string.replace(':', ''), 16)
 
+
 FIRST_MAC = hexstr2int('02:00:b3:39:79:4d')
-FIRST_V4  = ipaddress.ip_address('185.203.112.2')
-COUNT     = 1000
+FIRST_V4 = ipaddress.ip_address('185.203.112.2')
+COUNT = 1000
+
 
 def v4_from_mac(mac):
     """Calculates the IPv4 address from a MAC address.
@@ -146,5 +146,6 @@ def v4_from_mac(mac):
     """
     return FIRST_V4 + (hexstr2int(mac) - FIRST_MAC)
 
+
 def is_in_v4_range(mac):
     return FIRST_MAC <= hexstr2int(mac) < FIRST_MAC + 1000
diff --git a/opennebula_api/tests.py b/opennebula_api/tests.py
index 12b396fe..b2bf62e0 100644
--- a/opennebula_api/tests.py
+++ b/opennebula_api/tests.py
@@ -1,4 +1,3 @@
-import socket
 import random
 import string
 
@@ -8,32 +7,30 @@ from .models import OpenNebulaManager
 from .serializers import VirtualMachineSerializer
 from utils.models import CustomUser
 
+
 class OpenNebulaManagerTestCases(TestCase):
     """This class defines the test suite for the opennebula manager model."""
 
     def setUp(self):
         """Define the test client and other test variables."""
-        
-
         self.email = '{}@ungleich.ch'.format(''.join(random.choices(string.ascii_uppercase, k=10)))
-        self.password = ''.join(random.choices(string.ascii_uppercase + string.digits, k=20)) 
+        self.password = ''.join(random.choices(string.ascii_uppercase + string.digits, k=20))
 
         self.user = CustomUser.objects.create(name='test', email=self.email,
-                password=self.password) 
+                                              password=self.password)
 
         self.vm_specs = {}
         self.vm_specs['cpu'] = 1
         self.vm_specs['memory'] = 2
         self.vm_specs['disk_size'] = 10
 
-        self.manager = OpenNebulaManager() 
-
+        self.manager = OpenNebulaManager()
 
     def test_connect_to_server(self):
         """Test the opennebula manager can connect to a server."""
         try:
             ver = self.manager.oneadmin_client.version()
-        except: 
+        except:
             ver = None
         self.assertTrue(ver is not None)
 
@@ -54,7 +51,7 @@ class OpenNebulaManagerTestCases(TestCase):
         # Remove the user afterwards
         user = user_pool.get_by_name(self.email)
         user.delete()
-        
+
         self.assertNotEqual(old_count, new_count)
 
     def test_user_can_login(self):
@@ -64,7 +61,7 @@ class OpenNebulaManagerTestCases(TestCase):
         client = self.manager._get_client(self.user)
         version = client.version()
 
-        # Cleanup 
+        # Cleanup
         user.delete()
         self.assertNotEqual(version, None)
 
@@ -77,11 +74,11 @@ class OpenNebulaManagerTestCases(TestCase):
         # Fetch new user information from opennebula
         user.info()
         user_public_key = user.template.ssh_public_key
-        # Cleanup 
+        # Cleanup
         user.delete()
 
         self.assertEqual(user_public_key, public_key)
-        
+
     def test_append_public_key_to_user(self):
         """ Test the manager can append a new public key to an user """
         self.manager.create_user(self.user)
@@ -94,11 +91,11 @@ class OpenNebulaManagerTestCases(TestCase):
         self.manager.add_public_key(self.user, public_key, merge=True)
         user.info()
         new_public_key = user.template.ssh_public_key
-        # Cleanup 
+        # Cleanup
         user.delete()
 
         self.assertEqual(new_public_key, '{}\n{}'.format(old_public_key,
-            public_key))
+                                                         public_key))
 
     def test_remove_public_key_to_user(self):
         """ Test the manager can remove a public key from an user """
@@ -112,12 +109,11 @@ class OpenNebulaManagerTestCases(TestCase):
         self.manager.remove_public_key(self.user, public_key)
         user.info()
         new_public_key = user.template.ssh_public_key
-        # Cleanup 
+        # Cleanup
         user.delete()
 
         self.assertEqual(new_public_key,
-                old_public_key.replace('{}\n'.format(public_key), '', 1))
-
+                         old_public_key.replace('{}\n'.format(public_key), '', 1))
 
     def test_requires_ssh_key_for_new_vm(self):
         """Test the opennebula manager requires the user to have a ssh key when
@@ -128,14 +124,11 @@ class VirtualMachineSerializerTestCase(TestCase):
     def setUp(self):
         """Define the test client and other test variables."""
         self.manager = OpenNebulaManager(email=None, password=None)
-                                           
 
     def test_serializer_strips_of_public(self):
-        """ Test the serialized virtual machine object contains no 'public-'.""" 
+        """ Test the serialized virtual machine object contains no 'public-'."""
 
         for vm in self.manager.get_vms():
             serialized = VirtualMachineSerializer(vm)
             self.assertEqual(serialized.data.get('name'), vm.name.strip('public-'))
             break
-
-
diff --git a/opennebula_api/views.py b/opennebula_api/views.py
index f6c6b8d7..9bf03a74 100644
--- a/opennebula_api/views.py
+++ b/opennebula_api/views.py
@@ -1,19 +1,11 @@
 from rest_framework import generics
 from rest_framework import permissions
 
-from django.contrib.auth.mixins import LoginRequiredMixin
-from django.contrib.auth import authenticate, login
-
-
-from utils.views import LoginViewMixin
-from membership.models import CustomUser, StripeCustomer
-from guardian.mixins import PermissionRequiredMixin
-
-from .serializers import VirtualMachineTemplateSerializer, \
-                         VirtualMachineSerializer
+from .serializers import VirtualMachineSerializer
 from .models import OpenNebulaManager
 from rest_framework.exceptions import APIException
 
+
 class ServiceUnavailable(APIException):
     status_code = 503
     default_detail = 'Service temporarily unavailable, try again later.'
@@ -29,7 +21,7 @@ class VmCreateView(generics.ListCreateAPIView):
         owner = self.request.user
         manager = OpenNebulaManager(email=owner.email,
                                     password=owner.password)
-        # We may have ConnectionRefusedError if we don't have a 
+        # We may have ConnectionRefusedError if we don't have a
         # connection to OpenNebula. For now, we raise ServiceUnavailable
         try:
             vms = manager.get_vms()
@@ -41,6 +33,7 @@ class VmCreateView(generics.ListCreateAPIView):
         """Save the post data when creating a new template."""
         serializer.save(owner=self.request.user)
 
+
 class VmDetailsView(generics.RetrieveUpdateDestroyAPIView):
     """This class handles the http GET, PUT and DELETE requests."""
     permission_classes = (permissions.IsAuthenticated, )
@@ -51,7 +44,7 @@ class VmDetailsView(generics.RetrieveUpdateDestroyAPIView):
         owner = self.request.user
         manager = OpenNebulaManager(email=owner.email,
                                     password=owner.password)
-        # We may have ConnectionRefusedError if we don't have a 
+        # We may have ConnectionRefusedError if we don't have a
         # connection to OpenNebula. For now, we raise ServiceUnavailable
         try:
             vms = manager.get_vms()
@@ -63,22 +56,21 @@ class VmDetailsView(generics.RetrieveUpdateDestroyAPIView):
         owner = self.request.user
         manager = OpenNebulaManager(email=owner.email,
                                     password=owner.password)
-        # We may have ConnectionRefusedError if we don't have a 
+        # We may have ConnectionRefusedError if we don't have a
         # connection to OpenNebula. For now, we raise ServiceUnavailable
         try:
             vm = manager.get_vm(self.kwargs.get('pk'))
         except ConnectionRefusedError:
             raise ServiceUnavailable
-        return vm                                    
+        return vm
 
     def perform_destroy(self, instance):
         owner = self.request.user
         manager = OpenNebulaManager(email=owner.email,
                                     password=owner.password)
-        # We may have ConnectionRefusedError if we don't have a 
+        # We may have ConnectionRefusedError if we don't have a
         # connection to OpenNebula. For now, we raise ServiceUnavailable
         try:
             manager.delete_vm(instance.id)
         except ConnectionRefusedError:
             raise ServiceUnavailable
-
diff --git a/requirements.txt b/requirements.txt
index de1b1500..7e686da4 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -84,5 +84,4 @@ django-admin-honeypot==1.0.0
 coverage==4.3.4
 git+https://github.com/ungleich/python-oca.git#egg=python-oca
 djangorestframework
-
-
+flake8==3.3.0
diff --git a/setup.cfg b/setup.cfg
new file mode 100755
index 00000000..b0aca08d
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,3 @@
+[flake8]
+max-line-length = 120
+exclude = .tox,.git,*/migrations/*,*/static/*,docs,venv,node_modules/*
diff --git a/ungleich/admin.py b/ungleich/admin.py
index 98dce73d..6b9e307f 100644
--- a/ungleich/admin.py
+++ b/ungleich/admin.py
@@ -9,4 +9,5 @@ from .models import UngleichPage
 class UngleichPageAdmin(PageExtensionAdmin):
     pass
 
+
 admin.site.register(UngleichPage, UngleichPageAdmin)
diff --git a/ungleich/cms_toolbar.py b/ungleich/cms_toolbar.py
index 4986368f..c001cca8 100644
--- a/ungleich/cms_toolbar.py
+++ b/ungleich/cms_toolbar.py
@@ -2,7 +2,6 @@ from cms.extensions.toolbar import ExtensionToolbar
 from django.utils.translation import ugettext_lazy as _
 
 from cms.toolbar_pool import toolbar_pool
-from cms.toolbar_base import CMSToolbar
 
 from .models import UngleichPage
 
@@ -22,4 +21,4 @@ class UngleichPageToolbar(ExtensionToolbar):
             if url:
                 # adds a toolbar item
                 current_page_menu.add_modal_item(_('Page Header'), url=url,
-                    disabled=not self.toolbar.edit_mode)
+                                                 disabled=not self.toolbar.edit_mode)
diff --git a/ungleich/models.py b/ungleich/models.py
index fb76704b..194fdfef 100644
--- a/ungleich/models.py
+++ b/ungleich/models.py
@@ -1,5 +1,3 @@
-from django.db import models
-
 from cms.extensions import PageExtension
 from cms.extensions.extension_pool import extension_pool
 from filer.fields.image import FilerImageField
@@ -9,11 +7,12 @@ from filer.fields.image import FilerImageField
 
 
 class UngleichPage(PageExtension):
-    #image_header = models.ImageField(upload_to='image_header')
+    # image_header = models.ImageField(upload_to='image_header')
     image = FilerImageField(null=True, blank=True,
-                           related_name="ungleinch_page_image")
+                            related_name="ungleinch_page_image")
 
     class Meta:
         app_label = 'ungleich'
 
+
 extension_pool.register(UngleichPage)
diff --git a/ungleich/templates/cms/ungleichch/__init__.py b/ungleich/templates/cms/ungleichch/__init__.py
index c2394ab6..43f88894 100644
--- a/ungleich/templates/cms/ungleichch/__init__.py
+++ b/ungleich/templates/cms/ungleichch/__init__.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-from django.utils.translation import ugettext_lazy as _
+# from django.utils.translation import ugettext_lazy as _
 # TEMPLATES = {
 #     'blog_u.html': _('Blog'),
 #     'page.html': _('Page'),
diff --git a/ungleich/tests.py b/ungleich/tests.py
index 7ce503c2..a79ca8be 100644
--- a/ungleich/tests.py
+++ b/ungleich/tests.py
@@ -1,3 +1,3 @@
-from django.test import TestCase
+# from django.test import TestCase
 
 # Create your tests here.
diff --git a/ungleich/views.py b/ungleich/views.py
index 8f73a8cb..3610d1bc 100644
--- a/ungleich/views.py
+++ b/ungleich/views.py
@@ -6,6 +6,7 @@ from django.utils.translation import get_language
 from djangocms_blog.models import Post
 from djangocms_blog.views import PostListView
 from djangocms_blog.settings import get_setting
+from django.utils.translation import ugettext_lazy as _
 
 
 def blog(request):
diff --git a/ungleich_page/admin.py b/ungleich_page/admin.py
index 8c38f3f3..4185d360 100644
--- a/ungleich_page/admin.py
+++ b/ungleich_page/admin.py
@@ -1,3 +1,3 @@
-from django.contrib import admin
+# from django.contrib import admin
 
 # Register your models here.
diff --git a/ungleich_page/models.py b/ungleich_page/models.py
index 71a83623..0b4331b3 100644
--- a/ungleich_page/models.py
+++ b/ungleich_page/models.py
@@ -1,3 +1,3 @@
-from django.db import models
+# from django.db import models
 
 # Create your models here.
diff --git a/ungleich_page/tests.py b/ungleich_page/tests.py
index 7ce503c2..a79ca8be 100644
--- a/ungleich_page/tests.py
+++ b/ungleich_page/tests.py
@@ -1,3 +1,3 @@
-from django.test import TestCase
+# from django.test import TestCase
 
 # Create your tests here.
diff --git a/ungleich_page/views.py b/ungleich_page/views.py
index eddb3a81..e5a99d8d 100644
--- a/ungleich_page/views.py
+++ b/ungleich_page/views.py
@@ -2,10 +2,9 @@ from django.contrib import messages
 
 from django.views.generic.edit import FormView
 from django.utils.translation import ugettext_lazy as _
-from django.core.urlresolvers import reverse_lazy,reverse
+from django.core.urlresolvers import reverse_lazy
 from django.views.generic import View
-from django.shortcuts import render,redirect,render_to_response
-from django.http import HttpResponseRedirect
+from django.shortcuts import render
 
 from utils.forms import ContactUsForm
 
diff --git a/utils/admin.py b/utils/admin.py
index 82e57d2f..f2039ee2 100644
--- a/utils/admin.py
+++ b/utils/admin.py
@@ -1,5 +1,5 @@
 from django.contrib import admin
-from .models import BillingAddress, UserBillingAddress
+from .models import UserBillingAddress
 
 # Register your models here.
 
diff --git a/utils/fields.py b/utils/fields.py
index 43f80a51..c7f1a54b 100644
--- a/utils/fields.py
+++ b/utils/fields.py
@@ -1,6 +1,5 @@
 from django.utils.translation import ugettext as _
 from django.db import models
-from django import forms
 
 # http://xml.coverpages.org/country3166.html
 COUNTRIES = (
@@ -255,4 +254,4 @@ class CountryField(models.CharField):
         super(CountryField, self).__init__(*args, **kwargs)
 
     def get_internal_type(self):
-        return "CharField"
\ No newline at end of file
+        return "CharField"
diff --git a/utils/forms.py b/utils/forms.py
index c53f3da0..15086dc6 100644
--- a/utils/forms.py
+++ b/utils/forms.py
@@ -115,7 +115,8 @@ class BillingAddressForm(forms.ModelForm):
 
 class UserBillingAddressForm(forms.ModelForm):
     user = forms.ModelChoiceField(queryset=CustomUser.objects.all(),
-                                             widget=forms.HiddenInput())
+                                  widget=forms.HiddenInput())
+
     class Meta:
         model = UserBillingAddress
         fields = ['street_address', 'city', 'postal_code', 'country', 'user']
@@ -126,6 +127,7 @@ class UserBillingAddressForm(forms.ModelForm):
             'Country': _('Country'),
         }
 
+
 class ContactUsForm(forms.ModelForm):
     error_css_class = 'autofocus'
 
diff --git a/utils/mailer.py b/utils/mailer.py
index 5dc24b04..d626e733 100644
--- a/utils/mailer.py
+++ b/utils/mailer.py
@@ -77,4 +77,3 @@ class DigitalGlarusRegistrationMailer(BaseMailer):
         self.registration = self.message
         self._message = self._message.format(slug=self._slug)
         super().__init__()
-
diff --git a/utils/models.py b/utils/models.py
index d5592d74..2aee584b 100644
--- a/utils/models.py
+++ b/utils/models.py
@@ -1,6 +1,4 @@
 from django.db import models
-from django.core import serializers
-from django.forms.models import model_to_dict
 
 from membership.models import CustomUser
 
@@ -18,6 +16,7 @@ class BaseBillingAddress(models.Model):
     class Meta:
         abstract = True
 
+
 class BillingAddress(BaseBillingAddress):
 
     def __str__(self):
diff --git a/utils/stripe_utils.py b/utils/stripe_utils.py
index 29b45d8e..93da91da 100644
--- a/utils/stripe_utils.py
+++ b/utils/stripe_utils.py
@@ -127,22 +127,10 @@ class StripeUtils(object):
             id=id)
 
     @handleStripeError
-    def make_payment(self, user, amount, token):
+    def make_payment(self, customer, amount, token):
         charge = self.stripe.Charge.create(
             amount=amount,  # in cents
             currency=self.CURRENCY,
             customer=customer
         )
         return charge
-
-    @handleStripeError
-    def create_plan(self, amount, name, id):
-        self.stripe.Plan.create(
-            amount=amount,
-            interval=self.INTERVAL,
-            name=name,
-            currency=self.CURRENCY,
-            id=id)
-
-
-