diff --git a/datacenterlight/templates/datacenterlight/landing_payment.html b/datacenterlight/templates/datacenterlight/landing_payment.html
index fa638d77..d195690b 100644
--- a/datacenterlight/templates/datacenterlight/landing_payment.html
+++ b/datacenterlight/templates/datacenterlight/landing_payment.html
@@ -25,14 +25,15 @@
                         <h3>{%trans "Log in" %}</h3>
                         <hr class="top-hr">
                         <p style="margin-bottom: 20px;">{% blocktrans %}Already signed up?<br>By logging in you can retrieve saved billing information.{% endblocktrans %}</p>
-                        <form role="form" id="login-form" method="post" action="{% url 'hosting:login' %}" novalidate>
+                        <form role="form" id="login-form" method="post" action="" novalidate>
                             {% for field in login_form %}
                             {% csrf_token %}
                             {% bootstrap_field field show_label=False type='fields'%}
                             {% endfor %}
+                            <p class="text-danger">{{login_form.non_field_errors|striptags}}</p>
                             <input type='hidden' name='next' value='{{request.path}}'/>
                             <div class="form-group text-right">
-                                <button type="submit" class="btn btn-wide btn-vm-contact">{% trans "LOGIN" %}</button>
+                                <button type="submit" class="btn btn-wide btn-vm-contact" name="login_form">{% trans "LOGIN" %}</button>
                             </div>
                         </form>
                         <p>
@@ -58,7 +59,7 @@
                     {% endfor %}
                     <form role="form" id="billing-form" method="post" action="" novalidate>
                         {% csrf_token %}
-                        {% for field in form %}
+                        {% for field in billing_address_form %}
                         {% bootstrap_field field show_label=False type='fields'%}
                         {% endfor %}
                     </form>
@@ -153,22 +154,12 @@
                                 {% endif %}
                                 <div id='payment_error'>
                                     {% for message in messages %}
-                                        {% if 'failed_payment' in message.tags or 'make_charge_error' in message.tags %}
+                                        {% if 'failed_payment' in message.tags or 'make_charge_error' in message.tags or 'error' in message.tags %}
                                             <ul class="list-unstyled">
                                                 <li><p class="card-warning-content card-warning-error">{{ message|safe }}</p></li>
                                             </ul>
-                                        {% elif not form.non_field_errors %}
-                                            <p class="card-warning-content">
-                                                {% trans "You are not making any payment yet. After placing your order, you will be taken to the Submit Payment Page." %}
-                                            </p>
                                         {% endif %}
                                     {% endfor %}
-
-                                    {% for error in form.non_field_errors %}
-                                        <p class="card-warning-content card-warning-error">
-                                            {{ error|escape }}
-                                        </p>
-                                    {% endfor %}
                                 </div>
                                 <div class="text-right">
                                     <button class="btn btn-vm-contact btn-wide" type="submit">{%trans "SUBMIT" %}</button>
diff --git a/datacenterlight/views.py b/datacenterlight/views.py
index 81c83685..bd1a7f51 100644
--- a/datacenterlight/views.py
+++ b/datacenterlight/views.py
@@ -345,26 +345,45 @@ class PaymentOrderView(FormView):
         else:
             return BillingAddressFormSignup
 
-    def get_form_kwargs(self):
-        form_kwargs = super(PaymentOrderView, self).get_form_kwargs()
-        # if user is signed in, get billing address
-        if self.request.user.is_authenticated():
-            form_kwargs.update({
-                'instance': self.request.user.billing_addresses.first()
-            })
-        if 'billing_address_data' in self.request.session:
-            billing_address_data = self.request.session['billing_address_data']
-            form_kwargs.update({
-                'initial': billing_address_data
-            })
-        return form_kwargs
-
     def get_context_data(self, **kwargs):
         context = super(PaymentOrderView, self).get_context_data(**kwargs)
+        if 'billing_address_data' in self.request.session:
+            billing_address_data = self.request.session['billing_address_data']
+        else:
+            billing_address_data = {}
+
+        if self.request.user.is_authenticated():
+            if billing_address_data:
+                billing_address_form = BillingAddressForm(
+                    initial=billing_address_data
+                )
+            else:
+                billing_address_form = BillingAddressForm(
+                    instance=self.request.user.billing_addresses.first()
+                )
+            # Get user last order
+            last_hosting_order = HostingOrder.objects.filter(
+                customer__user=self.request.user
+            ).last()
+
+            # If user has already an hosting order, get the credit card
+            # data from it
+            if last_hosting_order:
+                credit_card_data = last_hosting_order.get_cc_data()
+                if credit_card_data:
+                    context['credit_card_data'] = credit_card_data
+                else:
+                    context['credit_card_data'] = None
+        else:
+            billing_address_form = BillingAddressFormSignup(
+                initial=billing_address_data
+            )
+
         context.update({
             'stripe_key': settings.STRIPE_API_PUBLIC_KEY,
             'site_url': reverse('datacenterlight:index'),
-            'login_form': HostingUserLoginForm()
+            'login_form': HostingUserLoginForm(prefix='login_form'),
+            'billing_address_form': billing_address_form
         })
         return context
 
