diff --git a/src/org/openbravo/retail/posterminal/process/GoodsShipmentGenerator.java b/src/org/openbravo/retail/posterminal/process/GoodsShipmentGenerator.java
index 37503fc00..703f5eae5 100644
--- a/src/org/openbravo/retail/posterminal/process/GoodsShipmentGenerator.java
+++ b/src/org/openbravo/retail/posterminal/process/GoodsShipmentGenerator.java
@@ -116,21 +116,25 @@ class GoodsShipmentGenerator {
     BigDecimal quantityPending = qtyToDeliver;
     ScrollableResults proposedBins = null;
     try {
-      proposedBins = StockUtils.getStockProposed(salesOrderLine, qtyToDeliver,
-          this.shipment.getWarehouse());
-      while (quantityPending.compareTo(BigDecimal.ZERO) > 0 && proposedBins.next()) {
-        StockProposed stockProposed = (StockProposed) proposedBins.get(0);
-        BigDecimal shipmentlineQty;
-        BigDecimal stockProposedQty = stockProposed.getQuantity();
-        if (quantityPending.compareTo(stockProposedQty) > 0) {
-          shipmentlineQty = stockProposedQty;
-          quantityPending = quantityPending.subtract(shipmentlineQty);
-        } else {
-          shipmentlineQty = quantityPending;
-          quantityPending = BigDecimal.ZERO;
+      if (product.isStocked()) {
+        proposedBins = StockUtils.getStockProposed(salesOrderLine, qtyToDeliver,
+            this.shipment.getWarehouse());
+        while (quantityPending.compareTo(BigDecimal.ZERO) > 0 && proposedBins.next()) {
+          StockProposed stockProposed = (StockProposed) proposedBins.get(0);
+          BigDecimal shipmentlineQty;
+          BigDecimal stockProposedQty = stockProposed.getQuantity();
+          if (quantityPending.compareTo(stockProposedQty) > 0) {
+            shipmentlineQty = stockProposedQty;
+            quantityPending = quantityPending.subtract(shipmentlineQty);
+          } else {
+            shipmentlineQty = quantityPending;
+            quantityPending = BigDecimal.ZERO;
+          }
+          result.add(createShipmentLine(product, shipmentlineQty, salesOrderLine,
+              stockProposed.getStorageDetail().getStorageBin()));
         }
-        result.add(createShipmentLine(product, shipmentlineQty, salesOrderLine,
-            stockProposed.getStorageDetail().getStorageBin()));
+      } else {
+        result.add(createShipmentLine(product, qtyToDeliver, salesOrderLine, null));
       }
     } finally {
       if (proposedBins != null) {
diff --git a/src/org/openbravo/retail/posterminal/process/IssueSalesOrderLines.java b/src/org/openbravo/retail/posterminal/process/IssueSalesOrderLines.java
index 794ce250e..15e4d10fa 100644
--- a/src/org/openbravo/retail/posterminal/process/IssueSalesOrderLines.java
+++ b/src/org/openbravo/retail/posterminal/process/IssueSalesOrderLines.java
@@ -13,6 +13,7 @@ import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -30,6 +31,7 @@ import org.codehaus.jettison.json.JSONObject;
 import org.openbravo.base.weld.WeldUtils;
 import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.service.OBDal;
+import org.openbravo.dal.service.OBQuery;
 import org.openbravo.erpCommon.utility.OBMessageUtils;
 import org.openbravo.materialmgmt.ServiceDeliverUtility;
 import org.openbravo.model.common.businesspartner.BusinessPartner;
@@ -70,10 +72,13 @@ public class IssueSalesOrderLines extends JSONProcessSimple {
       final JSONArray deliveredOrders = new JSONArray();
       for (int i = 0; i < ordersFromJson.length(); i++) {
         final JSONObject orderFromJson = (JSONObject) ordersFromJson.get(i);
-        JSONArray linesFromJson = orderFromJson.getJSONArray("lines");
+        JSONArray linesFromJson = new JSONArray(orderFromJson.getJSONArray("lines").toString());
         shipmentGenerator = WeldUtils
             .getInstanceFromStaticBeanManager(GoodsShipmentGenerator.class);
         ShipmentInOut shipment = createNewShipment(orderFromJson);
+
+        addLinesForIndependentService(orderFromJson.getString("order"), linesFromJson);
+
         Set<String> orders = new HashSet<>();
         for (int j = 0; j < linesFromJson.length(); j++) {
           JSONObject jsonLine = linesFromJson.getJSONObject(j);
@@ -169,6 +174,59 @@ public class IssueSalesOrderLines extends JSONProcessSimple {
     return orderLine.getDeliveredQuantity();
   }
 
+  private void addLinesForIndependentService(final String orderId, final JSONArray linesFromJson)
+      throws JSONException {
+    // Check Independent Service Exists
+    OBQuery<OrderLine> serviceQuery = OBDal.getInstance()
+        .createQuery(OrderLine.class,
+            " e where e.salesOrder.id=:orderId and e.product.productType = 'S' and e.product.linkedToProduct is false order by lineNo");
+    serviceQuery.setNamedParameter("orderId", orderId);
+    List<OrderLine> serviceList = serviceQuery.list();
+    if (serviceList.isEmpty()) {
+      return;
+    }
+
+    // Check Item Products are delivered
+    OBQuery<OrderLine> productQuery = OBDal.getInstance()
+        .createQuery(OrderLine.class,
+            " e where e.salesOrder.id=:orderId and e.product.productType = 'I' order by e.lineNo");
+    productQuery.setNamedParameter("orderId", orderId);
+    List<OrderLine> productList = productQuery.list();
+    for (OrderLine orderLine : productList) {
+      if (orderLine.getOrderedQuantity().equals(orderLine.getDeliveredQuantity())) {
+        continue;
+      }
+      boolean lineExistsForDelivery = false;
+      boolean hasPendingDelivery = true;
+      for (int j = 0; j < linesFromJson.length(); j++) {
+        JSONObject jsonLine = linesFromJson.getJSONObject(j);
+        BigDecimal qtyToDeliver = new BigDecimal(jsonLine.getString("toPrepare"));
+        if (jsonLine.getString("lineId").equals(orderLine.getId())) {
+          lineExistsForDelivery = true;
+          if (!orderLine.getOrderedQuantity()
+              .equals(orderLine.getDeliveredQuantity().add(qtyToDeliver))) {
+            hasPendingDelivery = false;
+          }
+        }
+      }
+      if (!lineExistsForDelivery || !hasPendingDelivery) {
+        return;
+      }
+    }
+
+    // Add Lines for Delivery
+    for (OrderLine orderLine : serviceList) {
+      JSONObject json = new JSONObject();
+      json.put("lineId", orderLine.getId());
+      json.put("orderId", orderLine.getSalesOrder().getId());
+      json.put("productId", orderLine.getProduct().getId());
+      json.put("qtyOrdered", orderLine.getOrderedQuantity());
+      json.put("qtyDelivered", orderLine.getDeliveredQuantity());
+      json.put("toPrepare", orderLine.getOrderedQuantity());
+      linesFromJson.put(json);
+    }
+  }
+
   /**
    * If an attempt of deliver sales order lines is done on an organization with AWO flow enabled, an
    * error message including an hyperlink is returned. This method removes the hyperlink to simplify
