Index: /xmlTools/trunk/posUpdate/ParametersParser.cs
===================================================================
--- /xmlTools/trunk/posUpdate/ParametersParser.cs	(revision 741)
+++ /xmlTools/trunk/posUpdate/ParametersParser.cs	(revision 742)
@@ -15,4 +15,5 @@
         private static string globalElement="";
         private static string globalParentElement="";
+        private static bool globalNoBackups = false;
 
         [Verb]
@@ -22,5 +23,5 @@
         {
             initialChecks();
-            XmlTools myTools = new XmlTools(globalElement, globalParentElement);
+            XmlTools myTools = new XmlTools(globalElement, globalParentElement, globalNoBackups);
             List<string> filesToProcess = getFilesToProcess(globalFileName);
             foreach (string currentFile in filesToProcess)
@@ -37,5 +38,5 @@
         {
             initialChecks();
-            XmlTools myTools = new XmlTools(globalElement, globalParentElement);
+            XmlTools myTools = new XmlTools(globalElement, globalParentElement, globalNoBackups);
             List<string> filesToProcess = getFilesToProcess(globalFileName);
             foreach (string currentFile in filesToProcess)
@@ -58,5 +59,5 @@
         {
             initialChecks();
-            XmlTools myTools = new XmlTools(globalElement, globalParentElement);
+            XmlTools myTools = new XmlTools(globalElement, globalParentElement, globalNoBackups);
             List<string> filesToProcess = getFilesToProcess(globalFileName);
             foreach (string currentFile in filesToProcess)
@@ -71,5 +72,5 @@
         {
             initialChecks();
-            XmlTools myTools = new XmlTools(globalElement, globalParentElement);
+            XmlTools myTools = new XmlTools(globalElement, globalParentElement, globalNoBackups);
             List<string> filesToProcess = getFilesToProcess(globalFileName);
             foreach (string currentFile in filesToProcess)
@@ -86,5 +87,5 @@
             )
         {
-            XmlTools myTools = new XmlTools(globalElement, globalParentElement);
+            XmlTools myTools = new XmlTools(globalElement, globalParentElement, globalNoBackups);
             List<string> filesToProcess = getFilesToProcess(globalFileName);
             foreach (string currentFile in filesToProcess)
@@ -102,5 +103,5 @@
         {
             initialChecks();
-            XmlTools myTools = new XmlTools(globalElement, globalParentElement);
+            XmlTools myTools = new XmlTools(globalElement, globalParentElement, globalNoBackups);
             List<string> filesToProcess = getFilesToProcess(globalFileName);
             foreach (string currentFile in filesToProcess)
@@ -131,9 +132,9 @@
             if (forceInFiles != "")
             {
-                myPatch = new XmlPatch(globalFileName, forceInFiles);
+                myPatch = new XmlPatch(globalFileName, forceInFiles, globalNoBackups);
             }
             else
             {
-                myPatch = new XmlPatch(globalFileName);
+                myPatch = new XmlPatch(globalFileName, globalNoBackups);
             }
 
@@ -149,7 +150,7 @@
 
         // Global Parameters
-        [Global]
+        [Global(Description = "Filename to apply the operations (with patchFile specifies the patch filename). Wildcards accepted for multiple files. No filename = search all .xml files in current path.")]
         public static void fileName(
-             [Parameter(Required = true, Description = "Filename to apply the operations (with patchFile specifies the patch filename). Wildcards accepted for multiple files. No filename = search all .xml files in current path.")] string filename // xml filename. Wildcards accepted.
+             [Parameter(Required = true)] string filename // xml filename. Wildcards accepted.
             )
         {
@@ -157,7 +158,7 @@
         }
 
-        [Global]
+        [Global(Description = "Element to apply the operation.")]
         public static void element(
-             [Parameter(Required = true, Description = "Element to apply the operation.")] string element
+             [Parameter(Required = true)] string element
             )
         {
@@ -165,7 +166,7 @@
         }
 
-        [Global]
+        [Global(Description = "Parent of the Element to apply the operation.")]
         public static void parElement(
-             [Parameter(Required = true, Description = "Parent of the Element to apply the operation.")] string parentElement
+             [Parameter(Required = true)] string parentElement
             )
         {
@@ -173,24 +174,9 @@
         }
 
-        //[PreVerbExecution]
-        //private static void InitialChecks(PreVerbExecutionContext context)
-        //{
-        //    bool elementFound = false;
-        //    foreach(ParameterAndValue param in context.Parameters){
-        //        if (param.Parameter.Names[0] == "element")
-        //        {
-        //            if(!String.IsNullOrEmpty(param.Value.ToString().Trim())){
-        //                elementFound = true;
-        //            }
-        //            break;
-        //        }
-        //    }
-        //    if (!elementFound)
-        //    {
-        //        Console.Error.WriteLine("You must specify the element parameter where the operations will be processed.");
-        //        Console.ReadLine();
-        //        System.Environment.Exit(1);
-        //    }
-        //}
+        [Global(Description = "Don't make backup of the files modified. Improves the overall program processing performance.")]
+        public static void noBackups()
+        {
+            globalNoBackups = true;
+        }
 
         // Private functions
Index: /xmlTools/trunk/posUpdate/Program.cs
===================================================================
--- /xmlTools/trunk/posUpdate/Program.cs	(revision 741)
+++ /xmlTools/trunk/posUpdate/Program.cs	(revision 742)
@@ -11,5 +11,5 @@
     class Program
     {
-        public static readonly string toolsVersion = "0.7d";
+        public static readonly string toolsVersion = "0.8";
 
         public enum appErrors
@@ -43,5 +43,5 @@
         }
 
-        static void Main(string[] args)
+        public static void Main(string[] args)
         {
             try
Index: /xmlTools/trunk/posUpdate/Util.cs
===================================================================
--- /xmlTools/trunk/posUpdate/Util.cs	(revision 741)
+++ /xmlTools/trunk/posUpdate/Util.cs	(revision 742)
@@ -137,4 +137,9 @@
             return Type.GetType("Mono.Runtime") != null;
         }
+
+        public static bool ContainsIgnoreCase(string source, string sToSearch)
+        {
+            return source.IndexOf(sToSearch, StringComparison.OrdinalIgnoreCase) >= 0;
+        }
     }
 }
Index: /xmlTools/trunk/posUpdate/XmlPatch.cs
===================================================================
--- /xmlTools/trunk/posUpdate/XmlPatch.cs	(revision 741)
+++ /xmlTools/trunk/posUpdate/XmlPatch.cs	(revision 742)
@@ -14,14 +14,17 @@
         String fileName;
         String forceFiles = "";
-
-        public XmlPatch(String file)
+        bool globalNoBackups = false;
+
+        public XmlPatch(String file, bool noBackups)
         {
             fileName = file;
-        }
-
-        public XmlPatch(String file, String forceInFiles)
+            globalNoBackups = noBackups;
+        }
+
+        public XmlPatch(String file, String forceInFiles, bool noBackups)
         {
             fileName = file;
             forceFiles = forceInFiles; //We support apply the operation in diverse forced files (NameOfFile parameter will be ignored)
+            globalNoBackups = noBackups;
         }
 
@@ -135,6 +138,8 @@
             foreach (String currFile in filesToProcess)
             {
-
-                Util.backupFile(currFile);
+                if (!this.globalNoBackups && !Util.ContainsIgnoreCase(operation, "NoBackups")) // only skip backup if specified via global parameter or in patch file
+                {
+                    Util.backupFile(currFile);
+                }
 
                 XmlDocument xdoc = new XmlDocument();
@@ -228,5 +233,8 @@
             {
 
-                Util.backupFile(currFile);
+                if (!this.globalNoBackups && !Util.ContainsIgnoreCase(operation, "NoBackups")) // only skip backup if specified via global parameter or in patch file
+                {
+                    Util.backupFile(currFile);
+                }
 
                 XmlDocument xdoc = new XmlDocument();
@@ -288,5 +296,5 @@
                     else
                     {
-                        command = command.Insert(command.Length-1," -filename:" + this.forceFiles); // -2 to be inside quotes
+                        command = command.Insert(command.Length-1," -filename:" + this.forceFiles); // -1 to be inside quotes
                     }
 
@@ -305,32 +313,12 @@
                 }
 
+                if (this.globalNoBackups && !Util.ContainsIgnoreCase(command,"nobackups")) // add noBackup flag if provided as global parameter
+                {
+                    command = command.Insert(command.Length - 1, " -nobackups"); // -1 to be inside quotes
+                }
+
                 command = command.Replace("\"", ""); // remove quotes
 
-                ProcessStartInfo startInfo = new ProcessStartInfo();
-                if (!Util.IsRunningOnMono())
-                {
-                    startInfo.FileName = Util.getExeFileName();
-                }
-                else{
-                    startInfo.FileName = "mono";
-                }
-                if (!Util.IsRunningOnMono())
-                {
-                    startInfo.Arguments = command;
-                }
-                else{
-                    startInfo.Arguments = Util.getExeFileName() + " " + command;
-                }
-                startInfo.UseShellExecute = false; // necessary to redirect output
-                startInfo.RedirectStandardOutput = true;
-                startInfo.RedirectStandardError = true;
-                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; // hide new process window
-
-                Process p = System.Diagnostics.Process.Start(startInfo);
-                p.OutputDataReceived += commandStdOutputReceived;
-                p.ErrorDataReceived += commandStdErrorReceived;
-                p.BeginOutputReadLine();
-                p.BeginErrorReadLine();
-                p.WaitForExit();
+                Program.Main(command.Split(' ')); // use the current process is more efficient than start a new one
             }
             catch (Exception e)
@@ -341,47 +329,4 @@
 
             return true;
-        }
-
-        /// <summary>
-        /// Reads asynchronously output from the new process where the command will be executed
-        /// </summary>
-        /// <param name="sender"></param>
-        /// <param name="e"></param>
-        private void commandStdOutputReceived(object sender, DataReceivedEventArgs e)
-        {
-
-            string myData = e.Data;
-
-            if (myData != null)
-            {
-                if (myData.EndsWith("\n"))
-                {
-                    Console.Write(myData);
-                }
-                else
-                {
-                    Console.WriteLine(myData);
-                }
-            }
-
-        }
-
-        private void commandStdErrorReceived(object sender, DataReceivedEventArgs e)
-        {
-
-            string myData = e.Data;
-
-            if (myData != null)
-            {
-                if (myData.EndsWith("\n"))
-                {
-                    Console.Error.Write(myData);
-                }
-                else
-                {
-                    Console.Error.WriteLine(myData);
-                }
-            }
-
         }
 
Index: /xmlTools/trunk/posUpdate/XmlTools.cs
===================================================================
--- /xmlTools/trunk/posUpdate/XmlTools.cs	(revision 741)
+++ /xmlTools/trunk/posUpdate/XmlTools.cs	(revision 742)
@@ -10,15 +10,17 @@
         private XmlDocument xdoc;
         private string posElement, posParentElement;
-
-        /// <summary>
+        private bool noBackups;
+
         /// Our constructor
+        /// <summary>
         /// </summary>
         /// <param name="file"></param>
         /// <param name="posElement"></param>
         /// <param name="posParentElement"></param>
-        public XmlTools(string posElement, string posParentElement = "")
+        public XmlTools(string posElement, string posParentElement = "", bool noBackups = false)
         {
             this.posElement = posElement;
             this.posParentElement = posParentElement;
+            this.noBackups = noBackups;
         }
 
@@ -30,9 +32,12 @@
         public void replaceAll(string file, string value, string valuePositions = "")
         {
-            Util.backupFile(file);
-            loadXmlFile(file);
-
-            List<XmlNode> myElements = new List<XmlNode>();
-            Util.getAllSpecificElements(xdoc.DocumentElement, ref myElements,this.posElement,this.posParentElement); //Returns all after "Oni" element
+            if (!this.noBackups)
+            {
+                Util.backupFile(file);
+            }
+            loadXmlFile(file);
+
+            List<XmlNode> myElements = new List<XmlNode>();
+            Util.getAllSpecificElements(xdoc.DocumentElement, ref myElements, this.posElement, this.posParentElement); //Returns all after "Oni" element
 
             if (valuePositions != "")
@@ -71,5 +76,8 @@
         public void addValues(string file, string values)
         {
-            Util.backupFile(file);
+            if (!this.noBackups)
+            {
+                Util.backupFile(file);
+            }
             loadXmlFile(file);
 
@@ -89,5 +97,6 @@
                     XmlTextValue myXmlSubValues = new XmlTextValue(element.InnerText);
 
-                    foreach(String myInputValue in myInputValues.myValues){
+                    foreach (String myInputValue in myInputValues.myValues)
+                    {
                         bool alreadyExists = false;
                         foreach (String myXmlSubValue in myXmlSubValues.myValues)
@@ -103,5 +112,5 @@
                         if (!alreadyExists)
                         {
-                            element.InnerText += " "+myInputValue;
+                            element.InnerText += " " + myInputValue;
                         }
                     }
@@ -119,5 +128,8 @@
         public void replaceValue(string file, string oldValue, string newValue)
         {
-            Util.backupFile(file);
+            if (!this.noBackups)
+            {
+                Util.backupFile(file);
+            }
             loadXmlFile(file);
 
@@ -135,13 +147,14 @@
                     XmlTextValue myXmlSubValues = new XmlTextValue(element.InnerText);
 
-                        for(int i=0; i<myXmlSubValues.myValues.Count; i++){
-                            //Found a match with the old value?
-                            if (myXmlSubValues.myValues[i] == oldValue)
-                            {
-                               //replace with the new match
-                                myXmlSubValues.myValues[i] = newValue;
-                            }
-                    }
-                        element.InnerText = myXmlSubValues.ToString();
+                    for (int i = 0; i < myXmlSubValues.myValues.Count; i++)
+                    {
+                        //Found a match with the old value?
+                        if (myXmlSubValues.myValues[i] == oldValue)
+                        {
+                            //replace with the new match
+                            myXmlSubValues.myValues[i] = newValue;
+                        }
+                    }
+                    element.InnerText = myXmlSubValues.ToString();
                 }
             }
@@ -157,5 +170,8 @@
         public void removeValues(string file, string values)
         {
-            Util.backupFile(file);
+            if (!this.noBackups)
+            {
+                Util.backupFile(file);
+            }
             loadXmlFile(file);
 
@@ -177,5 +193,6 @@
                     foreach (String myInputValue in myInputValues.myValues)
                     {
-                       for(int i=0; i<myXmlSubValues.myValues.Count; i++){
+                        for (int i = 0; i < myXmlSubValues.myValues.Count; i++)
+                        {
                             //It already exists in the xml?
                             if (myInputValue == myXmlSubValues.myValues[i])
@@ -202,5 +219,8 @@
         public void changeValue(string file, string newValue, string valueRelation = "", string valuePositions = "")
         {
-            Util.backupFile(file);
+            if (!this.noBackups)
+            {
+                Util.backupFile(file);
+            }
             loadXmlFile(file);
 
@@ -256,5 +276,8 @@
         public void invert(string file)
         {
-            Util.backupFile(file);
+            if (!this.noBackups)
+            {
+                Util.backupFile(file);
+            }
             loadXmlFile(file);
 
@@ -267,5 +290,5 @@
             foreach (XmlNode element in myElements) //Returns all after "Oni" element
             {
-                    invertedOrder.Add(element.InnerText);
+                invertedOrder.Add(element.InnerText);
             }
 
@@ -310,5 +333,5 @@
                 if (pos > testFirstRealValue.myValues.Count - 1 || pos < 0) //Are positions valid for the current values? //-1 because starts at 0
                 {
-                    Program.printAppError(Program.appErrors.INVALID_POSITIONS_RANGE, "The positions values are not in the range of the value to replace (pos index < 0 or > newValueIndexesNumber).",true);
+                    Program.printAppError(Program.appErrors.INVALID_POSITIONS_RANGE, "The positions values are not in the range of the value to replace (pos index < 0 or > newValueIndexesNumber).", true);
                 }
             }
Index: /xmlTools/trunk/posUpdate/xmlTools.csproj.user
===================================================================
--- /xmlTools/trunk/posUpdate/xmlTools.csproj.user	(revision 741)
+++ /xmlTools/trunk/posUpdate/xmlTools.csproj.user	(revision 742)
@@ -2,5 +2,5 @@
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
-    <StartArguments>replaceall -element:FirstLevel -value:0 -filename:TRAMKONCOMbk_fw_kick.xml</StartArguments>
+    <StartArguments>replaceall -element:FirstLevel -value:0 -nobackups -filename:"C:\Users\home\Documents\Visual Studio 2012\Projects\posUpdate\posUpdate\bin\Debug\%2a.xml"</StartArguments>
   </PropertyGroup>
   <PropertyGroup>
@@ -15,5 +15,5 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
-    <StartArguments>replaceall -element:FirstLevel -value:0</StartArguments>
+    <StartArguments>replaceall -element:FirstLevel -value:0 -nobackups -filename:"C:\Users\home\Documents\Visual Studio 2012\Projects\posUpdate\posUpdate\bin\Debug\%2a.xml"</StartArguments>
   </PropertyGroup>
 </Project>