@@ -376,9 +395,32 @@ class PaymentOrderView(FormView):
         return self.render_to_response(self.get_context_data())
 
     def post(self, request, *args, **kwargs):
-        form = self.get_form()
-        if form.is_valid():
-            token = form.cleaned_data.get('token')
+        if 'login_form' in request.POST:
+            login_form = HostingUserLoginForm(data=request.POST,
+                                              prefix='login_form')
+            if login_form.is_valid():
+                email = login_form.cleaned_data.get('email')
+                password = login_form.cleaned_data.get('password')
+                auth_user = authenticate(email=email, password=password)
+                if auth_user:
+                    login(self.request, auth_user)
+                    return HttpResponseRedirect(
+                        reverse('datacenterlight:payment')
+                    )
+            else:
+                context = self.get_context_data()
+                context['login_form'] = login_form
+                return self.render_to_response(context)
+        if request.user.is_authenticated():
+            address_form = BillingAddressForm(
+                data=request.POST,
+            )
+        else:
+            address_form = BillingAddressFormSignup(
+                data=request.POST,
+            )
+        if address_form.is_valid():
+            token = address_form.cleaned_data.get('token')
             if request.user.is_authenticated():
                 this_user = {
                     'email': request.user.email,
@@ -388,8 +430,8 @@ class PaymentOrderView(FormView):
                     email=this_user.get('email'),
                     token=token)
             else:
-                user_email = form.cleaned_data.get('email')
-                user_name = form.cleaned_data.get('name')
+                user_email = address_form.cleaned_data.get('email')
+                user_name = address_form.cleaned_data.get('name')
                 this_user = {
                     'email': user_email,
                     'name': user_name
@@ -422,13 +464,18 @@ class PaymentOrderView(FormView):
                         token=token,
                         customer_name=user_name)
 
-            request.session['billing_address_data'] = form.cleaned_data
+            request.session['billing_address_data'] = address_form.cleaned_data
             request.session['user'] = this_user
             # Get or create stripe customer
             if not customer:
-                form.add_error("__all__", "Invalid credit card")
+                address_form.add_error(
+                    "__all__", "Invalid credit card"
+                )
                 return self.render_to_response(
-                    self.get_context_data(form=form))
+                    self.get_context_data(
+                        billing_address_form=address_form
+                    )
+                )
             request.session['token'] = token
             if type(customer) is StripeCustomer:
                 request.session['customer'] = customer.stripe_id
@@ -437,7 +484,9 @@ class PaymentOrderView(FormView):
             return HttpResponseRedirect(
                 reverse('datacenterlight:order_confirmation'))
         else:
-            return self.form_invalid(form)
+            context = self.get_context_data()
+            context['billing_address_form'] = address_form
+            return self.render_to_response(context)
 
 
 class OrderConfirmationView(DetailView):
@@ -548,9 +597,13 @@ class OrderConfirmationView(DetailView):
             try:
                 custom_user = CustomUser.objects.get(
                     email=user.get('email'))
-                customer = StripeCustomer.objects.filter(
+                stripe_customer = StripeCustomer.objects.filter(
                     user_id=custom_user.id).first()
-                stripe_customer_id = customer.id
+                if stripe_customer is None:
+                    stripe_customer = StripeCustomer.objects.create(
+                        user=custom_user, stripe_id=stripe_api_cus_id
+                    )
+                stripe_customer_id = stripe_customer.id
             except CustomUser.DoesNotExist:
                 logger.debug(
                     "Customer {} does not exist.".format(user.get('email')))
diff --git a/hosting/forms.py b/hosting/forms.py
index 056d0004..7be7a588 100644
--- a/hosting/forms.py
+++ b/hosting/forms.py
@@ -29,6 +29,8 @@ class HostingUserLoginForm(forms.Form):
     def clean(self):
         email = self.cleaned_data.get('email')
         password = self.cleaned_data.get('password')
+        if self.errors:
+            return self.cleaned_data
         is_auth = authenticate(email=email, password=password)
         if not is_auth:
             raise forms.ValidationError(