diff --git a/client/src/org/eevolution/form/bom/RadioButtonTreeCellRenderer.java b/client/src/org/eevolution/form/bom/RadioButtonTreeCellRenderer.java
index 973a3954fb..d02e202688 100644
--- a/client/src/org/eevolution/form/bom/RadioButtonTreeCellRenderer.java
+++ b/client/src/org/eevolution/form/bom/RadioButtonTreeCellRenderer.java
@@ -1,481 +1,500 @@
+/******************************************************************************
+ * Product: Adempiere ERP & CRM Smart Business Solution                       *
+ * This program is free software; you can redistribute it and/or modify it    *
+ * under the terms version 2 of the GNU General Public License as published   *
+ * by the Free Software Foundation. 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, write to the Free Software Foundation, Inc.,    *
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.                     *
+ * For the text or an alternative of this public license, you may reach us    *
+ * Copyright (C) 2003-2008 e-Evolution,SC. All Rights Reserved.               *
+ * Contributor(s): Victor Perez www.e-evolution.com                           *
+ *****************************************************************************/
 //RadioButtonTreeCellRenderer.java
 package org.eevolution.form.bom;
 
-import java.util.*;
+import it.cnr.imaa.essi.lablib.gui.checkboxtree.CheckboxTree;
+import it.cnr.imaa.essi.lablib.gui.checkboxtree.CheckboxTreeCellRenderer;
+import it.cnr.imaa.essi.lablib.gui.checkboxtree.TreeCheckingEvent;
+import it.cnr.imaa.essi.lablib.gui.checkboxtree.TreeCheckingListener;
+import it.cnr.imaa.essi.lablib.gui.checkboxtree.TreeCheckingModel;
 
-
-import org.compiere.model.*;
-import org.compiere.util.*;
-import java.sql.*;
-
-import javax.swing.*;
-import java.awt.*;
-import javax.swing.tree.*;
-
-import org.eevolution.model.X_PP_Product_BOM;
-import org.eevolution.model.X_PP_Product_BOMLine;
-import org.compiere.model.X_M_Product;
-
-import java.util.Iterator;
-import java.util.Vector;
-import org.eevolution.model.QueryDB;
+import java.awt.Color;
+import java.awt.Component;
 import java.math.BigDecimal;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Vector;
 
