diff --git a/src/org/openbravo/retail/posterminal/ExternalOrderLoader.java b/src/org/openbravo/retail/posterminal/ExternalOrderLoader.java
--- a/src/org/openbravo/retail/posterminal/ExternalOrderLoader.java
+++ b/src/org/openbravo/retail/posterminal/ExternalOrderLoader.java
@@ -331,8 +331,6 @@
         resolveJsonValue(Currency.ENTITY_NAME, orderJson.getString("currency"), new String[] {
             "id", "iSOCode" }));
 
-    setBusinessPartnerInformation(orderJson);
-
     if (orderJson.has("salesRepresentative")) {
       orderJson.put(
           "salesRepresentative",
@@ -355,7 +353,6 @@
     copyPropertyValue(orderJson, "grossAmount", "gross");
     copyPropertyValue(orderJson, "netAmount", "net");
 
-    transformTaxes(orderJson.getJSONObject("taxes"));
     transformLines(orderJson);
     transformPayments(orderJson);
   }
@@ -368,6 +365,8 @@
     }
     final String step = orderJson.getString("step");
     if ("create".equals(step)) {
+      setBusinessPartnerInformation(orderJson);
+      transformTaxes(orderJson.getJSONObject("taxes"));
       orderJson.put("payment", -1);
       orderJson.put("generateInvoice", false);
       orderJson.put("generateShipment", false);
@@ -382,9 +381,13 @@
       orderJson.put("generateShipment", true);
       orderJson.put("isLayaway", true);
     } else if ("all".equals(step)) {
+      setBusinessPartnerInformation(orderJson);
+      transformTaxes(orderJson.getJSONObject("taxes"));
       copyPropertyValue(orderJson, "grossAmount", "payment");
       // do nothing
     } else {
+      setBusinessPartnerInformation(orderJson);
+      transformTaxes(orderJson.getJSONObject("taxes"));
       log.warn("Step value " + step + " not recognized, order " + orderJson + " assuming all");
       copyPropertyValue(orderJson, "grossAmount", "payment");
     }
@@ -462,7 +465,8 @@
           }
         }
         if (relatedOrderLineId == null) {
-          throw new OBException("Related line information can't be resolved, line " + relatedLine + " of order line " + lineJson + " of order "+ orderJson);
+          throw new OBException("Related line information can't be resolved, line " + relatedLine
+              + " of order line " + lineJson + " of order " + orderJson);
         }
         relatedLine.put("orderlineId", relatedOrderLineId);
       }
@@ -676,8 +680,9 @@
   }
 
   /**
-   * Can be overridden by subclass to add other specific ways of finding a product. By default returns null. Is only called if a
-   * product could not be found using the standard approach of searching by id, searchKey, name, etc.
+   * Can be overridden by subclass to add other specific ways of finding a product. By default
+   * returns null. Is only called if a product could not be found using the standard approach of
+   * searching by id, searchKey, name, etc.
    * 
    * @param lineJson
    *          the orderline json
@@ -742,7 +747,9 @@
     defaultJson.put("approvals", new JSONArray());
     defaultJson.put("lines", new JSONArray());
     defaultJson.put("payments", new JSONArray());
-    defaultJson.put("taxes", new JSONObject());
+    if (orderJson.has("taxes")) {
+      defaultJson.put("taxes", new JSONObject());
+    }
     defaultJson.put("change", 0);
     defaultJson.put("timezoneOffset", 0);
     defaultJson.put("generateInvoice", false);
@@ -906,8 +913,8 @@
   }
 
   /**
-   * Search for the id of referenced entity by querying the entities for each of its properties (passed as a parameter) using the
-   * searchValue
+   * Search for the id of referenced entity by querying the entities for each of its properties
+   * (passed as a parameter) using the searchValue
    * 
    * @param entityName
    *          the entity to search for
@@ -927,8 +934,8 @@
   }
 
   /**
-   * Same as {@link #resolveJsonValue(String, String, String...)}, except will return null if the value does not resolve to an
-   * instance and will not throw an exception in that case.
+   * Same as {@link #resolveJsonValue(String, String, String...)}, except will return null if the
+   * value does not resolve to an instance and will not throw an exception in that case.
    */
   private String resolveJsonValueNoException(String entityName, String searchValue,
       String... properties) {
@@ -970,8 +977,9 @@
   }
 
   /**
-   * @deprecated by default this one now returns null. It is still called to provide backward compatibility for overriding
-   *             classes. If not overridden then the new logic in the {@link DefaultDataResolver} is used.
+   * @deprecated by default this one now returns null. It is still called to provide backward
+   *             compatibility for overriding classes. If not overridden then the new logic in the
+   *             {@link DefaultDataResolver} is used.
    */
   protected String resolve(String entityName, String property, String value) {
     return null;
@@ -1007,11 +1015,12 @@
   }
 
   /**
-   * Interface which can be implemented by modules to resolving data in different ways. Is only called if the ExternalOrderLoader
-   * can not resolve the reference using its own internal logic. The order by which data resolvers are called is undetermined.
+   * Interface which can be implemented by modules to resolving data in different ways. Is only
+   * called if the ExternalOrderLoader can not resolve the reference using its own internal logic.
+   * The order by which data resolvers are called is undetermined.
    * 
-   * A data resolver will be called for all types of entities. So when implementing you should only handle the ones you can handle
-   * and return null in other cases.
+   * A data resolver will be called for all types of entities. So when implementing you should only
+   * handle the ones you can handle and return null in other cases.
    * 
    * @author mtaal
    */
