diff --git a/src-db/database/model/tables/C_ORDERLINE.xml b/src-db/database/model/tables/C_ORDERLINE.xml
--- a/src-db/database/model/tables/C_ORDERLINE.xml
+++ b/src-db/database/model/tables/C_ORDERLINE.xml
@@ -341,7 +341,7 @@
       <foreign-key foreignTable="S_RESOURCEASSIGNMENT" name="C_ORDERLINE_S_RESOURCEASSIGNME">
         <reference local="S_RESOURCEASSIGNMENT_ID" foreign="S_RESOURCEASSIGNMENT_ID"/>
       </foreign-key>
-      <foreign-key foreignTable="C_ORDERLINE" name="C_ORDERLINE_SOPOREF">
+      <foreign-key foreignTable="C_ORDERLINE" name="C_ORDERLINE_SOPOREF" onDelete="setnull">
         <reference local="REF_ORDERLINE_ID" foreign="C_ORDERLINE_ID"/>
       </foreign-key>
       <foreign-key foreignTable="USER1" name="C_ORDERLINE_USER1">
diff --git a/src-db/database/model/triggers/C_ORDERLINE2_TRG.xml b/src-db/database/model/triggers/C_ORDERLINE2_TRG.xml
--- a/src-db/database/model/triggers/C_ORDERLINE2_TRG.xml
+++ b/src-db/database/model/triggers/C_ORDERLINE2_TRG.xml
@@ -131,83 +131,85 @@
   END IF;
   
   IF (UPDATING) THEN
-    -- Update Requisition ordered quantity when needed.
-    SELECT count(*) INTO v_count
-    FROM DUAL
-    WHERE EXISTS (SELECT 1 FROM m_requisitionorder WHERE c_orderline_id = :old.c_orderline_id);
-    IF (v_count > 0 AND :old.qtyordered > :new.qtyordered) THEN
-      -- Quantity order decrease. Remove quantity from requisitions.
-      DECLARE
-        TYPE RECORD IS REF CURSOR;
-        cur_requisitions      RECORD;
+    IF (:old.ref_orderline_id = :new.ref_orderline_id) THEN
+      -- Update Requisition ordered quantity when needed.
+      SELECT count(*) INTO v_count
+      FROM DUAL
+      WHERE EXISTS (SELECT 1 FROM m_requisitionorder WHERE c_orderline_id = :old.c_orderline_id);
+      IF (v_count > 0 AND :old.qtyordered > :new.qtyordered) THEN
+        -- Quantity order decrease. Remove quantity from requisitions.
+        DECLARE
+          TYPE RECORD IS REF CURSOR;
+          cur_requisitions      RECORD;
 
-        v_requisitionqty      NUMBER;
-        v_qtypendingtoremove  NUMBER;
-        v_qtytoremove         NUMBER;
-      BEGIN
-        SELECT sum(qty) INTO v_requisitionqty
-        FROM m_requisitionorder
-        WHERE c_orderline_id = :OLD.c_orderline_id;
-        IF (v_requisitionqty > :NEW.qtyordered) THEN
-          v_qtypendingtoremove := v_requisitionqty - :new.qtyordered;
-          FOR cur_requisitions IN (
-            SELECT ro.m_requisitionorder_id, ro.qty
-            FROM m_requisitionorder ro
-                JOIN m_requisitionline rl ON ro.m_requisitionline_id = rl.m_requisitionline_id
-            WHERE ro.c_orderline_id = :old.c_orderline_id
-            ORDER BY CASE rl.reqstatus WHEN 'O' THEN 0 ELSE 1 END, rl.needbydate DESC, rl.created DESC
-          ) LOOP
-            v_qtytoremove := LEAST(v_qtypendingtoremove, cur_requisitions.qty);
-            -- Do not remove if quantity is set to zero to keep relation
-            UPDATE m_requisitionorder
-            SET qty = qty - v_qtytoremove
-            WHERE m_requisitionorder_id = cur_requisitions.m_requisitionorder_id;
-            v_qtypendingtoremove := v_qtypendingtoremove - v_qtytoremove;
-            IF (v_qtypendingtoremove = 0) THEN
-              EXIT;
-            END IF;
-          END LOOP;
-        END IF;
-      END;
-    ELSIF (v_count > 0 AND :old.qtyordered < :new.qtyordered) THEN
-      -- Quantity order increase. Add quantity to requisitions.
-      DECLARE
-        TYPE RECORD IS REF CURSOR;
-        cur_requisitions          RECORD;
+          v_requisitionqty      NUMBER;
+          v_qtypendingtoremove  NUMBER;
+          v_qtytoremove         NUMBER;
+        BEGIN
+          SELECT sum(qty) INTO v_requisitionqty
+          FROM m_requisitionorder
+          WHERE c_orderline_id = :OLD.c_orderline_id;
+          IF (v_requisitionqty > :NEW.qtyordered) THEN
+            v_qtypendingtoremove := v_requisitionqty - :new.qtyordered;
+            FOR cur_requisitions IN (
+              SELECT ro.m_requisitionorder_id, ro.qty
+              FROM m_requisitionorder ro
+                  JOIN m_requisitionline rl ON ro.m_requisitionline_id = rl.m_requisitionline_id
+              WHERE ro.c_orderline_id = :old.c_orderline_id
+              ORDER BY CASE rl.reqstatus WHEN 'O' THEN 0 ELSE 1 END, rl.needbydate DESC, rl.created DESC
+            ) LOOP
+              v_qtytoremove := LEAST(v_qtypendingtoremove, cur_requisitions.qty);
+              -- Do not remove if quantity is set to zero to keep relation
+              UPDATE m_requisitionorder
+              SET qty = qty - v_qtytoremove
+              WHERE m_requisitionorder_id = cur_requisitions.m_requisitionorder_id;
+              v_qtypendingtoremove := v_qtypendingtoremove - v_qtytoremove;
+              IF (v_qtypendingtoremove = 0) THEN
+                EXIT;
+              END IF;
+            END LOOP;
+          END IF;
+        END;
+      ELSIF (v_count > 0 AND :old.qtyordered < :new.qtyordered) THEN
+        -- Quantity order increase. Add quantity to requisitions.
+        DECLARE
+          TYPE RECORD IS REF CURSOR;
+          cur_requisitions          RECORD;
 