-import it.cnr.imaa.essi.lablib.gui.checkboxtree.*;
-
-
-import org.adempiere.pipo.*;
+import javax.swing.JCheckBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+import org.compiere.model.X_C_UOM;
+import org.compiere.model.X_M_Product;
+import org.compiere.util.CLogger;
+import org.compiere.util.DB;
+import org.compiere.util.Env;
+import org.compiere.util.KeyNamePair;
+import org.compiere.util.Msg;
+import org.eevolution.model.QueryDB;
+import org.eevolution.model.X_PP_Product_BOM;
+import org.eevolution.model.X_PP_Product_BOMLine;
 
 
-	public class RadioButtonTreeCellRenderer implements  
-	CheckboxTreeCellRenderer {
+public class RadioButtonTreeCellRenderer implements CheckboxTreeCellRenderer {
 
 	JRadioButton button = new JRadioButton();
 	JCheckBox checkBox = new JCheckBox();
 	JPanel panel = new JPanel();
 	JLabel label = new JLabel();
-        //ButtonGroup group = new ButtonGroup();
-        boolean toggle = false;
-        private Vector dataBOM = new Vector();
-        public DefaultMutableTreeNode root = null;
+	//ButtonGroup group = new ButtonGroup();
+	boolean toggle = false;
+	private Vector<Vector<Comparable<?>>> dataBOM = new Vector<Vector<Comparable<?>>>();
+	public DefaultMutableTreeNode root = null;
 
-        public HashSet<TreePath> checkedPathsSet =  new HashSet<TreePath>();
+	public HashSet<TreePath> checkedPathsSet =  new HashSet<TreePath>();
 
-        public HashSet<TreePath> greyedPathsSet =  new HashSet<TreePath>();
+	public HashSet<TreePath> greyedPathsSet =  new HashSet<TreePath>();
 
-        public HashSet<TreePath> disabledPathsSet =  new HashSet<TreePath>();
+	public HashSet<TreePath> disabledPathsSet =  new HashSet<TreePath>();
 
-        public HashSet<TreePath> checkBoxPathsSet =  new HashSet<TreePath>();
-        private static CLogger log = CLogger.getCLogger(RadioButtonTreeCellRenderer.class);
+	public HashSet<TreePath> checkBoxPathsSet =  new HashSet<TreePath>();
+	private static CLogger log = CLogger.getCLogger(RadioButtonTreeCellRenderer.class);
 
 
-  public DefaultMutableTreeNode getTreeNodeForNodeUserObject(nodeUserObject m_nodeUserObject) {
-    log.fine("In getTreeNodeForNodeUserObject");
-    DefaultMutableTreeNode foundChild = null;
+	public DefaultMutableTreeNode getTreeNodeForNodeUserObject(nodeUserObject m_nodeUserObject) {
+		log.fine("In getTreeNodeForNodeUserObject");
+		DefaultMutableTreeNode foundChild = null;
 
-    Enumeration children = this.root.breadthFirstEnumeration();
-    if (children != null) {
-      while (children.hasMoreElements()) {
-        
-        DefaultMutableTreeNode child = (DefaultMutableTreeNode) children.nextElement();
-        if(m_nodeUserObject == (nodeUserObject)child.getUserObject()) {
-           log.fine("nodeUserObjectFound");
-           foundChild = child;
-        }
-      }
-    }
+		Enumeration<?> children = this.root.breadthFirstEnumeration();
+		if (children != null) {
+			while (children.hasMoreElements()) {
 
-    return foundChild;
-  }
+				DefaultMutableTreeNode child = (DefaultMutableTreeNode) children.nextElement();
+				if(m_nodeUserObject == (nodeUserObject)child.getUserObject()) {
+					log.fine("nodeUserObjectFound");
+					foundChild = child;
+				}
+			}
+		}
+		return foundChild;
+	}
 
 
-  public static void printDescendents(TreeNode root) {
-    log.fine(root.toString());
-    Enumeration children = root.children();
-    if (children != null) {
-      while (children.hasMoreElements()) {
-        printDescendents((TreeNode) children.nextElement());
-      }
-    }
-  }
+	public static void printDescendents(TreeNode root) {
+		log.fine(root.toString());
+		Enumeration<?> children = root.children();
+		if (children != null) {
+			while (children.hasMoreElements()) {
+				printDescendents((TreeNode) children.nextElement());
+			}
+		}
+	}
 
 
 	/**
 	 * 	Action: Fill Tree with all nodes
 	 */
-        public DefaultMutableTreeNode action_loadBOM(X_M_Product Product, boolean setRoot)
+	public DefaultMutableTreeNode action_loadBOM(X_M_Product Product, boolean setRoot)
+	{
+		int M_Product_ID = Product.get_ID(); 
+		X_M_Product M_Product = new X_M_Product(Env.getCtx(), M_Product_ID,"M_Product");
+		X_C_UOM C_UOM = new X_C_UOM(Env.getCtx() , M_Product.getC_UOM_ID(), "C_UOM");
+		DefaultMutableTreeNode root = new DefaultMutableTreeNode(new nodeUserObject(Msg.translate(Env.getCtx(), "M_Product_ID") + Msg.translate(Env.getCtx(), "Value") + ": " + M_Product.getValue() + " " + Msg.translate(Env.getCtx(), "Name") + ": "  +M_Product.getName() + " " +  Msg.translate(Env.getCtx(), "C_UOM_ID") + ": " + C_UOM.getName(), M_Product, null, null));
+		if(setRoot) {
+			this.root = root;
+		}
+		dataBOM.clear();
+		if (false)
+		{
+			QueryDB query = new QueryDB("org.eevolution.model.X_PP_Product_BOMLine");
+			String filter = "M_Product_ID=" + M_Product_ID;
+			java.util.List<Object> results = query.execute(filter);
+			Iterator<Object> select = results.iterator();
+			while (select.hasNext())
+			{
+				X_PP_Product_BOMLine bomline =  (X_PP_Product_BOMLine) select.next();                      
+				root.add(parent(bomline));               
+			}     
+		}
+		else
+		{
+			QueryDB query = new QueryDB("org.eevolution.model.X_PP_Product_BOM");
+			String filter = " IsActive='Y' AND M_Product_ID =" + M_Product_ID;
+			java.util.List<Object> results = query.execute(filter);
+			Iterator<Object> select = results.iterator();
+			while (select.hasNext())
+			{
+				X_PP_Product_BOM bom =  (X_PP_Product_BOM) select.next();                                     
+				DefaultMutableTreeNode child = parent(bom);
+				root.add(child);                    
+			}      
+		}
+		log.fine("root.getChildCount: " + root.getChildCount());
+		if(root.getChildCount() > 0) {
+			root = (DefaultMutableTreeNode)root.getFirstChild();
+		}
+
+		if(setRoot)
+			this.root = root;
+
+		return root;
+
+	}	//	action_fillTree
+
+	public DefaultMutableTreeNode  parent(X_PP_Product_BOMLine bomline) 
+	{
+		log.fine("In parent with X_PP_Product_BOMLine");
+
+		X_M_Product M_Product = new X_M_Product(Env.getCtx(), bomline.getM_Product_ID(),"M_Product");
+		X_C_UOM C_UOM = new X_C_UOM(Env.getCtx() , M_Product.getC_UOM_ID(),"C_UOM"); 
+
+		X_PP_Product_BOM bomproduct = new X_PP_Product_BOM(Env.getCtx(),bomline.getPP_Product_BOM_ID(),"PP_Product_BOM");
+		DefaultMutableTreeNode parent = new DefaultMutableTreeNode(new nodeUserObject(Msg.translate(Env.getCtx(), "M_Product_ID") + Msg.translate(Env.getCtx(), "key") + ": " + M_Product.getValue() + " " + Msg.translate(Env.getCtx(), "Name") + ": "  +M_Product.getName() + " " +  Msg.translate(Env.getCtx(), "C_UOM_ID") + ": " + C_UOM.getName(), M_Product, bomproduct, bomline));
+
+
+		Vector<Comparable<?>> line = new Vector<Comparable<?>>(17);
+		line.add( new Boolean(false));  //  0 Select
+		line.add( new Boolean(true));   //  1 IsActive
+		line.add( new Integer(bomline.getLine())); // 2 Line                
+		line.add( (Timestamp) bomline.getValidFrom()); //  3 ValidDrom
+		line.add( (Timestamp) bomline.getValidTo()); //  4 ValidTo
+		KeyNamePair pp = new KeyNamePair(M_Product.getM_Product_ID(),M_Product.getName());
+		line.add(pp); //  5 M_Product_ID
+		KeyNamePair uom = new KeyNamePair(bomline.getC_UOM_ID(),"");
+		line.add(uom); //  6 C_UOM_ID
+		line.add(new Boolean(bomline.isQtyPercentage())); //  7 IsQtyPorcentage
+		line.add((BigDecimal) bomline.getQtyBatch());  //  8 BatchPercent
+		line.add((BigDecimal) ((bomline.getQtyBOM()!=null) ? bomline.getQtyBOM() : new BigDecimal(0)));  //  9 QtyBOM
+		line.add(new Boolean(bomline.isCritical())); //  10 IsCritical                  
+		line.add( (Integer) bomline.getLeadTimeOffset()); // 11 LTOffSet
+		line.add( (BigDecimal) bomline.getAssay()); // 12 Assay
+		line.add( (BigDecimal) (bomline.getScrap())); // 13 Scrap
+		line.add( (String) bomline.getIssueMethod()); // 14 IssueMethod
+		line.add( (String) bomline.getBackflushGroup());  // 15 BackflushGroup
+		line.add( (BigDecimal) bomline.getForecast()); // 16 Forecast
+		dataBOM.add(line);
+
+		QueryDB query = new QueryDB("org.eevolution.model.X_PP_Product_BOM");
+		String filter = "M_Product_ID = " +  bomproduct.getM_Product_ID();
+		java.util.List<Object> results = query.execute(filter);
+		Iterator<Object> select = results.iterator();
+		while (select.hasNext())
+		{
+			X_PP_Product_BOM bom =  (X_PP_Product_BOM) select.next();             
+			X_M_Product component = new X_M_Product(Env.getCtx(), bom.getM_Product_ID(),"M_Product");
+			return component(component, bom, bomline);
+		}
+		return parent;
+	}
+
+	public DefaultMutableTreeNode  parent(X_PP_Product_BOM bom) 
 	{
 
+		log.fine("Parent:" + bom.getName());
+		X_M_Product product = new X_M_Product(Env.getCtx(), bom.getM_Product_ID(),"M_Product");
 
-                int M_Product_ID = Product.get_ID(); 
-                
+		//vparent.setValue(m_product_id);
+		String data = Msg.translate(Env.getCtx(), "PP_Product_BOM_ID") + " " + Msg.translate(Env.getCtx(), "Value") + ":"+ bom.getValue()+ " " + Msg.translate(Env.getCtx(), "Name")  +  ": " + bom.getName(); 
+		DefaultMutableTreeNode parent = new DefaultMutableTreeNode(new nodeUserObject(data, product, bom, null)); 
 
-                X_M_Product M_Product = new X_M_Product(Env.getCtx(), M_Product_ID,"M_Product");
-                X_C_UOM C_UOM = new X_C_UOM(Env.getCtx() , M_Product.getC_UOM_ID(), "C_UOM");
-                DefaultMutableTreeNode root = new DefaultMutableTreeNode(new nodeUserObject(Msg.translate(Env.getCtx(), "M_Product_ID") + Msg.translate(Env.getCtx(), "Value") + ": " + M_Product.getValue() + " " + Msg.translate(Env.getCtx(), "Name") + ": "  +M_Product.getName() + " " +  Msg.translate(Env.getCtx(), "C_UOM_ID") + ": " + C_UOM.getName(), M_Product, null, null));
-                if(setRoot) {
-                  this.root = root;
-                }
-                
-                
-                dataBOM.clear();
-                
-                if (false)
-                {
-                    QueryDB query = new QueryDB("org.eevolution.model.X_PP_Product_BOMLine");
-                    String filter = "M_Product_ID=" + M_Product_ID;
-                    java.util.List results = query.execute(filter);
-                    Iterator select = results.iterator();
-                    while (select.hasNext())
-                    {
-                    X_PP_Product_BOMLine bomline =  (X_PP_Product_BOMLine) select.next();                      
-                    root.add(parent(bomline));               
-                    }     
-                }
-                else
-                {
-                    QueryDB query = new QueryDB("org.eevolution.model.X_PP_Product_BOM");
-                    String filter = " IsActive='Y' AND M_Product_ID =" + M_Product_ID;
-                    java.util.List results = query.execute(filter);
-                    Iterator select = results.iterator();
-                    while (select.hasNext())
-                    {
-                     X_PP_Product_BOM bom =  (X_PP_Product_BOM) select.next();                                     
-                     DefaultMutableTreeNode child = parent(bom);
-                     root.add(child);                    
-                    }      
-                    
-                }
-             
-         log.fine("root.getChildCount: " + root.getChildCount());
-         if(root.getChildCount() > 0) {
-            root = (DefaultMutableTreeNode)root.getFirstChild();
+		QueryDB query = new QueryDB("org.eevolution.model.X_PP_Product_BOMLine");
+		String filter = "PP_Product_BOM_ID=" + bom.getPP_Product_BOM_ID();
+		java.util.List<Object> results = query.execute(filter);
+		Iterator<Object> select = results.iterator();
+		while (select.hasNext())
+		{
+			X_PP_Product_BOMLine bomline =  (X_PP_Product_BOMLine) select.next();             
+			X_M_Product component = new X_M_Product(Env.getCtx(), bomline.getM_Product_ID(),"M_Product");
+			//System.out.println("Componente :" + component.getValue() + "[" + component.getName() + "]");
+			//component(component);
+			Vector<Comparable<?>> line = new Vector<Comparable<?>>(17);
+			line.add( new Boolean(false));  //  0 Select
+			line.add( new Boolean(true));   //  1 IsActive
+			line.add( new Integer(bomline.getLine())); // 2 Line                
+			line.add( (Timestamp) bomline.getValidFrom()); //  3 ValidDrom
+			line.add( (Timestamp) bomline.getValidTo()); //  4 ValidTo
+			KeyNamePair pp = new KeyNamePair(component.getM_Product_ID(),component.getName());
+			line.add(pp); //  5 M_Product_ID
+			KeyNamePair uom = new KeyNamePair(bomline.getC_UOM_ID(),"");
+			line.add(uom); //  6 C_UOM_ID
+			line.add(new Boolean(bomline.isQtyPercentage())); //  7 IsQtyPercentage
+			line.add((BigDecimal) bomline.getQtyBatch());  //  8 BatchPercent
+			line.add((BigDecimal) bomline.getQtyBOM());  //  9 QtyBom
+			line.add(new Boolean(bomline.isCritical())); //  10 IsCritical       
+			line.add( (Integer) bomline.getLeadTimeOffset()); // 11 LTOffSet
+			line.add( (BigDecimal) bomline.getAssay()); // 12 Assay
+			line.add( (BigDecimal) (bomline.getScrap())); // 13 Scrap
+			line.add( (String) bomline.getIssueMethod()); // 14 IssueMethod
+			line.add( (String) bomline.getBackflushGroup());  // 15 BackflushGroup
+			line.add( (BigDecimal) bomline.getForecast()); // 16 Forecast
+			//line.add(this.);
+			dataBOM.add(line);
+			parent.add(component(component, bom, bomline));
 
-         }
-
-         if(setRoot)
-            this.root = root;
-
-         return root;
-               
-	}	//	action_fillTree
-        
-        public DefaultMutableTreeNode  parent(X_PP_Product_BOMLine bomline) 
-        {
-             log.fine("In parent with X_PP_Product_BOMLine");
-
-             //System.out.println("-------------------------Padre:" + bom.getName());
-             X_M_Product M_Product = new X_M_Product(Env.getCtx(), bomline.getM_Product_ID(),"M_Product");
-             X_C_UOM C_UOM = new X_C_UOM(Env.getCtx() , M_Product.getC_UOM_ID(),"C_UOM"); 
-             
-             X_PP_Product_BOM bomproduct = new X_PP_Product_BOM(Env.getCtx(),bomline.getPP_Product_BOM_ID(),"PP_Product_BOM");
-             DefaultMutableTreeNode parent = new DefaultMutableTreeNode(new nodeUserObject(Msg.translate(Env.getCtx(), "M_Product_ID") + Msg.translate(Env.getCtx(), "key") + ": " + M_Product.getValue() + " " + Msg.translate(Env.getCtx(), "Name") + ": "  +M_Product.getName() + " " +  Msg.translate(Env.getCtx(), "C_UOM_ID") + ": " + C_UOM.getName(), M_Product, bomproduct, bomline));
-             
-             
-                Vector line = new Vector(17);
-                line.add( new Boolean(false));  //  0 Select
-                line.add( new Boolean(true));   //  1 IsActive
-                line.add( new Integer(bomline.getLine())); // 2 Line                
-                line.add( (Timestamp) bomline.getValidFrom()); //  3 ValidDrom
-                line.add( (Timestamp) bomline.getValidTo()); //  4 ValidTo
-                KeyNamePair pp = new KeyNamePair(M_Product.getM_Product_ID(),M_Product.getName());
-                line.add(pp); //  5 M_Product_ID
-                KeyNamePair uom = new KeyNamePair(bomline.getC_UOM_ID(),"");
-                line.add(uom); //  6 C_UOM_ID
-                line.add(new Boolean(bomline.isQtyPercentage())); //  7 IsQtyPorcentage
-                line.add((BigDecimal) bomline.getQtyBatch());  //  8 BatchPercent
-                line.add((BigDecimal) ((bomline.getQtyBOM()!=null) ? bomline.getQtyBOM() : new BigDecimal(0)));  //  9 QtyBOM
-                line.add(new Boolean(bomline.isCritical())); //  10 IsCritical                  
-                line.add( (Integer) bomline.getLeadTimeOffset()); // 11 LTOffSet
-                line.add( (BigDecimal) bomline.getAssay()); // 12 Assay
-                line.add( (BigDecimal) (bomline.getScrap())); // 13 Scrap
-                line.add( (String) bomline.getIssueMethod()); // 14 IssueMethod
-                line.add( (String) bomline.getBackflushGroup());  // 15 BackflushGroup
-                line.add( (BigDecimal) bomline.getForecast()); // 16 Forecast
-                dataBOM.add(line);
-
-             QueryDB query = new QueryDB("org.eevolution.model.X_PP_Product_BOM");
-             String filter = "M_Product_ID = " +  bomproduct.getM_Product_ID();
-             java.util.List results = query.execute(filter);
-             Iterator select = results.iterator();
-             while (select.hasNext())
-             {
-                X_PP_Product_BOM bom =  (X_PP_Product_BOM) select.next();             
-                X_M_Product component = new X_M_Product(Env.getCtx(), bom.getM_Product_ID(),"M_Product");
-                return component(component, bom, bomline);
-                }
-               return parent;
-        }
-             
-             public DefaultMutableTreeNode  parent(X_PP_Product_BOM bom) 
-             {
-
-             //System.out.println("Padre:" + bom.getName());
-             X_M_Product product = new X_M_Product(Env.getCtx(), bom.getM_Product_ID(),"M_Product");
-             
-             //vparent.setValue(m_product_id);
-             String data = Msg.translate(Env.getCtx(), "PP_Product_BOM_ID") + " " + Msg.translate(Env.getCtx(), "Value") + ":"+ bom.getValue()+ " " + Msg.translate(Env.getCtx(), "Name")  +  ": " + bom.getName(); 
-             DefaultMutableTreeNode parent = new DefaultMutableTreeNode(new nodeUserObject(data, product, bom, null)); 
-             
-             QueryDB query = new QueryDB("org.eevolution.model.X_PP_Product_BOMLine");
-             String filter = "PP_Product_BOM_ID=" + bom.getPP_Product_BOM_ID();
-             java.util.List results = query.execute(filter);
-             Iterator select = results.iterator();
-             while (select.hasNext())
-             {
-                X_PP_Product_BOMLine bomline =  (X_PP_Product_BOMLine) select.next();             
-                X_M_Product component = new X_M_Product(Env.getCtx(), bomline.getM_Product_ID(),"M_Product");
-                //System.out.println("Componente :" + component.getValue() + "[" + component.getName() + "]");
-                //component(component);
-                Vector line = new Vector(17);
-                line.add( new Boolean(false));  //  0 Select
-                line.add( new Boolean(true));   //  1 IsActive
-                line.add( new Integer(bomline.getLine())); // 2 Line                
-                line.add( (Timestamp) bomline.getValidFrom()); //  3 ValidDrom
-                line.add( (Timestamp) bomline.getValidTo()); //  4 ValidTo
-                KeyNamePair pp = new KeyNamePair(component.getM_Product_ID(),component.getName());
-                line.add(pp); //  5 M_Product_ID
-                KeyNamePair uom = new KeyNamePair(bomline.getC_UOM_ID(),"");
-                line.add(uom); //  6 C_UOM_ID
-                line.add(new Boolean(bomline.isQtyPercentage())); //  7 IsQtyPercentage
-                line.add((BigDecimal) bomline.getQtyBatch());  //  8 BatchPercent
-                line.add((BigDecimal) bomline.getQtyBOM());  //  9 QtyBom
-                line.add(new Boolean(bomline.isCritical())); //  10 IsCritical       
-                line.add( (Integer) bomline.getLeadTimeOffset()); // 11 LTOffSet
-                line.add( (BigDecimal) bomline.getAssay()); // 12 Assay
-                line.add( (BigDecimal) (bomline.getScrap())); // 13 Scrap
-                line.add( (String) bomline.getIssueMethod()); // 14 IssueMethod
-                line.add( (String) bomline.getBackflushGroup());  // 15 BackflushGroup
-                line.add( (BigDecimal) bomline.getForecast()); // 16 Forecast
-                //line.add(this.);
-                dataBOM.add(line);
-                parent.add(component(component, bom, bomline));
-                
-             }
-            return parent;
-        }
-
-        
-       
-        
-        public DefaultMutableTreeNode component(X_M_Product M_Product, X_PP_Product_BOM bomPassed, X_PP_Product_BOMLine bomlinePassed) 
-        {   
-            
-                    //System.out.print("--------------------------------------Componet Product:" +  M_Product.getName());
-                    QueryDB query = new QueryDB("org.eevolution.model.X_PP_Product_BOM");
-                    String filter = "Value='" + M_Product.getValue() + "'";
-                    X_C_UOM C_UOM = new X_C_UOM(Env.getCtx() , M_Product.getC_UOM_ID(),"C_UOM");
-                    java.util.List results = query.execute(filter);
-                    Iterator select = results.iterator();
-                    while (select.hasNext())
-                    {
-                     X_PP_Product_BOM bom =  (X_PP_Product_BOM) select.next();
-                     //System.out.print("--------------------------------------Componet BOM:" + bom.getName());
-                     return parent(bom);
-                    }  
-                    
-                     return new DefaultMutableTreeNode(new nodeUserObject(Msg.translate(Env.getCtx(), "Value") + ": " + M_Product.getValue() + " " + Msg.translate(Env.getCtx(), "Name") + ": "  +M_Product.getName() + " " +  Msg.translate(Env.getCtx(), "C_UOM_ID") + ": " + C_UOM.getName(), M_Product, bomPassed, bomlinePassed));
-        }
-
-	public boolean isOnHotspot(int x, int y) {
-	   return (button.getBounds().contains(x, y));
+		}
+		return parent;
 	}
 
 
-        protected TreePath[] getChildrenPath(TreePath path, TreeModel model) {
-        Object node = path.getLastPathComponent();
-        int childrenNumber = model.getChildCount(node);
-        TreePath[] childrenPath = new TreePath[childrenNumber];
-        for (int childIndex = 0; childIndex < childrenNumber; childIndex++) {
-            childrenPath[childIndex] = path.pathByAddingChild(model.getChild(node, childIndex));
-        }
-        return childrenPath;
-    }
-
- public TreePath getPath(TreeNode node) {
-        java.util.List list = new ArrayList();
-    
-        // Add all nodes to list
-        while (node != null) {
-            list.add(node);
-            node = node.getParent();
-        }
-        Collections.reverse(list);
-    
-        // Convert array of nodes to TreePath
-        return new TreePath(list.toArray());
-    }
 
 
-        public void printTree(TreePath path, TreeModel model, TreeCheckingModel checkingModel ) {
-            log.fine("In printTree");
-            DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
-            log.fine("Node: " + node);
-            log.fine("isPathCheckbox: " + checkingModel.isPathCheckBox(getPath(node)));
-        for (TreePath childPath : getChildrenPath(path, model)) {
-                printTree(childPath, model, checkingModel);
-            }
-            return;
+	public DefaultMutableTreeNode component(X_M_Product M_Product, X_PP_Product_BOM bomPassed, X_PP_Product_BOMLine bomlinePassed) 
+	{   
+
+		//System.out.print("--------------------------------------Componet Product:" +  M_Product.getName());
+		QueryDB query = new QueryDB("org.eevolution.model.X_PP_Product_BOM");
+		String filter = "Value='" + M_Product.getValue() + "'";
+		X_C_UOM C_UOM = new X_C_UOM(Env.getCtx() , M_Product.getC_UOM_ID(),"C_UOM");
+		java.util.List<Object> results = query.execute(filter);
+		Iterator<Object> select = results.iterator();
+		while (select.hasNext())
+		{
+			X_PP_Product_BOM bom =  (X_PP_Product_BOM) select.next();
+			//System.out.print("--------------------------------------Componet BOM:" + bom.getName());
+			return parent(bom);
+		}  
+
+		return new DefaultMutableTreeNode(new nodeUserObject(Msg.translate(Env.getCtx(), "Value") + ": " + M_Product.getValue() + " " + Msg.translate(Env.getCtx(), "Name") + ": "  +M_Product.getName() + " " +  Msg.translate(Env.getCtx(), "C_UOM_ID") + ": " + C_UOM.getName(), M_Product, bomPassed, bomlinePassed));
+	}
+
+	public boolean isOnHotspot(int x, int y) {
+		return (button.getBounds().contains(x, y));
+	}
 
 
-        }
+	protected TreePath[] getChildrenPath(TreePath path, TreeModel model) {
+		Object node = path.getLastPathComponent();
+		int childrenNumber = model.getChildCount(node);
+		TreePath[] childrenPath = new TreePath[childrenNumber];
+		for (int childIndex = 0; childIndex < childrenNumber; childIndex++) {
+			childrenPath[childIndex] = path.pathByAddingChild(model.getChild(node, childIndex));
+		}
+		return childrenPath;
+	}
 
-        public String getComponentTypeUsingBOMParent(int bom_id, int m_product_id) {
-        String retVal = "";
+	public TreePath getPath(TreeNode node) {
+		java.util.List<TreeNode> list = new ArrayList<TreeNode>();
 
-        String sql = "select componenttype from pp_product_bomline where pp_product_bom_id = ? and m_product_id = ?";
-        PreparedStatement pstmt = null;
-        ResultSet rs = null;
+		// Add all nodes to list
+		while (node != null) {
+			list.add(node);
+			node = node.getParent();
+		}
+		Collections.reverse(list);
 
-         try {
-                pstmt = DB.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, "test");
-                pstmt.setInt(1, bom_id);
-                pstmt.setInt(2, m_product_id);
-                rs = pstmt.executeQuery();
+		// Convert array of nodes to TreePath
+		return new TreePath(list.toArray());
+	}
 
 
-                while (rs.next()) {
-                        retVal = rs.getString(1);
-                }
-                
-                rs.close();
-                pstmt.close();
-                
-        } catch (SQLException e) {
-                log.fine("Execption; sql = "+sql+"; e.getMessage() = " +e.getMessage());
-        } 
-        
-        return retVal;
-        }
+	public void printTree(TreePath path, TreeModel model, TreeCheckingModel checkingModel ) {
+		log.fine("In printTree");
+		DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
+		log.fine("Node: " + node);
+		log.fine("isPathCheckbox: " + checkingModel.isPathCheckBox(getPath(node)));
+		for (TreePath childPath : getChildrenPath(path, model)) {
+			printTree(childPath, model, checkingModel);
+		}
+		return;
+
+
+	}
+
+	public String getComponentTypeUsingBOMParent(int bom_id, int m_product_id) {
+		String retVal = "";
+
+		String sql = "select componenttype from pp_product_bomline where pp_product_bom_id = ? and m_product_id = ?";
+		PreparedStatement pstmt = null;
+		ResultSet rs = null;
+
+		try {
+			pstmt = DB.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, "test");
+			pstmt.setInt(1, bom_id);
+			pstmt.setInt(2, m_product_id);
+			rs = pstmt.executeQuery();
+
+
+			while (rs.next()) {
+				retVal = rs.getString(1);
+			}
+
+			rs.close();
+			pstmt.close();
+
+		} catch (SQLException e) {
+			log.fine("Execption; sql = "+sql+"; e.getMessage() = " +e.getMessage());
+		} 
+
+		return retVal;
+	}
 
 	public Component getTreeCellRendererComponent(JTree tree, Object  
-	    value, boolean selected, boolean expanded, boolean leaf, int row,
-	    boolean hasFocus) {
-            log.fine("row: " + row);
-            DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)value;
+			value, boolean selected, boolean expanded, boolean leaf, int row,
+			boolean hasFocus) {
+		log.fine("row: " + row);
+		DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode)value;
 
