diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form
index 6c7391939d67d02f634c69e19cd4cf724aad40b1..c2a4060a064361b4c46eb0808cbefe795043729d 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.form
@@ -240,29 +240,14 @@
               <SubComponents>
                 <Component class="javax.swing.JTable" name="jTable1">
                   <Properties>
-                    <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor" postCode="jTable1.getTableHeader().setOpaque(false);&#xa;jTable1.getTableHeader().setBackground(new java.awt.Color(204,204,204));&#xa;jTable1.getTableHeader().setFont(new java.awt.Font(&quot;Tahoma&quot;, 0, 18));">
+                    <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor" postCode="jTable1.getTableHeader().setOpaque(false);&#xa;jTable1.getTableHeader().setBackground(new java.awt.Color(204,204,204));&#xa;jTable1.getTableHeader().setFont(new java.awt.Font(&quot;Tahoma&quot;, 0, 18));&#xa;//jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);">
                       <Font name="Tahoma" size="18" style="0"/>
                     </Property>
-                    <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor" postCode="//javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();&#xa;model = (javax.swing.table.DefaultTableModel) jTable1.getModel();&#xa;model.addTableModelListener(new TableModelListener() {&#xa;&#xa;    public void tableChanged(TableModelEvent e) {&#xa;        &#xa;        if (e.getType() == javax.swing.event.TableModelEvent.UPDATE &amp;&amp; byUser) {&#xa;            int row = e.getFirstRow();&#xa;            int col = e.getColumn();&#xa;&#xa;            if (jTable1.getValueAt(row, col) == (Object)true) {&#xa;                selectedRows.add(row);&#xa;            } else {&#xa;                selectedRows.remove((Object)row);&#xa;            }&#xa;        }&#xa;    }&#xa;});">
-                      <Connection code="new javax.swing.table.DefaultTableModel(&#xa;    new Object [][] {},&#xa;    new String [] {&quot;&quot;, &quot;Models&quot;}) {&#xa;    private Class[] types = new Class [] {&#xa;        java.lang.Boolean.class, java.lang.Object.class&#xa;    };&#xa;    private boolean[] canEdit = new boolean [] {&#xa;        true, false};&#xa;&#xa;    public Class getColumnClass(int columnIndex) {&#xa;        return types [columnIndex];}&#xa;&#xa;    public boolean isCellEditable(int rowIndex, int columnIndex) {&#xa;        return canEdit [columnIndex];&#xa;    }&#xa;    public Class[] getTypes() {&#xa;        return types;}&#xa;&#xa;    public void setTypes(Class[] types) {&#xa;        this.types = types;}&#xa;&#xa;    public boolean[] getCanEdit() {&#xa;        return canEdit;}&#xa;&#xa;    public void setCanEdit(boolean[] canEdit) {&#xa;        this.canEdit = canEdit;&#xa;    }&#xa;}" type="code"/>
+                    <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor" postCode="//javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();&#xa;jTable1.getColumnModel().getColumn(0).setMaxWidth(50);&#xa;//jTable1.getColumnModel().getColumn(1).setPreferredWidth(1000);&#xa;jTable1.getColumnModel().getColumn(2).setMaxWidth(75);&#xa;jTable1.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(50);&#xa;//jTable1.getTableHeader().getColumnModel().getColumn(1).setPreferredWidth(1000);&#xa;jTable1.getTableHeader().getColumnModel().getColumn(2).setMaxWidth(75);&#xa;model = (javax.swing.table.DefaultTableModel) jTable1.getModel();&#xa;model.addTableModelListener(new TableModelListener() {&#xa;&#xa;    public void tableChanged(TableModelEvent e) {&#xa;        &#xa;        if (e.getType() == javax.swing.event.TableModelEvent.UPDATE &amp;&amp; byUser) {&#xa;            int row = e.getFirstRow();&#xa;            int col = e.getColumn();&#xa;&#xa;            if (jTable1.getValueAt(row, col) == (Object)true) {&#xa;                selectedRows.add(row);&#xa;            } else {&#xa;                selectedRows.remove((Object)row);&#xa;            }&#xa;        }&#xa;    }&#xa;});">
+                      <Connection code="new javax.swing.table.DefaultTableModel(&#xa;    new Object [][] {},&#xa;    new String [] {&quot;&quot;, &quot;Models&quot;, &quot;KD-tree&quot;}) {&#xa;    private Class[] types = new Class [] {&#xa;        java.lang.Boolean.class, java.lang.Object.class, java.lang.Boolean.class&#xa;    };&#xa;    private boolean[] canEdit = new boolean [] {&#xa;        true, false, false};&#xa;&#xa;    public Class getColumnClass(int columnIndex) {&#xa;        return types [columnIndex];}&#xa;&#xa;    public boolean isCellEditable(int rowIndex, int columnIndex) {&#xa;        return canEdit [columnIndex];&#xa;    }&#xa;    public Class[] getTypes() {&#xa;        return types;}&#xa;&#xa;    public void setTypes(Class[] types) {&#xa;        this.types = types;}&#xa;&#xa;    public boolean[] getCanEdit() {&#xa;        return canEdit;}&#xa;&#xa;    public void setCanEdit(boolean[] canEdit) {&#xa;        this.canEdit = canEdit;&#xa;    }&#xa;}" type="code"/>
                     </Property>
                     <Property name="columnModel" type="javax.swing.table.TableColumnModel" editor="org.netbeans.modules.form.editors2.TableColumnModelEditor">
