diff --git a/htdocs/webservices/server_invoice.php b/htdocs/webservices/server_invoice.php
index 54f5e3c564c388b2216519e27153fac68d6feafa..2150017577ba4a40d64c92628f3ca7c396923b2d 100644
--- a/htdocs/webservices/server_invoice.php
+++ b/htdocs/webservices/server_invoice.php
@@ -30,6 +30,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/ws.lib.php';
 require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
 
 require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
+require_once DOL_DOCUMENT_ROOT.'/commande/class/commande.class.php';
 
 
 dol_syslog("Call Dolibarr webservices interfaces");
@@ -253,9 +254,9 @@ $server->register(
 $server->register(
 		'createInvoiceFromOrder',
 		// Entry values
-		array('authentication'=>'tns:authentication','invoice'=>'tns:invoice'),
+		array('authentication'=>'tns:authentication','id_order'=>'xsd:string','ref_order'=>'xsd:string','ref_ext_order'=>'xsd:string'),
 		// Exit values
-		array('result'=>'tns:result','invoice'=>'tns:invoice'),
+		array('result'=>'tns:result','id'=>'xsd:string','ref'=>'xsd:string','ref_ext'=>'xsd:string'),
 		$ns,
 		$ns.'#createInvoiceFromOrder',
 		$styledoc,
@@ -652,13 +653,9 @@ function createInvoice($authentication,$invoice)
  * @param	string      $id_order			id of order to copy invoice from
  * @param	string      $ref_order			ref of order to copy invoice from
  * @param	string      $ref_ext_order		ref_ext of order to copy invoice from
- * @param	string      $id_invoice			invoice id
- * @param	string      $ref_invoice		invoice ref
- * @param	string      $ref_ext_invoice	invoice ref_ext
  * @return	array							Array result
  */
-function createInvoiceFromOrder($authentication,$id_order='', $ref_order='', $ref_ext_order='', 
-		$id_invoice='', $ref_invoice='', $ref_ext_invoice='')
+function createInvoiceFromOrder($authentication,$id_order='', $ref_order='', $ref_ext_order='')
 {
 	global $db,$conf;
 
@@ -679,8 +676,6 @@ function createInvoiceFromOrder($authentication,$id_order='', $ref_order='', $re
 	// Check parameters
 	if (empty($id_order) && empty($ref_order) && empty($ref_ext_order))	{
 		$error++; $errorcode='KO'; $errorlabel="order id or ref or ref_ext is mandatory.";
-	} else if (empty($id_invoice) && empty($ref_invoice) && empty($ref_ext_invoice))	{
-		$error++; $errorcode='KO'; $errorlabel="invoice id or ref or ref_ext is mandatory.";
 	}
 	
 	//////////////////////
@@ -734,8 +729,7 @@ function createInvoiceFromOrder($authentication,$id_order='', $ref_order='', $re
 	}
 	else
 	{
-		$objectresp = array('result'=>array('result_code'=>'OK', 'result_label'=>''),'invoice'=>$newobject);
-		
+		$objectresp= array('result'=>array('result_code'=>'OK', 'result_label'=>''),'id'=>$newobject->id,'ref'=>$newobject->ref,'ref_ext'=>$newobject->ref_ext);
 	}
 	
 	return $objectresp;
@@ -795,7 +789,7 @@ function updateInvoice($authentication,$invoice)
 					{
 						// Define output language
 						$outputlangs = $langs;
-						$order->generateDocument($invoice->modelpdf, $outputlangs);		
+						$object->generateDocument($object->modelpdf, $outputlangs);
 					}
 				}
 				if ($invoice['status'] == Facture::STATUS_CLOSED)
diff --git a/htdocs/webservices/server_order.php b/htdocs/webservices/server_order.php
index f477ccfed9cf66d2a3f0366b168f964d98ef2637..b0f794dd55fb1b64c200554a7a974ac3f21e4371 100644
--- a/htdocs/webservices/server_order.php
+++ b/htdocs/webservices/server_order.php
@@ -325,7 +325,7 @@ $server->register(
 
 $server->register(
 		'validOrder',
-		array('authentication'=>'tns:authentication','id'=>'xsd:string'),	// Entry values
+		array('authentication'=>'tns:authentication','id'=>'xsd:string','id_warehouse'=>'xsd:string'),  // Entry values
 		array('result'=>'tns:result'),	// Exit values
 		$ns,
 		$ns.'#validOrder',
@@ -795,7 +795,7 @@ function createOrder($authentication,$order)
  * @param	int			$id					Id of order to validate
  * @return	array							Array result
  */
-function validOrder($authentication,$id='')
+function validOrder($authentication,$id='',$id_warehouse=0)
 {
 	global $db,$conf,$langs;
 
@@ -821,7 +821,8 @@ function validOrder($authentication,$id='')
 			$db->begin();
 			if ($result > 0)
 			{
-				$result=$order->valid($fuser);
+
+				$result=$order->valid($fuser,$id_warehouse);
 
 				if ($result	>= 0)
 				{
diff --git a/htdocs/webservices/server_payment.php b/htdocs/webservices/server_payment.php
new file mode 100644
index 0000000000000000000000000000000000000000..e8e4f5e1cb0a996f74811819e739eb6670e2b701
--- /dev/null
+++ b/htdocs/webservices/server_payment.php
@@ -0,0 +1,218 @@
+<?php
+/* Copyright (C) 2006-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * The payment webservice was initially created by Nicolas Nunge <me@nikkow.eu>
+ */
+
+/**
+ *       \file       htdocs/webservices/server_payment.php
+ *       \brief      File that is entry point to call Dolibarr WebServices
+ */
+
+// This is to make Dolibarr working with Plesk
+set_include_path($_SERVER['DOCUMENT_ROOT'].'/htdocs');
+
+require_once '../master.inc.php';
+require_once NUSOAP_PATH.'/nusoap.php';                // Include SOAP
+require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/core/lib/ws.lib.php';
+require_once DOL_DOCUMENT_ROOT.'/user/class/user.class.php';
+
+require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
+require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php';
+
+
+dol_syslog("Call Dolibarr webservices interfaces");
+
+$langs->load("main");
+
+// Enable and test if module web services is enabled
+if (empty($conf->global->MAIN_MODULE_WEBSERVICES))
+{
+       $langs->load("admin");
+       dol_syslog("Call Dolibarr webservices interfaces with module webservices disabled");
+       print $langs->trans("WarningModuleNotActive",'WebServices').'.<br><br>';
+       print $langs->trans("ToActivateModule");
+       exit;
+}
+
+// Create the soap Object
+$server                              = new nusoap_server();
+$server->soap_defencoding            = 'UTF-8';
+$server->decode_utf8                 = false;
+$ns                                  = 'http://www.dolibarr.org/ns/';
+$server->configureWSDL('WebServicesDolibarrPayment',$ns);
+$server->wsdl->schemaTargetNamespace = $ns;
+
+
+// Define WSDL Authentication object
+$server->wsdl->addComplexType(
+    'authentication',
+    'complexType',
+    'struct',
+    'all',
+    '',
+    array(
+        'dolibarrkey'       => array('name'=>'dolibarrkey','type'=>'xsd:string'),
+       'sourceapplication' => array('name'=>'sourceapplication','type'=>'xsd:string'),
+       'login'             => array('name'=>'login','type'=>'xsd:string'),
+        'password'          => array('name'=>'password','type'=>'xsd:string'),
+        'entity'            => array('name'=>'entity','type'=>'xsd:string')
+    )
+);
+// Define WSDL Return object
+$server->wsdl->addComplexType(
+    'result',
+    'complexType',
+    'struct',
+    'all',
+    '',
+    array(
+        'result_code'  => array('name'=>'result_code','type'=>'xsd:string'),
+        'result_label' => array('name'=>'result_label','type'=>'xsd:string'),
+    )
+);
+
+// Define WSDL for Payment object
+$server->wsdl->addComplexType(
+    'payment',
+    'complexType',
+    'struct',
+    'all',
+    '',
+    array(
+        'amount'          => array('name'=>'amount','type'=>'xsd:double'),
+        'num_paiement'    => array('name'=>'num_paiement','type'=>'xsd:string'),
+        'thirdparty_id'   => array('name'=>'thirdparty_id','type'=>'xsd:int'),
+               'bank_account'    => array('name'=>'bank_account','type'=>'xsd:int'),
+               'payment_mode_id' => array('name'=>'payment_mode_id','type'=>'xsd:int'),
+               'invoice_id'      => array('name'=>'invoice_id','type'=>'xsd:int'),
+               'int_label'       => array('name'=>'int_label','type'=>'xsd:string'),
+               'emitter'         => array('name'=>'emitter','type'=>'xsd:string'),
+               'bank_source'     => array('name'=>'bank_source','type'=>'xsd:string'),
+    )
+);
+
+// 5 styles: RPC/encoded, RPC/literal, Document/encoded (not WS-I compliant), Document/literal, Document/literal wrapped
+// Style merely dictates how to translate a WSDL binding to a SOAP message. Nothing more. You can use either style with any programming model.
+// http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/
+$styledoc = 'rpc';       // rpc/document (document is an extend into SOAP 1.0 to support unstructured messages)
+$styleuse = 'encoded';   // encoded/literal/literal wrapped
+// Better choice is document/literal wrapped but literal wrapped not supported by nusoap.
+
+// Register WSDL
+$server->register(
+    'createPayment',
+    // Entry values
+    array('authentication'=>'tns:authentication','payment'=>'tns:payment'),
+    // Exit values
+    array('result'=>'tns:result','id'=>'xsd:string','ref'=>'xsd:string','ref_ext'=>'xsd:string'),
+    $ns,
+    $ns.'#createPayment',
+    $styledoc,
+    $styleuse,
+    'WS to create a new payment'
+);
+
+/**
+ * Create a payment
+ *
+ * @param      array           $authentication         Array of authentication information
+ * @param      Facture         $invoice                        Invoice
+ * @return     array                                                   Array result
+ */
+function createPayment($authentication, $payment)
+{
+    global $db,$conf,$langs;
+
+    $now = dol_now();
+
+    dol_syslog("Function: createPayment login=".$authentication['login']." id=".$payment->id.
+               ", ref=".$payment->ref.", ref_ext=".$payment->ref_ext);
+
+    if ($authentication['entity']) $conf->entity=$authentication['entity'];
+
+    // Init and check authentication
+    $objectresp = array();
+    $errorcode  = '';
+       $errorlabel = '';
+    $error      = 0;
+    $fuser      = check_authentication($authentication,$error,$errorcode,$errorlabel);
+
+    // Check parameters
+    if (empty($payment['amount']) && empty($payment['thirdparty_id'])) {
+       $error++;
+               $errorcode  ='KO';
+               $errorlabel ="You must specify the amount and the third party's ID.";
+    }
+
+    if (! $error)
+    {
+               $soc = new Societe($db);
+        $res = $soc->fetch($payment['thirdparty_id']);
+
+               $new_payment               = new Paiement($db);
+               $new_payment->amount       = doubleval($payment['amount']);
+               $new_payment->num_paiement = $payment['num_paiement'];
+               $new_payment->bank_account = intval($payment['bank_account']);
+               $new_payment->paiementid   = !empty($payment['payment_mode_id']) ? intval($payment['payment_mode_id']) : $soc->mode_reglement_id;
+               $new_payment->datepaye     = $now;
+               $new_payment->author       = $payment['thirdparty_id'];
+               $new_payment->amounts      = array();
+
+               if(intval($payment['invoice_id']) > 0) {
+                       $new_payment->amounts[ $payment['invoice_id'] ] = $new_payment->amount;
+               }
+
+        $db->begin();
+               $result = $new_payment->create($fuser, true);
+
+               if($payment['bank_account']) {
+                       $new_payment->addPaymentToBank($fuser, 'payment', $payment['int_label'], $payment['bank_account'], $payment['emitter'], $payment['bank_source']);
+               }
+
+        if ($result < 0)
+        {
+            $error++;
+        }
+
+        if (! $error)
+        {
+            $db->commit();
+            $objectresp=array('result'=>array('result_code'=>'OK', 'result_label'=>''),'id'=>$new_payment->id);
+        }
+        else
+        {
+            $db->rollback();
+            $error++;
+            $errorcode='KO';
+            $errorlabel=$new_payment->error;
+            dol_syslog("Function: createInvoice error while creating".$errorlabel);
+        }
+    }
+
+    if ($error)
+    {
+        $objectresp = array('result'=>array('result_code' => $errorcode, 'result_label' => $errorlabel));
+    }
+
+    return $objectresp;
+}
+
+// Return the results.
+$server->service(file_get_contents("php://input"));