-            log.fine("treeNode.getLevel: " + treeNode.getLevel());
-            nodeUserObject m_nodeUserObject = (nodeUserObject)treeNode.getUserObject();
-            log.fine("m_nodeUserObject.toString: " + m_nodeUserObject.toString());
-            log.fine("m_nodeUserObject.M_Product.getName: " + m_nodeUserObject.M_Product.getName());
-            log.fine("value.toString: " + value.toString());
-	    label.setText(value.toString());
-	    TreeCheckingModel checkingModel = ((CheckboxTree)tree).getCheckingModel();
-            //printTree(new TreePath(tree.getModel().getRoot()), tree.getModel(), checkingModel);
-	    TreePath path = tree.getPathForRow(row);
-	    boolean enabled = checkingModel.isPathEnabled(path);
-	    boolean checked = checkingModel.isPathChecked(path);
-	    boolean checkBoxed = checkingModel.isPathCheckBox(path);
+		log.fine("treeNode.getLevel: " + treeNode.getLevel());
+		nodeUserObject m_nodeUserObject = (nodeUserObject)treeNode.getUserObject();
+		log.fine("m_nodeUserObject.toString: " + m_nodeUserObject.toString());
+		log.fine("m_nodeUserObject.M_Product.getName: " + m_nodeUserObject.M_Product.getName());
+		log.fine("value.toString: " + value.toString());
+		label.setText(value.toString());
+		TreeCheckingModel checkingModel = ((CheckboxTree)tree).getCheckingModel();
+		//printTree(new TreePath(tree.getModel().getRoot()), tree.getModel(), checkingModel);
+		TreePath path = tree.getPathForRow(row);
+		boolean enabled = checkingModel.isPathEnabled(path);
+		boolean checked = checkingModel.isPathChecked(path);
+		//	    	boolean checkBoxed = checkingModel.isPathCheckBox(path);
 