-                      <TableColumnModel selectionModel="3">
-                        <Column maxWidth="50" minWidth="-1" prefWidth="50" resizable="true">
-                          <Title editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                            <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.jTable1.columnModel.title1_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                          </Title>
-                          <Editor/>
-                          <Renderer/>
-                        </Column>
-                        <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
-                          <Title editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
-                            <ResourceString bundle="cz/fidentis/analyst/core/Bundle.properties" key="ProjectTopComp.jTable1.columnModel.title0_1" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
-                          </Title>
-                          <Editor/>
-                          <Renderer/>
-                        </Column>
-                      </TableColumnModel>
+                      <TableColumnModel selectionModel="0"/>
                     </Property>
                     <Property name="dragEnabled" type="boolean" value="true"/>
                     <Property name="rowHeight" type="int" value="40"/>
diff --git a/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java
index 69a4278f247e92cf6c738f3436ce50f10ebea846..e977b24bf17485ce9ea9a6286e8342b3c651b188 100644
--- a/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java
+++ b/GUI/src/main/java/cz/fidentis/analyst/core/ProjectTopComp.java
@@ -24,6 +24,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
+import javax.swing.JFileChooser;
 import javax.swing.JOptionPane;
 import javax.swing.event.TableModelEvent;
 import javax.swing.event.TableModelListener;
@@ -218,14 +219,15 @@ public final class ProjectTopComp extends TopComponent {
         jTable1.getTableHeader().setOpaque(false);
         jTable1.getTableHeader().setBackground(new java.awt.Color(204,204,204));
         jTable1.getTableHeader().setFont(new java.awt.Font("Tahoma", 0, 18));
+        //jTable1.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
         jTable1.setModel(new javax.swing.table.DefaultTableModel(
             new Object [][] {},
-            new String [] {"", "Models"}) {
+            new String [] {"", "Models", "KD-tree"}) {
             private Class[] types = new Class [] {
-                java.lang.Boolean.class, java.lang.Object.class
+                java.lang.Boolean.class, java.lang.Object.class, java.lang.Boolean.class
             };
             private boolean[] canEdit = new boolean [] {
-                true, false};
+                true, false, false};
 
             public Class getColumnClass(int columnIndex) {
                 return types [columnIndex];}
@@ -247,6 +249,12 @@ public final class ProjectTopComp extends TopComponent {
             }
         });
         //javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();
