diff --git a/process/Offer_lib/process.js b/process/Offer_lib/process.js
index f39bf78ac6421e0d3b62894c5cc77441db549945..0665a167aa408eef97b9cca65ce8beab042c8ee4 100644
--- a/process/Offer_lib/process.js
+++ b/process/Offer_lib/process.js
@@ -56,7 +56,7 @@ OfferUtils.getOfferNumberValidationFailString = function() {
 }
     
 OfferUtils.isEditable = function(status) {
-    // TODO: Administrator darf immer ändern, warten auf neue Berechtigungslogik?
+    // TODO: Administrator darf immer �ndern, warten auf neue Berechtigungslogik?
 
     // Offer should be editable if offer state not equals "Sent", "Won" or "Lost"
     return status != "2" && status != "3" && status != "4";
@@ -90,25 +90,53 @@ OfferUtils.openOfferReport = function(pOfferID)
 {    
     var offerReport = new Report("RPTJ_OFFER");  
     
+    var sqlUtil = new SqlMaskingUtils();
+    
     // get data from DB
     // TODO: OFFER.ADDRESS
-    var fields = [/*"OFFER.ADDRESS"*/ "''", "OFFER.CONTACT_ID", "OFFER.LANGUAGE", /*"OFFER.PAYMENTTERMS"*/ "'DUMMY_OFFER.PAYMENTTERMS'", //0 - 3
-    /*"OFFER.DELIVERYTERMS"*/ "'DUMMY_OFFER.DELIVERYTERMS'", "OFFER.OFFERCODE", "OFFER.CURRENCY", "OFFER.OFFERDATE", //   4 - 7
-    "OFFER.OFFERID", "OFFERITEM.OFFER_ID", "OFFERITEM.INFO", "OFFERITEM.ASSIGNEDTO", // 11
-    "OFFERITEM.PRODUCT_ID","OFFERITEM.ITEMNAME" , // 13
-    "OFFERITEM.OPTIONAL", "OFFERITEM.ITEMPOSITION", // 15
-    "PRODUCT.PRODUCTCODE", "PRODUCT.PRODUCTID", "OFFER.HEADER", "OFFERITEM.UNIT", "OFFER.VAT", // 20
-    "COALESCE(OFFERITEM.QUANTITY,0)","COALESCE(OFFERITEM.PRICE,0)", "COALESCE(OFFERITEM.DISCOUNT,0)", // 23
-    "COALESCE(OFFER.VERSNR, 0)", "COALESCE(OFFER.OFFERCODE,0)", "COALESCE(OFFERITEM.VAT, 0)", "0", "''", "SALESPROJECT_ID" ]; // 29
+    var fields = [
+        /*"OFFER.ADDRESS"*/ "''", 
+        "OFFER.CONTACT_ID", 
+        "OFFER.LANGUAGE", 
+        /*"OFFER.PAYMENTTERMS"*/ "'DUMMY_OFFER.PAYMENTTERMS'", // 3
+        /*"OFFER.DELIVERYTERMS"*/ "'DUMMY_OFFER.DELIVERYTERMS'", 
+        "OFFER.OFFERCODE", 
+        "OFFER.CURRENCY", 
+        "OFFER.OFFERDATE", // 7
+        "OFFER.OFFERID", 
+        "OFFERITEM.OFFER_ID", 
+        "OFFERITEM.INFO", 
+        "OFFERITEM.ASSIGNEDTO", // 11
+        "OFFERITEM.PRODUCT_ID",
+        "OFFERITEM.ITEMNAME" , // 13
+        "OFFERITEM.OPTIONAL", 
+        "OFFERITEM.ITEMPOSITION", // 15
+        "PRODUCT.PRODUCTCODE", 
+        "PRODUCT.PRODUCTID", 
+        "OFFER.HEADER", 
+        "OFFERITEM.UNIT", 
+        "OFFER.VAT", // 20
+        sqlUtil.isNull("OFFERITEM.QUANTITY", "0"),
+        sqlUtil.isNull("OFFERITEM.PRICE", "0"),
+        sqlUtil.isNull("OFFERITEM.DISCOUNT", "0"), // 23
+        sqlUtil.isNull("OFFER.VERSNR", "0"),
+        sqlUtil.isNull("OFFER.OFFERCODE", "0"),
+        sqlUtil.isNull("OFFERITEM.VAT", "0"),
+        "0", 
+        "''", 
+        "SALESPROJECT_ID" // 29
+    ]; 
     
     var offerFromSql = " from PRODUCT" 
                      + " inner join OFFERITEM on (PRODUCT.PRODUCTID = OFFERITEM.PRODUCT_ID) "
                      + " inner join OFFER on (OFFERITEM.OFFER_ID = OFFER.OFFERID)";
    
-    var offerCondition = SqlCondition.begin().andPrepare("OFFER.OFFERID", pOfferID);
+    var offerCondition = SqlCondition.begin()
+        .andPrepare("OFFER.OFFERID", pOfferID);
     var rptdata = db.table(offerCondition.buildSql("select " + fields.join(", ") + offerFromSql, "1 = 0"));
     
-    var language = LegacyKeywordUtils.get("LANGUAGE", rptdata[0][2])[1];
+    //TODO: use new keyword logic for language when possible
+    var language = "DE"; // LegacyKeywordUtils.get("LANGUAGE", rptdata[0][2])[1];
     var relid = rptdata[0][1];
     
     // TODO: AddrObject implementieren
@@ -124,6 +152,47 @@ OfferUtils.openOfferReport = function(pOfferID)
     var sums = [];
     var vatsum = 0;
     
+    var data = rptdata.map(function (row)
+    {
+        //quantity * price
+        fullPrice = eMath.mulDec(parseFloat(row[21]), parseFloat(row[22]));
+        
+        if (row[14] != "1") //optional
+        {
+            //itemSum = (fullPrice * (100 - discount)) / 100
+            itemSum = eMath.roundDec(eMath.divDec(eMath.mulDec(fullPrice, eMath.subDec(100, row[23])), 100), 2, eMath.ROUND_HALF_EVEN); //sum of the item
+            sumItemSum += itemSum; //total sum (without vat) 
+        }
+        //vatsum = itemSum * vat / 100
+        vatsum = eMath.divDec(eMath.mulDec(itemSum, row[26]), 100); //vat per product
+        if(row[26] > 0) 
+            sums.push([row[26], vatsum]); //MWSteuerwerte für Map vorbereiten
+        
+        // sumItemSum + vat
+        total = eMath.addDec(sumItemSum, row[20]); //total sum with vat
+        
+        return [
+            row[6], //currency
+            datetime.toDate(row[7], translate.text("dd.MM.yyyy", language)), //offerdate
+            row[8],  //offerId
+            row[10], //info
+            row[11], //assignedTo
+            row[13], //itemname
+            row[14], //optional
+            row[15], //itemposition
+            row[16], //productcode
+            text.html2text(row[18]), //header 
+            text.formatDouble(row[21], translate.text("#,##0"), true),       //quantity
+            text.formatDouble(row[22], translate.text("#,##0.00"), true),    //price
+            text.formatDouble(row[23], translate.text("0.00"), true),        //discount
+            row[24], //versnr
+            row[25], //offercode
+            text.formatDouble(row[26], translate.text("#,##0.00"), true),    //vat
+            text.formatDouble(itemSum, translate.text("#,##0.00"), true),    //itemsum
+            KeywordUtils.getViewValue($KeywordRegistry.get.QuantityUnit, row[19]) //unittext
+        ];
+    });
+    
     // discount-condtion = offerCondition + additional condition. So we can reuse the previous object
     offerCondition.andPrepare("OFFERITEM.DISCOUNT", 0, "# <> ?");
     
@@ -131,70 +200,35 @@ OfferUtils.openOfferReport = function(pOfferID)
                                              .andPrepare("OFFER.OFFERID", pOfferID)
                                              .buildSql("select count(OFFERITEM.DISCOUNT)" + offerFromSql, "1 = 0"));
 
-
-    for(var i = 0; i < rptdata.length; i++)
-    {                
-        var optional = rptdata[i][14];
-        
-        // calculate:
-        // "OFFERITEM_QUANTITY" * "OFFERITEM_PRICE"
-        fullPrice = eMath.mulDec(parseFloat(rptdata[i][21]), parseFloat(rptdata[i][22]) );
-
-        // ( fullPrice * ( 100 - "OFFERITEM_DISCOUNT" ) ) / 100
-        if(optional)
-        {
-            itemSum = eMath.roundDec(eMath.divDec(eMath.mulDec(fullPrice, eMath.subDec(100, rptdata[i][23]) ), 100), 2, eMath.ROUND_HALF_EVEN); //Summe je Artikel
-            sumItemSum += itemSum; //Gesamtsumme aller Artikel      
-        }
-        // itemSum * "OFFERITEM_VAT" / 100
-        vatsum = (eMath.divDec(eMath.mulDec(itemSum, rptdata[i][26] ), 100)); //Steuerbetrag in Euro je Artikel
-        if(rptdata[i][26] > 0) sums.push([rptdata[i][26], vatsum]); //MWSteuerwerte für Map vorbereiten
-        // sumItemSum + "OFFER_VAT"
-        total = eMath.addDec(sumItemSum, rptdata[i][20]); //Gesamtsumme zzgl. MwSt.
-        total = text.formatDouble(total, translate.text("#,##0.00"), true)
-        // format date
-        rptdata[i][7] = datetime.toDate(rptdata[i][7], translate.text("dd.MM.yyyy", language));
-        // format numbers
-        rptdata[i][22] = text.formatDouble(rptdata[i][22], translate.text("#,##0.00"), true);
-        rptdata[i][23] = text.formatDouble(rptdata[i][23], translate.text("0.00"), true);
-        rptdata[i][21] = text.formatDouble(rptdata[i][21], translate.text("#,##0"), true);
-        rptdata[i][26] = text.formatDouble(rptdata[i][26], translate.text("#,##0.00"), true);
-        rptdata[i][27] = text.formatDouble(itemSum, translate.text("#,##0.00"), true); //Immer zwei Nachkommastellen und ',' statt '.' 
-        rptdata[i][28] = KeywordUtils.get("UNIT", rptdata[i][19])[1];
-    }
-    
     // TODO: get Images implementieren
-    var imgData = ["meineFirma | Konrad-Zuse-Straße 4  |  DE 84144 Geisenhausen",
+    var imgData = ["meineFirma | Konrad-Zuse-Straße 4  |  DE 84144 Geisenhausen",
                    "base64:iVBORw0KGgoAAAANSUhEUgAAAM4AAABRCAYAAACaL5lSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDA4QzAyM0IwREIwMTFFNEFGMDREM0VEMjExRjlBRTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDA4QzAyM0MwREIwMTFFNEFGMDREM0VEMjExRjlBRTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMDhDMDIzOTBEQjAxMUU0QUYwNEQzRUQyMTFGOUFFMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMDhDMDIzQTBEQjAxMUU0QUYwNEQzRUQyMTFGOUFFMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhF3nYoAAAlvSURBVHja7J1fjBXV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"]
                 // getMyASYS_ICONSdata();
     
-    var params = {};
-    params["myAddr"] = imgData[0];
-    params["Pos"] = translate.text("Pos.", language);
-    params["Artikelbezeichnung"] = translate.text("Articledescription", language);
-    params["Artikel-Nr"] = translate.text("Articlenumber", language);
-    params["Einzelpreis"] = translate.text("Unitprice", language);
-    params["Menge"] = translate.text("Amount", language);
-    params["UMSt"] = translate.text("UMSt", language);
-    params["Datum"] = 	translate.text("Date", language);
-    params["Nummer"] = translate.text("Number", language);
-    params["Zahlungsbedingung"] = translate.text("Conditions of payment", language);
-    params["Lieferbedingung"] = translate.text("Deliveryspecification", language);
-    params["Rabatt"] =  translate.text("Rabatt", language);
-    params["Gesamt"] =  translate.text("Total", language);
-    params["Summe"] = 	translate.text("Sum", language);
-    params["zzglUMST"] = translate.text("Plus Salestax", language);
-    
-    // TODO: OFFER.ADDRESS 
-    params["OFFERAddr"] = AddressUtils.getAddress(relid).toString(); //rptdata[0][0];
-    // TODO: AddrObject implementieren
-    params["OFFERPers"] = (AddressUtils.getLetterSalutation() + ",").toString(); //addrobj.formatAddress("{ls},");
-    
-    // TODO: payment / delivery-Terms implement (if needed)
-    params["OFFERPay"] = ""//getKeyName(rptdata[0][3] , "PAYMENTTERMS", "KEYNAME1", language);
-    params["OFFERDel"] = ""//getKeyName(rptdata[0][4] , "DELIVERYTERMS", "KEYNAME1", language);
+    var params = {
+        "Zahlungsbedingung" : translate.text("Conditions of payment", language),
+        "Artikelbezeichnung" : translate.text("Articledescription", language),
+        "Lieferbedingung" : translate.text("Deliveryspecification", language),
+        "OFFERPers" : (AddressUtils.getLetterSalutation() + ",").toString(), // TODO: AddrObject implementieren (addrobj.formatAddress("{ls},");)
+        "Artikel-Nr" : translate.text("Articlenumber", language),
+        "OFFERAddr" : AddressUtils.getAddress(relid).toString(), // TODO: OFFER.ADDRESS 
+        "zzglUMST" : translate.text("Plus Salestax", language),
+        "Einzelpreis" : translate.text("Unitprice", language),
+        "Nummer" : translate.text("Number", language),
+        "Rabatt" : translate.text("Rabatt", language),
+        "Menge" : translate.text("Amount", language),
+        "Gesamt" : translate.text("Total", language),
+        "Datum" : translate.text("Date", language),
+        "UMSt" : translate.text("UMSt", language),
+        "Summe" : translate.text("Sum", language),
+        "Pos" : translate.text("Pos.", language),
+        "myAddr" : imgData[0],
+        // TODO: payment / delivery-Terms implement (if needed)
+        "OFFERPay" : "", //getKeyName(rptdata[0][3] , "PAYMENTTERMS", "KEYNAME1", language);
+        "OFFERDel" : "" //getKeyName(rptdata[0][4] , "DELIVERYTERMS", "KEYNAME1", language);
+    };
     
-    // TODO: implementieren wenn Attribute möglich sind
+    // TODO: implementieren wenn Attribute m�glich sind
     var adma = ""
     /*var adm = getAddressData( [GetAttributeKey( "Aussendienst", "1", orgrelid, pUser )[0]],
         [["Person","function", "concat( ['SALUTATION', 'TITLE', 'FIRSTNAME','LASTNAME'])"],
@@ -205,32 +239,66 @@ OfferUtils.openOfferReport = function(pOfferID)
     if (adm[1] != undefined)  adma = adm[1].join("\n");*/
     params["AD_Name"] = adma;
     params["SUMITEMSUM"] = sumItemSum;
-    params["TOTAL"] = total;
+    params["TOTAL"] = text.formatDouble(total, translate.text("#,##0.00"), true);
     params["anzahl"] = countDiscounts;
 
     offerReport.addImage("myLogo", imgData[1]);
 
     offerReport.addSubReportData("subdata", ReportData.begin(["VAT","WERT"]).add(sums));
     offerReport.addReportParams(params);
-    
-    var data = [];
-    for( i = 0; i < rptdata.length; i++)
-    {
-        data[i] = [rptdata[i][6], rptdata[i][7], rptdata[i][8], rptdata[i][10], rptdata[i][11], rptdata[i][13], 
-        rptdata[i][14], rptdata[i][15], rptdata[i][16], rptdata[i][18], rptdata[i][19], //10
-        rptdata[i][22], rptdata[i][23], 
-        rptdata[i][24], rptdata[i][25], rptdata[i][26], rptdata[i][27], rptdata[i][28]];
-    }
-                                                        // 0            1                    2                   3                        4
-    offerReport.setReportData(ReportData.begin(["OFFER_CURRENCY", "OFFER_OFFERDATE", "OFFER_OFFERID",  "OFFERITEM_INFO", "OFFERITEM_ASSIGNEDTO",
-                "OFFERITEM_ITEMNAME" , "OFFERITEM_OPTIONAL", "OFFERITEM_ITEMPOSITION", "PRODUCT_PRODUCTCODE", "OFFER_HEADER", // 9
-                "OFFERITEM_QUANTITY", "OFFERITEM_PRICE", "OFFERITEM_DISCOUNT", "OFFER_VERSNR", "OFFER_OFFERCODE", "OFFERITEM_VAT", "ITEMSUM", // 16
-                "OFFERITEM_UNITTEXT"]) // 17
-                .add(data));
+
+    offerReport.setReportData(ReportData.begin(
+        [
+            "OFFER_CURRENCY", 
+            "OFFER_OFFERDATE", 
+            "OFFER_OFFERID",  
+            "OFFERITEM_INFO", 
+            "OFFERITEM_ASSIGNEDTO",
+            "OFFERITEM_ITEMNAME" , 
+            "OFFERITEM_OPTIONAL", 
+            "OFFERITEM_ITEMPOSITION", 
+            "PRODUCT_PRODUCTCODE", 
+            "OFFER_HEADER", // 9
+            "OFFERITEM_QUANTITY", 
+            "OFFERITEM_PRICE", 
+            "OFFERITEM_DISCOUNT", 
+            "OFFER_VERSNR", 
+            "OFFER_OFFERCODE", 
+            "OFFERITEM_VAT", 
+            "ITEMSUM", // 16
+            "OFFERITEM_UNITTEXT" //17
+        ])
+        .add(data));
     
     offerReport.openReport();
 }
 
+/**
+ * opens an order in NEW mode with values from an offer
+ * 
+ * @param pOfferId {String} id of the offer
+ * @param pSalesprojectId {String} salesproject id
+ * @param pContactId {String} contact id
+ * @param pLanguage {String} language
+ * @param pCurrency {String} [currency=""]
+ * @param pAddress {String} [address=""]
+ * @param pHeader {String} [header=""]
+ */
+OfferUtils.copyToOrder = function (pOfferId, pSalesprojectId, pContactId, pLanguage, pCurrency, pAddress, pHeader)
+{
+    var params = {
+        "ContactId_param" : pContactId,
+        "SalesprojectId_param" : pSalesprojectId,
+        "OrderLanguage_param" : pLanguage,
+        "OfferId_param" : pOfferId,
+        "OrderCurrency_param" : pCurrency || "",
+        "OrderAddress_param" : pAddress || "",
+        "OrderHeader_param" : pHeader || ""
+    };
+    neon.openContext("Order_context", null, null, neon.OPERATINGSTATE_NEW, params);
+}
+
+
 /******************************************************************************/
 
 /**
diff --git a/report/RPTJ_OFFER/reportData.jrxml b/report/RPTJ_OFFER/reportData.jrxml
index cfa817363bd7a7f089a2ecadd40fe74323d89fe6..cc52933641c4cd1a47ce046eb76845e4862a400d 100644
--- a/report/RPTJ_OFFER/reportData.jrxml
+++ b/report/RPTJ_OFFER/reportData.jrxml
@@ -125,12 +125,13 @@
 				</textField>
 			</band>
 			<band height="20">
-				<componentElement>
-					<reportElement mode="Transparent" x="20" y="0" width="535" height="20" uuid="bb9d7d02-c2a6-4f60-94e9-f0912135dbeb"/>
-					<hc:html xmlns:hc="http://jasperreports.sourceforge.net/htmlcomponent" xsi:schemaLocation="http://jasperreports.sourceforge.net/htmlcomponent http://jasperreports.sourceforge.net/xsd/htmlcomponent.xsd" scaleType="RetainShape" horizontalAlign="Left" verticalAlign="Middle">
-						<hc:htmlContentExpression><![CDATA[$F{OFFER_HEADER}]]></hc:htmlContentExpression>
-					</hc:html>
-				</componentElement>
+				<textField>
+					<reportElement x="20" y="0" width="535" height="20" uuid="8d10af04-82a4-4344-ae98-de42c82a674e"/>
+					<textElement>
+						<font fontName="Segoe UI" size="8"/>
+					</textElement>
+					<textFieldExpression><![CDATA[$F{OFFER_HEADER}]]></textFieldExpression>
+				</textField>
 			</band>
 			<band height="42">
 				<staticText>