-	    checked = checkingModel.isPathChecked(path);
+		checked = checkingModel.isPathChecked(path);
 
-	    boolean grayed = checkingModel.isPathGreyed(path);
-	    button.setEnabled(true);
- 
-	    button.setSelected(checked);
-            m_nodeUserObject.isChosen = checked;
-            log.fine("m_nodeUserObject.isChosen" + m_nodeUserObject.isChosen);
+		//	    	boolean grayed = checkingModel.isPathGreyed(path);
+		button.setEnabled(true);
 
-             if(m_nodeUserObject.isCheckbox || treeNode.isRoot() ) {
-	        panel.add(checkBox);
-	        panel.remove(button);
-                log.fine("checked: " + checked);
-                log.fine("enabled: " + enabled);
-	        checkBox.setEnabled(enabled);
-	        checkBox.setSelected(checked);
-                if(treeNode.isRoot()) {
-                  checkBox.setSelected(true);
-	          checkBox.setEnabled(false);
-                  m_nodeUserObject.isMandatory = true;
-                }
-                if(m_nodeUserObject.isMandatory) {
-                  checkBox.setSelected(true);
-	          checkBox.setEnabled(false);
-                }
-            }  else {
-	        panel.remove(checkBox);
-	        panel.add(button);
+		button.setSelected(checked);
+		m_nodeUserObject.isChosen = checked;
+		log.fine("m_nodeUserObject.isChosen" + m_nodeUserObject.isChosen);
 
-            }
+		if(m_nodeUserObject.isCheckbox || treeNode.isRoot() ) {
+			panel.add(checkBox);
+			panel.remove(button);
+			log.fine("checked: " + checked);
+			log.fine("enabled: " + enabled);
+			checkBox.setEnabled(enabled);
+			checkBox.setSelected(checked);
+			if(treeNode.isRoot()) {
+				checkBox.setSelected(true);
+				checkBox.setEnabled(false);
+				m_nodeUserObject.isMandatory = true;
+			}
+			if(m_nodeUserObject.isMandatory) {
+				checkBox.setSelected(true);
+				checkBox.setEnabled(false);
+			}
+		}  else {
+			panel.remove(checkBox);
+			panel.add(button);
 
-	     panel.add(label);
+		}
 