+        jTable1.getColumnModel().getColumn(0).setMaxWidth(50);
+        //jTable1.getColumnModel().getColumn(1).setPreferredWidth(1000);
+        jTable1.getColumnModel().getColumn(2).setMaxWidth(75);
+        jTable1.getTableHeader().getColumnModel().getColumn(0).setMaxWidth(50);
+        //jTable1.getTableHeader().getColumnModel().getColumn(1).setPreferredWidth(1000);
+        jTable1.getTableHeader().getColumnModel().getColumn(2).setMaxWidth(75);
         model = (javax.swing.table.DefaultTableModel) jTable1.getModel();
         model.addTableModelListener(new TableModelListener() {
 
@@ -269,13 +277,6 @@ public final class ProjectTopComp extends TopComponent {
         jTable1.setRowSelectionAllowed(false);
         jTable1.getTableHeader().setReorderingAllowed(false);
         jScrollPane1.setViewportView(jTable1);
-        jTable1.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
-        if (jTable1.getColumnModel().getColumnCount() > 0) {
-            jTable1.getColumnModel().getColumn(0).setPreferredWidth(50);
-            jTable1.getColumnModel().getColumn(0).setMaxWidth(50);
-            jTable1.getColumnModel().getColumn(0).setHeaderValue(org.openide.util.NbBundle.getMessage(ProjectTopComp.class, "ProjectTopComp.jTable1.columnModel.title1_1")); // NOI18N
-            jTable1.getColumnModel().getColumn(1).setHeaderValue(org.openide.util.NbBundle.getMessage(ProjectTopComp.class, "ProjectTopComp.jTable1.columnModel.title0_1")); // NOI18N
-        }
 
         javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
         jPanel2.setLayout(jPanel2Layout);
@@ -459,42 +460,48 @@ public final class ProjectTopComp extends TopComponent {
      * Loads model selected in file chooser by user
      */
     public void loadModel() {
-        File file = new FileChooserBuilder(ProjectTopComp.class)
+        File[] files = new FileChooserBuilder(ProjectTopComp.class)
                 .setTitle("Open human face(s)")
                 .setDefaultWorkingDirectory(new File(System.getProperty("user.home")))
                 //.setApproveText("Add")
                 .setFileFilter(new FileNameExtensionFilter("obj files (*.obj)", "obj"))
                 .setAcceptAllFileFilterUsed(true)
-                .showOpenDialog();
-
-        if (file == null) {
+                .showMultiOpenDialog();
+        
+        
+        if (files == null) {
             System.out.print("No file chosen.");
         } else {
             OutputWindow out = OutputWindow.measureTime();
-            String faceId = HumanFaceFactory.instance().loadFace(file);
-            HumanFace face = HumanFaceFactory.instance().getFace(faceId);
-            out.printDuration("Loaded model " + face.getShortName() +" with " + face.getMeshModel().getNumVertices() + " vertices");
-
-            try {
-                // simple hack:
-                Path path = Paths.get(file.getAbsolutePath());
-                Path folder = path.getParent();
-                Path filename = path.getFileName();
-                String filestr = filename.toString();
-                filestr = filestr.split("_ECA.obj")[0];
-                filestr = filestr + "_landmarks.csv";
-                face.loadFeaturePoints(folder.toString(), filestr);
-            } catch (IOException ex) {
-                ex.printStackTrace();
-            }
+            for (File file : files) {
+                String faceId = HumanFaceFactory.instance().loadFace(file);
+                HumanFace face = HumanFaceFactory.instance().getFace(faceId);
+                out.printDuration("Loaded model " + face.getShortName() +" with " + face.getMeshModel().getNumVertices() + " vertices");
+
+                try {
+                    // simple hack:
+                    Path path = Paths.get(file.getAbsolutePath());
+                    Path folder = path.getParent();
+                    Path filename = path.getFileName();
+                    String filestr = filename.toString();
+                    filestr = filestr.split("_ECA.obj")[0];
+                    filestr = filestr + "_landmarks.csv";
+                    face.loadFeaturePoints(folder.toString(), filestr);
+                } catch (IOException ex) {
+                    ex.printStackTrace();
+                }
 
-            String name = face.getShortName();
-            if (this.project.getFaceByName(name) == null) {
-                this.project.addFace(face);
-                model.addRow(new Object[]{false, name});
-                //createSingleFaceTab(face, name);
-            } else {
-                JOptionPane.showMessageDialog(this, "Model with this name is already loaded");
+                String name = face.getShortName();
+                if (this.project.getFaceByName(name) == null) {
+                    this.project.addFace(face);
+                    boolean hasKD;
+                    if (face.getKdTree() == null) {hasKD = false;}
+                    else                          {hasKD = true;}
+                    model.addRow(new Object[]{false, name, hasKD});
+                    //createSingleFaceTab(face, name);
+                } else {
+                    JOptionPane.showMessageDialog(this, "Model with this name is already loaded");
+                }
             }
         }
     }