diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 475a496023910782bd58450b56aa204539e96e0e..c1f99e218f9e26315881cddda3c3cf132360184c 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -269,6 +269,22 @@ class purchase_order(osv.osv):
 
         return super(purchase_order, self).unlink(cr, uid, unlink_ids, context=context)
 
+    def set_order_line_status(self, cr, uid, ids, status, context=None):
+        line = self.pool.get('purchase.order.line')
+        order_line_ids = []
+        move_ids = []
+        proc_obj = self.pool.get('procurement.order')
+        for order in self.browse(cr, uid, ids, context=context):
+            order_line_ids += [po_line.id for po_line in order.order_line]
+            move_ids += [po_line.move_dest_id.id for po_line in order.order_line if po_line.move_dest_id]
+        if order_line_ids:
+            line.write(cr, uid, order_line_ids, {'state': status}, context=context)
+        if order_line_ids and status == 'cancel':
+            procs = proc_obj.search(cr, uid, [('move_id', 'in', move_ids)], context=context)
+            if procs:
+                proc_obj.write(cr, uid, procs, {'state': 'exception'}, context=context)
+        return True
+
     def button_dummy(self, cr, uid, ids, context=None):
         return True
 
@@ -585,6 +601,10 @@ class purchase_order(osv.osv):
                     return True
         return False
 
+    def wkf_action_cancel(self, cr, uid, ids, context=None):
+        self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
+        self.set_order_line_status(cr, uid, ids, 'cancel', context=context)
+
     def action_cancel(self, cr, uid, ids, context=None):
         for purchase in self.browse(cr, uid, ids, context=context):
             for pick in purchase.picking_ids:
@@ -603,7 +623,6 @@ class purchase_order(osv.osv):
                 .signal_invoice_cancel(cr, uid, map(attrgetter('id'), purchase.invoice_ids))
             self.pool['purchase.order.line'].write(cr, uid, [l.id for l in  purchase.order_line],
                     {'state': 'cancel'})
-        self.write(cr,uid,ids,{'state':'cancel'})
 
         self.signal_purchase_cancel(cr, uid, ids)
         return True
diff --git a/addons/purchase/purchase_workflow.xml b/addons/purchase/purchase_workflow.xml
index ec4632c45a99a56b499014591abf5b68011847d9..39e8acacdbd709c1d21006e38e817b474c97a21b 100644
--- a/addons/purchase/purchase_workflow.xml
+++ b/addons/purchase/purchase_workflow.xml
@@ -31,7 +31,7 @@
             <field name="name">cancel</field>
             <field name="kind">function</field>
             <field name="flow_stop">True</field>
-            <field name="action">write({'state':'cancel'})</field>
+            <field name="action">wkf_action_cancel()</field>
         </record>
         <record id="act_except_invoice" model="workflow.activity">
             <field name="wkf_id" ref="purchase_order"/>
diff --git a/addons/sale_margin/sale_margin.py b/addons/sale_margin/sale_margin.py
index b5c1821ab98a7d6fd02834275222b0eb97cbe8c0..ec1bd83dd50dba1b0f6fea98509ee26e8e1287d4 100644
--- a/addons/sale_margin/sale_margin.py
+++ b/addons/sale_margin/sale_margin.py
@@ -52,10 +52,7 @@ class sale_order_line(osv.osv):
         for line in self.browse(cr, uid, ids, context=context):
             res[line.id] = 0
             if line.product_id:
-                if line.purchase_price:
-                    res[line.id] = round((line.price_unit*line.product_uos_qty*(100.0-line.discount)/100.0) -(line.purchase_price*line.product_uos_qty), 2)
-                else:
-                    res[line.id] = round((line.price_unit*line.product_uos_qty*(100.0-line.discount)/100.0) -(line.product_id.standard_price*line.product_uos_qty), 2)
+                res[line.id] = round(line.price_subtotal - ((line.purchase_price or line.product_id.standard_price) * line.product_uos_qty), 2)
         return res
 
     _columns = {
diff --git a/openerp/addons/base/res/res_country_data.xml b/openerp/addons/base/res/res_country_data.xml
index 13c1025cf6b53cd3983f16957be51b2b3721f5bd..b40fc0d0e0777b2050b2e75c0851482ba6ac71ce 100644
--- a/openerp/addons/base/res/res_country_data.xml
+++ b/openerp/addons/base/res/res_country_data.xml
@@ -798,7 +798,7 @@
         <record id="my" model="res.country">
             <field name="name">Malaysia</field>
             <field name="code">my</field>
-            <field name="currency_id" ref="MXN"/>
+            <field name="currency_id" ref="MYR"/>
         </record>
         <record id="mz" model="res.country">
             <field name="name">Mozambique</field>