-             m_nodeUserObject.isChosen = checked;
-             log.fine("m_nodeUserObject.isChosen: " + m_nodeUserObject.isChosen);
-             if( m_nodeUserObject.bom!= null) { 
-             	log.fine("m_nodeUserObject.bom not null");
-             	log.fine("m_nodeUserObject.bom product_id: " + m_nodeUserObject.bom.getM_Product_ID());
-             if( m_nodeUserObject.bomLine == null) {
-             	log.fine("m_nodeUserObject.bomLine is null");
-                DefaultMutableTreeNode m_treeNode = getTreeNodeForNodeUserObject(m_nodeUserObject);
-                if(!m_treeNode.isRoot()) {
-                   DefaultMutableTreeNode m_treeNodeParent = (DefaultMutableTreeNode)m_treeNode.getParent();
-                   if(m_treeNodeParent.isRoot()) {
-                      m_nodeUserObject.isMandatory = true;
-                   }
-                   nodeUserObject m_nodeUserObjectParent = (nodeUserObject)m_treeNodeParent.getUserObject();
-                   if(m_nodeUserObjectParent.bom != null) {
-                      log.fine("m_nodeUserObjectParent.bom is not null");
+		panel.add(label);
 
-                   log.fine("m_nodeUserObjectParent.bom.pp_product_bom_id: " + m_nodeUserObjectParent.bom.get_ID());
-             	log.fine("m_nodeUserObject.M_Product.get_ID: " + m_nodeUserObject.M_Product.get_ID());
-                      if(getComponentTypeUsingBOMParent(m_nodeUserObjectParent.bom.get_ID(), m_nodeUserObject.M_Product.get_ID()).equals(X_PP_Product_BOMLine.COMPONENTTYPE_Variant) || getComponentTypeUsingBOMParent(m_nodeUserObjectParent.bom.get_ID(), m_nodeUserObject.M_Product.get_ID()).equals(X_PP_Product_BOMLine.COMPONENTTYPE_Component)) {
-                      log.fine("Type is checkbox");
-                         if(!m_nodeUserObject.isCheckbox) {
-                            m_nodeUserObject.isCheckbox = true;
-	                    panel.remove(label);
-	                    panel.add(checkBox);
-	                    panel.add(label);
-	                    panel.remove(button);
-                            if(!m_nodeUserObject.isChosen) {
-                              checkBox.setSelected(false);
-                              m_nodeUserObject.isChosen = false;
-                            } else {
-                              checkBox.setSelected(true);
-                              m_nodeUserObject.isMandatory = true;
-                              m_nodeUserObject.isChosen = true;
-                            }
+		m_nodeUserObject.isChosen = checked;
+		log.fine("m_nodeUserObject.isChosen: " + m_nodeUserObject.isChosen);
+		if( m_nodeUserObject.bom!= null) { 
+			log.fine("m_nodeUserObject.bom not null");
+			log.fine("m_nodeUserObject.bom product_id: " + m_nodeUserObject.bom.getM_Product_ID());
+			if( m_nodeUserObject.bomLine == null) {
+				log.fine("m_nodeUserObject.bomLine is null");
+				DefaultMutableTreeNode m_treeNode = getTreeNodeForNodeUserObject(m_nodeUserObject);
+				if(!m_treeNode.isRoot()) {
+					DefaultMutableTreeNode m_treeNodeParent = (DefaultMutableTreeNode)m_treeNode.getParent();
+					if(m_treeNodeParent.isRoot()) {
+						m_nodeUserObject.isMandatory = true;
+					}
+					nodeUserObject m_nodeUserObjectParent = (nodeUserObject)m_treeNodeParent.getUserObject();
+					if(m_nodeUserObjectParent.bom != null) {
+						log.fine("m_nodeUserObjectParent.bom is not null");
 
-                         }
+						log.fine("m_nodeUserObjectParent.bom.pp_product_bom_id: " + m_nodeUserObjectParent.bom.get_ID());
+						log.fine("m_nodeUserObject.M_Product.get_ID: " + m_nodeUserObject.M_Product.get_ID());
+						if(getComponentTypeUsingBOMParent(m_nodeUserObjectParent.bom.get_ID(), m_nodeUserObject.M_Product.get_ID()).equals(X_PP_Product_BOMLine.COMPONENTTYPE_Variant) || getComponentTypeUsingBOMParent(m_nodeUserObjectParent.bom.get_ID(), m_nodeUserObject.M_Product.get_ID()).equals(X_PP_Product_BOMLine.COMPONENTTYPE_Component)) {
+							log.fine("Type is checkbox");
+							if(!m_nodeUserObject.isCheckbox) {
+								m_nodeUserObject.isCheckbox = true;
+								panel.remove(label);
+								panel.add(checkBox);
+								panel.add(label);
+								panel.remove(button);
+								if(!m_nodeUserObject.isChosen) {
+									checkBox.setSelected(false);
+									m_nodeUserObject.isChosen = false;
+								} else {
+									checkBox.setSelected(true);
+									m_nodeUserObject.isMandatory = true;
+									m_nodeUserObject.isChosen = true;
+								}
 
-                       }
+							}
 
-                   } else {
-                      log.fine("Type is checkbox");
-                         if(!m_nodeUserObject.isCheckbox) {
-	                    panel.remove(label);
-	                    panel.add(checkBox);
-	                    panel.add(label);
-	                    panel.remove(button);
+						}
 
-                         }
+					} else {
+						log.fine("Type is checkbox");
+						if(!m_nodeUserObject.isCheckbox) {
+							panel.remove(label);
+							panel.add(checkBox);
+							panel.add(label);
+							panel.remove(button);
+
+						}
 
 
-                   }
-                }
-	     } else {
-             	log.fine("m_nodeUserObject.bomLine is not null");
-             	log.fine("m_nodeUserObject.M_Product.get_ID: " + m_nodeUserObject.M_Product.get_ID());
-             	log.fine("m_nodeUserObject.bomLine.getM_Product_ID: " + m_nodeUserObject.bomLine.getM_Product_ID());
-             	log.fine("m_nodeUserObject.isCheckbox: " + m_nodeUserObject.isCheckbox);
-             }
+					}
+				}
+			} else {
+				log.fine("m_nodeUserObject.bomLine is not null");
+				log.fine("m_nodeUserObject.M_Product.get_ID: " + m_nodeUserObject.M_Product.get_ID());
+				log.fine("m_nodeUserObject.bomLine.getM_Product_ID: " + m_nodeUserObject.bomLine.getM_Product_ID());
+				log.fine("m_nodeUserObject.isCheckbox: " + m_nodeUserObject.isCheckbox);
+			}
 
-             }
-	           panel.setBackground(Color.white);
-            log.fine("m_nodeUserObject.isChosen: " + m_nodeUserObject.isChosen);
-	  return panel;
+		}
+		panel.setBackground(Color.white);
+		log.fine("m_nodeUserObject.isChosen: " + m_nodeUserObject.isChosen);
+		return panel;
 	} 
 
 