-        v_requisitionpendingqty   NUMBER;
-        v_qtypendingtoadd         NUMBER;
-        v_qtytoadd                NUMBER;
-      BEGIN
-        SELECT sum(rl.qty - rl.orderedqty) INTO v_requisitionpendingqty
-        FROM m_requisitionline rl 
-        WHERE rl.m_requisitionline_id IN (SELECT ro.m_requisitionline_id 
-                                          FROM m_requisitionorder ro
-                                          WHERE c_orderline_id = :old.c_orderline_id)
-          AND rl.qty > rl.orderedqty;
-        IF (v_requisitionpendingqty > 0) THEN
-          v_qtypendingtoadd := LEAST(v_requisitionpendingqty, :new.qtyordered - :old.qtyordered);
-          FOR cur_requisitions IN (
-            SELECT MAX(m_requisitionorder_id) AS m_requisitionorder_id, rl.qty - rl.orderedqty AS pendingqty
-            FROM m_requisitionorder ro
-                JOIN m_requisitionline rl ON ro.m_requisitionline_id = rl.m_requisitionline_id
-            WHERE ro.c_orderline_id = :old.c_orderline_id
-              AND rl.qty > rl.orderedqty
-              AND rl.reqstatus = 'O'
-            GROUP BY rl.m_requisitionline_id, rl.needbydate, rl.created, rl.qty, rl.orderedqty, rl.reqstatus
-            ORDER BY rl.needbydate ASC, rl.created ASC
-          ) LOOP
-            v_qtytoadd := LEAST(v_qtypendingtoadd, cur_requisitions.pendingqty);
-            UPDATE m_requisitionorder
-            SET qty = qty + v_qtytoadd
-            WHERE m_requisitionorder_id = cur_requisitions.m_requisitionorder_id;
-            v_qtypendingtoadd := v_qtypendingtoadd - v_qtytoadd;
-            IF (v_qtypendingtoadd = 0) THEN
-              EXIT;
-            END IF;
-          END LOOP;
-        END IF;
-      END;
+          v_requisitionpendingqty   NUMBER;
+          v_qtypendingtoadd         NUMBER;
+          v_qtytoadd                NUMBER;
+        BEGIN
+          SELECT sum(rl.qty - rl.orderedqty) INTO v_requisitionpendingqty
+          FROM m_requisitionline rl 
+          WHERE rl.m_requisitionline_id IN (SELECT ro.m_requisitionline_id 
+                                            FROM m_requisitionorder ro
+                                            WHERE c_orderline_id = :old.c_orderline_id)
+            AND rl.qty > rl.orderedqty;
+          IF (v_requisitionpendingqty > 0) THEN
+            v_qtypendingtoadd := LEAST(v_requisitionpendingqty, :new.qtyordered - :old.qtyordered);
+            FOR cur_requisitions IN (
+              SELECT MAX(m_requisitionorder_id) AS m_requisitionorder_id, rl.qty - rl.orderedqty AS pendingqty
+              FROM m_requisitionorder ro
+                  JOIN m_requisitionline rl ON ro.m_requisitionline_id = rl.m_requisitionline_id
+              WHERE ro.c_orderline_id = :old.c_orderline_id
+                AND rl.qty > rl.orderedqty
+                AND rl.reqstatus = 'O'
+              GROUP BY rl.m_requisitionline_id, rl.needbydate, rl.created, rl.qty, rl.orderedqty, rl.reqstatus
+              ORDER BY rl.needbydate ASC, rl.created ASC
+            ) LOOP
+              v_qtytoadd := LEAST(v_qtypendingtoadd, cur_requisitions.pendingqty);
+              UPDATE m_requisitionorder
+              SET qty = qty + v_qtytoadd
+              WHERE m_requisitionorder_id = cur_requisitions.m_requisitionorder_id;
+              v_qtypendingtoadd := v_qtypendingtoadd - v_qtytoadd;
+              IF (v_qtypendingtoadd = 0) THEN
+                EXIT;
+              END IF;
+            END LOOP;
+          END IF;
+        END;
+      END IF;
     END IF;
   END IF;
 
