diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py
index 7cc29718472f037ef60ccc3d7be4036d22d367ad..774024f94468d799e31be632f397bf37b71ae07e 100644
--- a/addons/website_sale/controllers/main.py
+++ b/addons/website_sale/controllers/main.py
@@ -646,7 +646,6 @@ class website_sale(http.Controller):
         """
         cr, uid, context = request.cr, request.uid, request.context
         transaction_obj = request.registry.get('payment.transaction')
-        sale_order_obj = request.registry['sale.order']
         order = request.website.sale_get_order(context=context)
 
         if not order or not order.order_line or acquirer_id is None:
@@ -676,13 +675,11 @@ class website_sale(http.Controller):
             request.session['sale_transaction_id'] = tx_id
 
         # update quotation
-        sale_order_obj.write(
+        request.registry['sale.order'].write(
             cr, SUPERUSER_ID, [order.id], {
                 'payment_acquirer_id': acquirer_id,
                 'payment_tx_id': request.session['sale_transaction_id']
             }, context=context)
-        # confirm the quotation
-        sale_order_obj.action_button_confirm(cr, SUPERUSER_ID, [order.id], context=request.context)
 
         return tx_id
 
diff --git a/addons/website_sale/models/__init__.py b/addons/website_sale/models/__init__.py
index 4273e88271e91c1adf9ab48e957b72971c9198f9..e5d755e5eda9fcd4fea37db5f1726a41521118ff 100644
--- a/addons/website_sale/models/__init__.py
+++ b/addons/website_sale/models/__init__.py
@@ -1,2 +1,3 @@
 import product
 import sale_order
+import payment
diff --git a/addons/website_sale/models/payment.py b/addons/website_sale/models/payment.py
new file mode 100644
index 0000000000000000000000000000000000000000..36b681a759b225507aa365dd571781c9502107a3
--- /dev/null
+++ b/addons/website_sale/models/payment.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+
+from openerp import SUPERUSER_ID
+from openerp.osv import orm, fields
+
+
+class PaymentTransaction(orm.Model):
+    _inherit = 'payment.transaction'
+
+    _columns = {
+        # link with the sale order
+        'sale_order_id': fields.many2one('sale.order', 'Sale Order'),
+    }
+
+    def form_feedback(self, cr, uid, data, acquirer_name, context=None):
+        """ Override to confirm the sale order, if defined, and if the transaction
+        is done. """
+        tx = None
+        res = super(PaymentTransaction, self).form_feedback(cr, uid, data, acquirer_name, context=context)
+
+        # fetch the tx, check its state, confirm the potential SO
+        tx_find_method_name = '_%s_form_get_tx_from_data' % acquirer_name
+        if hasattr(self, tx_find_method_name):
+            tx = getattr(self, tx_find_method_name)(cr, uid, data, context=context)
+        if tx and tx.state == 'done' and tx.sale_order_id and tx.sale_order_id.state in ['draft', 'sent']:
+            self.pool['sale.order'].action_button_confirm(cr, SUPERUSER_ID, [tx.sale_order_id.id], context=context)
+
+        return res
diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py
index 8d2f51329e7e5d9533e3339ac12c755572891b60..373db16bbc4d65c92f007f49df49731cf31c9fca 100644
--- a/addons/website_sale/models/sale_order.py
+++ b/addons/website_sale/models/sale_order.py
@@ -6,14 +6,6 @@ from openerp.osv import osv, orm, fields
 from openerp.addons.web.http import request
 
 
-class payment_transaction(orm.Model):
-    _inherit = 'payment.transaction'
-
-    _columns = {
-        # link with the sale order
-        'sale_order_id': fields.many2one('sale.order', 'Sale Order'),
-    }
-
 class sale_order(osv.Model):
     _inherit = "sale.order"