-   public static void main(String[] args) {
-        DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
-        DefaultMutableTreeNode one = new DefaultMutableTreeNode("one");
-        DefaultMutableTreeNode two = new DefaultMutableTreeNode("two");
-        DefaultMutableTreeNode three = new DefaultMutableTreeNode("three");
-        root.add(one);
-        root.add(two);
-        root.add(three);
+	public static void main(String[] args) {
+		DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
+		DefaultMutableTreeNode one = new DefaultMutableTreeNode("one");
+		DefaultMutableTreeNode two = new DefaultMutableTreeNode("two");
+		DefaultMutableTreeNode three = new DefaultMutableTreeNode("three");
+		root.add(one);
+		root.add(two);
+		root.add(three);
 
-        RadioButtonTreeCellRenderer m_RadioButtonTreeCellRenderer = new RadioButtonTreeCellRenderer();
-       
-        final CheckboxTree tree = new CheckboxTree(m_RadioButtonTreeCellRenderer.action_loadBOM(null, false));
-	tree.getCheckingModel().setCheckingMode(it.cnr.imaa.essi.lablib.gui.checkboxtree.TreeCheckingModel.CheckingMode.SIMPLE);
-	tree.getCheckingModel().clearChecking();
-	tree.setCellRenderer(m_RadioButtonTreeCellRenderer);
-        tree.addTreeCheckingListener(new TreeCheckingListener() {
-      public void valueChanged(TreeCheckingEvent e) {
-       log.fine("Checked paths changed: user clicked on " + (e.getLeadingPath().getLastPathComponent()));
-            TreeModel tm = tree.getModel();
-           TreePath selected = tree.getSelectionPath();
-           TreeCheckingModel checkingModel = ((CheckboxTree)tree).getCheckingModel();
+		RadioButtonTreeCellRenderer m_RadioButtonTreeCellRenderer = new RadioButtonTreeCellRenderer();
 
-      }
-  });
+		final CheckboxTree tree = new CheckboxTree(m_RadioButtonTreeCellRenderer.action_loadBOM(null, false));
+		tree.getCheckingModel().setCheckingMode(it.cnr.imaa.essi.lablib.gui.checkboxtree.TreeCheckingModel.CheckingMode.SIMPLE);
+		tree.getCheckingModel().clearChecking();
+		tree.setCellRenderer(m_RadioButtonTreeCellRenderer);
+		tree.addTreeCheckingListener(new TreeCheckingListener() {
+			public void valueChanged(TreeCheckingEvent e) {
+				log.fine("Checked paths changed: user clicked on " + (e.getLeadingPath().getLastPathComponent()));
+				//       		TreeModel tm = tree.getModel();
+				//          	TreePath selected = tree.getSelectionPath();
+				//       		TreeCheckingModel checkingModel = ((CheckboxTree)tree).getCheckingModel();
 
-	JFrame frame = new JFrame("RadioButton tree");
-	frame.add(tree);
-	tree.expandAll();
-	frame.pack();
-	frame.setVisible(true);
+			}
+		});
+
+		JFrame frame = new JFrame("RadioButton tree");
+		frame.add(tree);
+		tree.expandAll();
+		frame.pack();
+		frame.setVisible(true);
 	} 
-   }
+}