[med-svn] [phyloviz-core] 12/14: New upstream version 0.0.20111121

Andreas Tille tille at debian.org
Mon Dec 18 18:57:38 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository phyloviz-core.

commit e16fb0361a61bfb2ef6458a01c60e4979f51e0e2
Author: Andreas Tille <tille at debian.org>
Date:   Mon Dec 18 17:15:44 2017 +0100

    New upstream version 0.0.20111121
---
 .gitignore                                         |    2 +
 arch.xml                                           | 1076 ++++++++++++++++++++
 build.xml                                          |    8 +
 debian/changelog                                   |    5 -
 debian/compat                                      |    1 -
 debian/control                                     |   38 -
 debian/copyright                                   |   61 --
 debian/patches/build_xml.patch                     |   60 --
 debian/patches/series                              |    1 -
 debian/phyloviz-core.jlibs                         |    1 -
 debian/rules                                       |    6 -
 debian/source/format                               |    1 -
 debian/upstream/metadata                           |   12 -
 debian/watch                                       |    3 -
 manifest.mf                                        |    7 +
 nbproject/build-impl.xml                           |   45 +
 nbproject/genfiles.properties                      |    8 +
 nbproject/platform.properties                      |   21 +
 nbproject/private/platform-private.properties      |    1 +
 nbproject/private/private.xml                      |    4 +
 nbproject/project.properties                       |    6 +
 nbproject/project.xml                              |  122 +++
 nbproject/suite.properties                         |    1 +
 src/net/phyloviz/core/Bundle.properties            |    9 +
 .../core/DataSetExplorerTopComponentSettings.xml   |   12 +
 .../core/DataSetExplorerTopComponentWstcref.xml    |   11 +
 src/net/phyloviz/core/DataSetIcon.png              |  Bin 0 -> 3405 bytes
 src/net/phyloviz/core/DataSetImage.png             |  Bin 0 -> 11063 bytes
 src/net/phyloviz/core/PopulationIcon.png           |  Bin 0 -> 3498 bytes
 src/net/phyloviz/core/PopulationImage.png          |  Bin 0 -> 10497 bytes
 src/net/phyloviz/core/TypingIcon.png               |  Bin 0 -> 3258 bytes
 src/net/phyloviz/core/TypingImage.png              |  Bin 0 -> 8306 bytes
 src/net/phyloviz/core/data/AbstractProfile.java    |  133 +++
 src/net/phyloviz/core/data/DataItem.java           |   89 ++
 src/net/phyloviz/core/data/DataModel.java          |  140 +++
 src/net/phyloviz/core/data/DataSaver.java          |  110 ++
 src/net/phyloviz/core/data/DataSet.java            |  134 +++
 src/net/phyloviz/core/data/DataSetTracker.java     |   83 ++
 src/net/phyloviz/core/data/Isolate.java            |  164 +++
 src/net/phyloviz/core/data/Population.java         |  451 ++++++++
 src/net/phyloviz/core/data/Profile.java            |  116 +++
 src/net/phyloviz/core/data/TypingData.java         |  509 +++++++++
 src/net/phyloviz/core/explorer/Bundle.properties   |    3 +
 .../core/explorer/DataSetExplorerTopComponent.form |   18 +
 .../core/explorer/DataSetExplorerTopComponent.java |  195 ++++
 src/net/phyloviz/core/explorer/DataSetNode.java    |  105 ++
 .../phyloviz/core/explorer/ExplorerChildren.java   |   74 ++
 src/net/phyloviz/core/explorer/PopulationNode.java |   92 ++
 src/net/phyloviz/core/explorer/TypingDataNode.java |   95 ++
 src/net/phyloviz/core/layer.xml                    |   92 ++
 src/net/phyloviz/core/util/NodeFactory.java        |   54 +
 src/net/phyloviz/core/util/PopulationFactory.java  |   85 ++
 src/net/phyloviz/core/util/TypingFactory.java      |   92 ++
 src/net/phyloviz/core/wizard/Bundle.properties     |   13 +
 .../core/wizard/LoadDataSetVisualPanel1.form       |  144 +++
 .../core/wizard/LoadDataSetVisualPanel1.html       |   11 +
 .../core/wizard/LoadDataSetVisualPanel1.java       |  208 ++++
 .../core/wizard/LoadDataSetVisualPanel2.form       |  148 +++
 .../core/wizard/LoadDataSetVisualPanel2.html       |   21 +
 .../core/wizard/LoadDataSetVisualPanel2.java       |  175 ++++
 .../core/wizard/LoadDataSetVisualPanel3.form       |  173 ++++
 .../core/wizard/LoadDataSetVisualPanel3.html       |   10 +
 .../core/wizard/LoadDataSetVisualPanel3.java       |  239 +++++
 .../core/wizard/LoadDataSetWizardAction.java       |  125 +++
 .../core/wizard/LoadDataSetWizardPanel1.java       |  134 +++
 .../core/wizard/LoadDataSetWizardPanel2.java       |  128 +++
 .../core/wizard/LoadDataSetWizardPanel3.java       |  152 +++
 67 files changed, 5848 insertions(+), 189 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3197301
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/build/
+/nbproject/private/
\ No newline at end of file
diff --git a/arch.xml b/arch.xml
new file mode 100644
index 0000000..39de493
--- /dev/null
+++ b/arch.xml
@@ -0,0 +1,1076 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE api-answers PUBLIC "-//NetBeans//DTD Arch Answers//EN" "http://hg.netbeans.org/main/raw-file/tip/nbbuild/antsrc/org/netbeans/nbbuild/Arch.dtd" [
+  <!ENTITY api-questions SYSTEM "http://hg.netbeans.org/main/raw-file/tip/nbbuild/antsrc/org/netbeans/nbbuild/Arch-api-questions.xml">
+]>
+
+<api-answers
+  question-version="1.29"
+  author="yourname at netbeans.org"
+>
+
+  &api-questions;
+
+
+<!--
+        <question id="arch-overall" when="init">
+            Describe the overall architecture. 
+            <hint>
+            What will be API for 
+            <a href="http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi">
+                clients and what support API</a>? 
+            What parts will be pluggable?
+            How will plug-ins be registered? Please use <code><api type="export"/></code>
+            to describe your general APIs and specify their
+            <a href="http://openide.netbeans.org/tutorial/api-design.html#category-private">
+            stability categories</a>.
+            If possible please provide simple diagrams.
+            </hint>
+        </question>
+-->
+ <answer id="arch-overall">
+  <p>
+   XXX no answer for arch-overall
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="arch-quality" when="init">
+            How will the <a href="http://www.netbeans.org/community/guidelines/q-evangelism.html">quality</a>
+            of your code be tested and 
+            how are future regressions going to be prevented?
+            <hint>
+            What kind of testing do
+            you want to use? How much functionality, in which areas,
+            should be covered by the tests? How you find out that your
+            project was successful?
+            </hint>
+        </question>
+-->
+ <answer id="arch-quality">
+  <p>
+   XXX no answer for arch-quality
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="arch-time" when="init">
+            What are the time estimates of the work?
+            <hint>
+            Please express your estimates of how long the design, implementation,
+            stabilization are likely to last. How many people will be needed to
+            implement this and what is the expected milestone by which the work should be 
+            ready?
+            </hint>
+        </question>
+-->
+ <answer id="arch-time">
+  <p>
+   XXX no answer for arch-time
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="arch-usecases" when="init">
+            <hint>
+                Content of this answer will be displayed as part of page at
+                http://www.netbeans.org/download/dev/javadoc/usecases.html 
+                You can use tags <usecase name="name> regular html description </usecase>
+                and if you want to use an URL you can prefix if with @TOP@ to begin
+                at the root of your javadoc
+            </hint>
+        
+            Describe the main <a href="http://openide.netbeans.org/tutorial/api-design.html#usecase">
+            use cases</a> of the new API. Who will use it under
+            what circumstances? What kind of code would typically need to be written
+            to use the module?
+        </question>
+-->
+ <answer id="arch-usecases">
+  <p>
+   XXX no answer for arch-usecases
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="arch-what" when="init">
+            What is this project good for?
+            <hint>
+            Please provide here a few lines describing the project, 
+            what problem it should solve, provide links to documentation, 
+            specifications, etc.
+            </hint>
+        </question>
+-->
+ <answer id="arch-what">
+  <p>
+   XXX no answer for arch-what
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="arch-where" when="impl">
+            Where one can find sources for your module?
+            <hint>
+                Please provide link to the Hg web client at
+                http://hg.netbeans.org/
+                or just use tag defaultanswer generate='here'
+            </hint>
+        </question>
+-->
+ <answer id="arch-where">
+  <defaultanswer generate='here' />
+ </answer>
+
+
+
+<!--
+        <question id="compat-deprecation" when="init">
+            How the introduction of your project influences functionality
+            provided by previous version of the product?
+            <hint>
+            If you are planning to deprecate/remove/change any existing APIs,
+            list them here accompanied with the reason explaining why you
+            are doing so.
+            </hint>
+        </question>
+-->
+ <answer id="compat-deprecation">
+  <p>
+   XXX no answer for compat-deprecation
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="compat-i18n" when="impl">
+            Is your module correctly internationalized?
+            <hint>
+            Correct internationalization means that it obeys instructions 
+            at <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/i18n-branding.html">
+            NetBeans I18N pages</a>.
+            </hint>
+        </question>
+-->
+ <answer id="compat-i18n">
+  <p>
+   XXX no answer for compat-i18n
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="compat-standards" when="init">
+            Does the module implement or define any standards? Is the 
+            implementation exact or does it deviate somehow?
+        </question>
+-->
+ <answer id="compat-standards">
+  <p>
+   XXX no answer for compat-standards
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="compat-version" when="impl">
+            Can your module coexist with earlier and future
+            versions of itself? Can you correctly read all old settings? Will future
+            versions be able to read your current settings? Can you read
+            or politely ignore settings stored by a future version?
+            
+            <hint>
+            Very helpful for reading settings is to store version number
+            there, so future versions can decide whether how to read/convert
+            the settings and older versions can ignore the new ones.
+            </hint>
+        </question>
+-->
+ <answer id="compat-version">
+  <p>
+   XXX no answer for compat-version
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="dep-jre" when="final">
+            Which version of JRE do you need (1.2, 1.3, 1.4, etc.)?
+            <hint>
+            It is expected that if your module runs on 1.x that it will run 
+            on 1.x+1 if no, state that please. Also describe here cases where
+            you run different code on different versions of JRE and why.
+            </hint>
+        </question>
+-->
+ <answer id="dep-jre">
+  <p>
+   XXX no answer for dep-jre
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="dep-jrejdk" when="final">
+            Do you require the JDK or is the JRE enough?
+        </question>
+-->
+ <answer id="dep-jrejdk">
+  <p>
+   XXX no answer for dep-jrejdk
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="dep-nb" when="init">
+            What other NetBeans projects and modules does this one depend on?
+            <hint>
+            Depending on other NetBeans projects influnces the ability of
+            users of your work to customize their own branded version of
+            NetBeans by enabling and disabling some modules. Too
+            much dependencies restrict this kind of customization. If that
+            is your case, then you may want to split your functionality into
+            pieces of autoload, eager and regular modules which can be
+            enabled independently. Usually the answer to this question
+            is generated from your <code>project.xml</code> file, but
+            if it is not guessed correctly, you can suppress it by
+            specifying <defaultanswer generate="none"/> and
+            write here your own. Please describe such projects as imported APIs using
+            the <code><api name="identification" type="import or export" category="stable" url="where is the description" /></code>.
+            By doing this information gets listed in the summary page of your
+            javadoc.
+            </hint>
+        </question>
+-->
+ <answer id="dep-nb">
+  <defaultanswer generate='here' />
+ </answer>
+
+
+
+<!--
+        <question id="dep-non-nb" when="init">
+            What other projects outside NetBeans does this one depend on?
+            
+            <hint>
+            Depending on 3rd party libraries is always problematic,
+            especially if they are not open source, as that complicates
+            the licensing scheme of NetBeans. Please enumerate your
+            external dependencies here, so it is correctly understood since
+            the begining what are the legal implications of your project.
+            Also please note that
+            some non-NetBeans projects are packaged as NetBeans modules
+            (see <a href="http://libs.netbeans.org/">libraries</a>) and
+            it is preferred to use this approach when more modules may
+            depend and share such third-party libraries.
+            </hint>
+        </question>
+-->
+ <answer id="dep-non-nb">
+  <p>
+   XXX no answer for dep-non-nb
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="dep-platform" when="init">
+            On which platforms does your module run? Does it run in the same
+            way on each?
+            <hint>
+            If you plan any dependency on OS or any usage of native code,
+            please describe why you are doing so and describe how you envision
+            to enforce the portability of your code.
+            Please note that there is a support for <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-modules/org/openide/modules/doc-files/api.html#how-os-specific">OS conditionally
+            enabled modules</a> which together with autoload/eager modules
+            can allow you to enable to provide the best OS aware support
+            on certain OSes while providing compatibility bridge on the not
+            supported ones.
+            Also please list the supported
+            OSes/HW platforms and mentioned the lovest version of JDK required
+            for your project to run on. Also state whether JRE is enough or
+            you really need JDK.
+            </hint>
+        </question>
+-->
+ <answer id="dep-platform">
+  <p>
+   XXX no answer for dep-platform
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="deploy-dependencies" when="final">
+            What do other modules need to do to declare a dependency on this one,
+            in addition to or instead of the normal module dependency declaration
+            (e.g. tokens to require)?
+            <hint>
+                Provide a sample of the actual lines you would add to a module manifest
+                to declare a dependency, for example OpenIDE-Module-Requires: some.token.
+                If other modules should not depend on this module, or should just use a
+                simple regular module dependency, you can just answer "nothing". If you
+                intentionally expose a semistable API to clients using implementation
+                dependencies, you should mention that here (but there is no need to give
+                an example of usage).
+            </hint>
+        </question>
+-->
+ <answer id="deploy-dependencies">
+  <p>
+   XXX no answer for deploy-dependencies
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="deploy-jar" when="impl">
+            Do you deploy just module JAR file(s) or other files as well?
+            <hint>
+            Usually a module consist of one JAR file (perhaps with Class-Path
+            extensions) and also a configuration file that enables it. If you
+            have any other files, use
+            <api group="java.io.File" name="yourname" type="export" category="friend">...</api>
+            to define the location, name and stability of your files (of course
+            changing "yourname" and "friend" to suit your needs).
+            
+            If it uses more than one JAR, describe where they are located, how
+            they refer to each other. 
+            If it consist of module JAR(s) and other files, please describe
+            what is their purpose, why other files are necessary. Please 
+            make sure that installation/uninstallation leaves the system 
+            in state as it was before installation.
+            </hint>
+        </question>
+-->
+ <answer id="deploy-jar">
+  <p>
+   XXX no answer for deploy-jar
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="deploy-nbm" when="impl">
+            Can you deploy an NBM via the Update Center?
+            <hint>
+            If not why?
+            </hint>
+        </question>
+-->
+ <answer id="deploy-nbm">
+  <p>
+   XXX no answer for deploy-nbm
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="deploy-packages" when="init">
+            Are packages of your module made inaccessible by not declaring them
+            public?
+            
+            <hint>
+            By default NetBeans build harness treats all packages are private.
+            If you export some of them - either as public or friend packages,
+            you should have a reason. If the reason is described elsewhere
+            in this document, you can ignore this question.
+            </hint>
+        </question>
+-->
+ <answer id="deploy-packages">
+  <p>
+   XXX no answer for deploy-packages
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="deploy-shared" when="final">
+            Do you need to be installed in the shared location only, or in the user directory only,
+            or can your module be installed anywhere?
+            <hint>
+            Installation location shall not matter, if it does explain why.
+            Consider also whether <code>InstalledFileLocator</code> can help.
+            </hint>
+        </question>
+-->
+ <answer id="deploy-shared">
+  <p>
+   XXX no answer for deploy-shared
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-ant-tasks" when="impl">
+            Do you define or register any ant tasks that other can use?
+            
+            <hint>
+            If you provide an ant task that users can use, you need to be very
+            careful about its syntax and behaviour, as it most likely forms an
+	          API for end users and as there is a lot of end users, their reaction
+            when such API gets broken can be pretty strong.
+            </hint>
+        </question>
+-->
+ <answer id="exec-ant-tasks">
+  <p>
+   XXX no answer for exec-ant-tasks
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-classloader" when="impl">
+            Does your code create its own class loader(s)?
+            <hint>
+            A bit unusual. Please explain why and what for.
+            </hint>
+        </question>
+-->
+ <answer id="exec-classloader">
+  <p>
+   XXX no answer for exec-classloader
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-component" when="impl">
+            Is execution of your code influenced by any (string) property
+            of any of your components?
+            
+            <hint>
+            Often <code>JComponent.getClientProperty</code>, <code>Action.getValue</code>
+            or <code>PropertyDescriptor.getValue</code>, etc. are used to influence
+            a behavior of some code. This of course forms an interface that should
+            be documented. Also if one depends on some interface that an object
+            implements (<code>component instanceof Runnable</code>) that forms an
+            API as well.
+            </hint>
+        </question>
+-->
+ <answer id="exec-component">
+  <p>
+   XXX no answer for exec-component
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-introspection" when="impl">
+            Does your module use any kind of runtime type information (<code>instanceof</code>,
+            work with <code>java.lang.Class</code>, etc.)?
+            <hint>
+            Check for cases when you have an object of type A and you also
+            expect it to (possibly) be of type B and do some special action. That
+            should be documented. The same applies on operations in meta-level
+            (Class.isInstance(...), Class.isAssignableFrom(...), etc.).
+            </hint>
+        </question>
+-->
+ <answer id="exec-introspection">
+  <p>
+   XXX no answer for exec-introspection
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-privateaccess" when="final">
+            Are you aware of any other parts of the system calling some of 
+            your methods by reflection?
+            <hint>
+            If so, describe the "contract" as an API. Likely private or friend one, but
+            still API and consider rewrite of it.
+            </hint>
+        </question>
+-->
+ <answer id="exec-privateaccess">
+  <p>
+   XXX no answer for exec-privateaccess
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-process" when="impl">
+            Do you execute an external process from your module? How do you ensure
+            that the result is the same on different platforms? Do you parse output?
+            Do you depend on result code?
+            <hint>
+            If you feed an input, parse the output please declare that as an API.
+            </hint>
+        </question>
+-->
+ <answer id="exec-process">
+  <p>
+   XXX no answer for exec-process
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-property" when="impl">
+            Is execution of your code influenced by any environment or
+            Java system (<code>System.getProperty</code>) property?
+            On a similar note, is there something interesting that you
+            pass to <code>java.util.logging.Logger</code>? Or do you observe
+            what others log?
+            <hint>
+            If there is a property that can change the behavior of your 
+            code, somebody will likely use it. You should describe what it does 
+            and the <a href="http://openide.netbeans.org/tutorial/api-design.html#life">stability category</a>
+            of this API. You may use
+            <pre>
+                <api type="export" group="property" name="id" category="private" url="http://...">
+                    description of the property, where it is used, what it influence, etc.
+                </api>            
+            </pre>
+            </hint>
+        </question>
+-->
+ <answer id="exec-property">
+  <p>
+   XXX no answer for exec-property
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-reflection" when="impl">
+            Does your code use Java Reflection to execute other code?
+            <hint>
+            This usually indicates a missing or insufficient API in the other
+            part of the system. If the other side is not aware of your dependency
+            this contract can be easily broken.
+            </hint>
+        </question>
+-->
+ <answer id="exec-reflection">
+  <p>
+   XXX no answer for exec-reflection
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="exec-threading" when="init">
+            What threading models, if any, does your module adhere to? How the
+            project behaves with respect to threading?
+            <hint>
+                Is your API threadsafe? Can it be accessed from any threads or
+                just from some dedicated ones? Any special relation to AWT and
+                its Event Dispatch thread? Also
+                if your module calls foreign APIs which have a specific threading model,
+                indicate how you comply with the requirements for multithreaded access
+                (synchronization, mutexes, etc.) applicable to those APIs.
+                If your module defines any APIs, or has complex internal structures
+                that might be used from multiple threads, declare how you protect
+                data against concurrent access, race conditions, deadlocks, etc.,
+                and whether such rules are enforced by runtime warnings, errors, assertions, etc.
+                Examples: a class might be non-thread-safe (like Java Collections); might
+                be fully thread-safe (internal locking); might require access through a mutex
+                (and may or may not automatically acquire that mutex on behalf of a client method);
+                might be able to run only in the event queue; etc.
+                Also describe when any events are fired: synchronously, asynchronously, etc.
+                Ideas: <a href="http://core.netbeans.org/proposals/threading/index.html#recommendations">Threading Recommendations</a> (in progress)
+            </hint>
+        </question>
+-->
+ <answer id="exec-threading">
+  <p>
+   XXX no answer for exec-threading
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="format-clipboard" when="impl">
+            Which data flavors (if any) does your code read from or insert to
+            the clipboard (by access to clipboard on means calling methods on <code>java.awt.datatransfer.Transferable</code>?
+            
+            <hint>
+            Often Node's deal with clipboard by usage of <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
+            Check your code for overriding these methods.
+            </hint>
+        </question>
+-->
+ <answer id="format-clipboard">
+  <p>
+   XXX no answer for format-clipboard
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="format-dnd" when="impl">
+            Which protocols (if any) does your code understand during Drag & Drop?
+            <hint>
+            Often Node's deal with clipboard by usage of <code>Node.drag, Node.getDropType</code>. 
+            Check your code for overriding these methods. Btw. if they are not overridden, they
+            by default delegate to <code>Node.clipboardCopy, Node.clipboardCut and Node.pasteTypes</code>.
+            </hint>
+        </question>
+-->
+ <answer id="format-dnd">
+  <p>
+   XXX no answer for format-dnd
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="format-types" when="impl">
+            Which protocols and file formats (if any) does your module read or write on disk,
+            or transmit or receive over the network? Do you generate an ant build script?
+            Can it be edited and modified? 
+            
+            <hint>
+            <p>
+            Files can be read and written by other programs, modules and users. If they influence
+            your behaviour, make sure you either document the format or claim that it is a private
+            api (using the <api> tag). 
+            </p>
+            
+            <p>
+            If you generate an ant build file, this is very likely going to be seen by end users and
+            they will be attempted to edit it. You should be ready for that and provide here a link
+            to documentation that you have for such purposes and also describe how you are going to
+            understand such files during next release, when you (very likely) slightly change the 
+            format.
+            </p>
+            </hint>
+        </question>
+-->
+ <answer id="format-types">
+  <p>
+   XXX no answer for format-types
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="lookup-lookup" when="init">
+            Does your module use <code>org.openide.util.Lookup</code>
+            or any similar technology to find any components to communicate with? Which ones?
+            
+            <hint>
+            NetBeans is build around a generic registry of services called
+            lookup. It is preferable to use it for registration and discovery
+            if possible. See
+            <a href="http://www.netbeans.org/download/dev/javadoc/org-openide-util/org/openide/util/lookup/doc-files/index.html">
+            The Solution to Comunication Between Components
+            </a>. If you do not plan to use lookup and insist usage
+            of other solution, then please describe why it is not working for
+            you.
+            <br/>
+            When filling the final version of your arch document, please
+            describe the interfaces you are searching for, where 
+            are defined, whether you are searching for just one or more of them,
+            if the order is important, etc. Also classify the stability of such
+            API contract. Use <api group=&lookup& /> tag, so
+            your information gets listed in the summary page of your javadoc.
+            </hint>
+        </question>
+-->
+ <answer id="lookup-lookup">
+  <p>
+   XXX no answer for lookup-lookup
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="lookup-register" when="final">
+            Do you register anything into lookup for other code to find?
+            <hint>
+            Do you register using layer file or using a declarative annotation such as <code>@ServiceProvider</code>?
+            Who is supposed to find your component?
+            </hint>
+        </question>
+-->
+ <answer id="lookup-register">
+  <p>
+   XXX no answer for lookup-register
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="lookup-remove" when="final">
+            Do you remove entries of other modules from lookup?
+            <hint>
+            Why? Of course, that is possible, but it can be dangerous. Is the module
+            your are masking resource from aware of what you are doing?
+            </hint>
+        </question>
+-->
+ <answer id="lookup-remove">
+  <p>
+   XXX no answer for lookup-remove
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-exit" when="final">
+            Does your module run any code on exit?
+        </question>
+-->
+ <answer id="perf-exit">
+  <p>
+   XXX no answer for perf-exit
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-huge_dialogs" when="final">
+            Does your module contain any dialogs or wizards with a large number of
+            GUI controls such as combo boxes, lists, trees, or text areas?
+        </question>
+-->
+ <answer id="perf-huge_dialogs">
+  <p>
+   XXX no answer for perf-huge_dialogs
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-limit" when="init">
+            Are there any hard-coded or practical limits in the number or size of
+            elements your code can handle?
+            <hint>
+                Most of algorithms have increasing memory and speed complexity
+                with respect to size of data they operate on. What is the critical
+                part of your project that can be seen as a bottleneck with
+                respect to speed or required memory? What are the practical
+                sizes of data you tested your project with? What is your estimate
+                of potential size of data that would cause visible performance
+                problems? Is there some kind of check to detect such situation
+                and prevent "hard" crashes - for example the CloneableEditorSupport
+                checks for size of a file to be opened in editor
+                and if it is larger than 1Mb it shows a dialog giving the
+                user the right to decide - e.g. to cancel or commit suicide.
+            </hint>
+        </question>
+-->
+ <answer id="perf-limit">
+  <p>
+   XXX no answer for perf-limit
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-mem" when="final">
+            How much memory does your component consume? Estimate
+            with a relation to the number of windows, etc.
+        </question>
+-->
+ <answer id="perf-mem">
+  <p>
+   XXX no answer for perf-mem
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-menus" when="final">
+            Does your module use dynamically updated context menus, or
+            context-sensitive actions with complicated and slow enablement logic?
+            <hint>
+                If you do a lot of tricks when adding actions to regular or context menus, you can significantly
+                slow down display of the menu, even when the user is not using your action. Pay attention to
+                actions you add to the main menu bar, and to context menus of foreign nodes or components. If
+                the action is conditionally enabled, or changes its display dynamically, you need to check the
+                impact on performance. In some cases it may be more appropriate to make a simple action that is
+                always enabled but does more detailed checks in a dialog if it is actually run.
+            </hint>
+        </question>
+-->
+ <answer id="perf-menus">
+  <p>
+   XXX no answer for perf-menus
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-progress" when="final">
+            Does your module execute any long-running tasks?
+            
+            <hint>Long running tasks should never block 
+            AWT thread as it badly hurts the UI
+            <a href="http://performance.netbeans.org/responsiveness/issues.html">
+            responsiveness</a>.
+            Tasks like connecting over
+            network, computing huge amount of data, compilation
+            be done asynchronously (for example
+            using <code>RequestProcessor</code>), definitively it should 
+            not block AWT thread.
+            </hint>
+        </question>
+-->
+ <answer id="perf-progress">
+  <p>
+   XXX no answer for perf-progress
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-scale" when="init">
+            Which external criteria influence the performance of your
+            program (size of file in editor, number of files in menu, 
+            in source directory, etc.) and how well your code scales?
+            <hint>
+            Please include some estimates, there are other more detailed 
+            questions to answer in later phases of implementation. 
+            </hint>
+        </question>
+-->
+ <answer id="perf-scale">
+  <p>
+   XXX no answer for perf-scale
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-spi" when="init">
+            How the performance of the plugged in code will be enforced?
+            <hint>
+            If you allow foreign code to be plugged into your own module, how
+            do you enforce that it will behave correctly and quickly and will not
+            negatively influence the performance of your own module?
+            </hint>
+        </question>
+-->
+ <answer id="perf-spi">
+  <p>
+   XXX no answer for perf-spi
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-startup" when="final">
+            Does your module run any code on startup?
+        </question>
+-->
+ <answer id="perf-startup">
+  <p>
+   XXX no answer for perf-startup
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="perf-wakeup" when="final">
+            Does any piece of your code wake up periodically and do something
+            even when the system is otherwise idle (no user interaction)?
+        </question>
+-->
+ <answer id="perf-wakeup">
+  <p>
+   XXX no answer for perf-wakeup
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="resources-file" when="final">
+            Does your module use <code>java.io.File</code> directly?
+            
+            <hint>
+            NetBeans provide a logical wrapper over plain files called 
+            <code>org.openide.filesystems.FileObject</code> that
+            provides uniform access to such resources and is the preferred
+            way that should be used. But of course there can be situations when
+            this is not suitable.
+            </hint>
+        </question>
+-->
+ <answer id="resources-file">
+  <p>
+   XXX no answer for resources-file
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="resources-layer" when="final">
+            Does your module provide own layer? Does it create any files or
+            folders in it? What it is trying to communicate by that and with which 
+            components?
+            
+            <hint>
+            NetBeans allows automatic and declarative installation of resources 
+            by module layers. Module register files into appropriate places
+            and other components use that information to perform their task
+            (build menu, toolbar, window layout, list of templates, set of
+            options, etc.). 
+            </hint>
+        </question>
+-->
+ <answer id="resources-layer">
+  <p>
+   XXX no answer for resources-layer
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="resources-mask" when="final">
+            Does your module mask/hide/override any resources provided by other modules in
+            their layers?
+            
+            <hint>
+            If you mask a file provided by another module, you probably depend
+            on that and do not want the other module to (for example) change
+            the file's name. That module shall thus make that file available as an API
+            of some stability category.
+            </hint>
+        </question>
+-->
+ <answer id="resources-mask">
+  <p>
+   XXX no answer for resources-mask
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="resources-preferences" when="final">
+            Does your module uses preferences via Preferences API? Does your module use NbPreferences or
+            or regular JDK Preferences ? Does it read, write or both ? 
+            Does it share preferences with other modules ? If so, then why ?
+            <hint>
+                You may use
+                    <api type="export" group="preferences"
+                    name="preference node name" category="private">
+                    description of individual keys, where it is used, what it
+                    influences, whether the module reads/write it, etc.
+                    </api>
+                Due to XML ID restrictions, rather than /org/netbeans/modules/foo give the "name" as org.netbeans.modules.foo.
+                Note that if you use NbPreferences this name will then be the same as the code name base of the module.
+            </hint>
+        </question>
+-->
+ <answer id="resources-preferences">
+  <p>
+   XXX no answer for resources-preferences
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="resources-read" when="final">
+            Does your module read any resources from layers? For what purpose?
+            
+            <hint>
+            As this is some kind of intermodule dependency, it is a kind of API.
+            Please describe it and classify according to 
+            <a href="http://openide.netbeans.org/tutorial/api-design.html#categories">
+            common stability categories</a>.
+            </hint>
+        </question>
+-->
+ <answer id="resources-read">
+  <p>
+   XXX no answer for resources-read
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="security-grant" when="final">
+            Does your code grant additional rights to some other code?
+            <hint>Avoid using a class loader that adds extra
+            permissions to loaded code unless really necessary.
+            Also note that your API implementation
+            can also expose unneeded permissions to enemy code by
+            calling AccessController.doPrivileged().</hint>
+        </question>
+-->
+ <answer id="security-grant">
+  <p>
+   XXX no answer for security-grant
+  </p>
+ </answer>
+
+
+
+<!--
+        <question id="security-policy" when="final">
+            Does your functionality require modifications to the standard policy file?
+            <hint>Your code might pass control to third-party code not
+            coming from trusted domains. This could be code downloaded over the
+            network or code coming from libraries that are not bundled
+            with NetBeans. Which permissions need to be granted to which domains?</hint>
+        </question>
+-->
+ <answer id="security-policy">
+  <p>
+   XXX no answer for security-policy
+  </p>
+ </answer>
+
+</api-answers>
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..6148b95
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
+<!-- for some information on what you could do (e.g. targets to override). -->
+<!-- If you delete this file and reopen the project it will be recreated. -->
+<project name="net.phyloviz.core" default="netbeans" basedir=".">
+    <description>Builds, tests, and runs the project net.phyloviz.core.</description>
+    <import file="nbproject/build-impl.xml"/>
+</project>
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644
index afb4d66..0000000
--- a/debian/changelog
+++ /dev/null
@@ -1,5 +0,0 @@
-phyloviz-core (0.0.20111121-1) UNRELEASED; urgency=low
-
-  * Initial release (Closes: #<bug>)
-
- -- Andreas Tille <tille at debian.org>  Wed, 07 Nov 2012 12:07:35 +0100
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index f599e28..0000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-10
diff --git a/debian/control b/debian/control
deleted file mode 100644
index 89bd0d8..0000000
--- a/debian/control
+++ /dev/null
@@ -1,38 +0,0 @@
-Source: phyloviz-core
-Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.org>
-Uploaders: Andreas Tille <tille at debian.org>
-Section: science
-Priority: optional
-Build-Depends: debhelper (>= 10),
-               javahelper,
-               default-jdk,
-               ant,
-               libnb-platform13-java
-Standards-Version: 3.9.8
-Vcs-Browser: http://anonscm.debian.org/viewvc/debian-med/trunk/packages/phyloviz/phyloviz-core/trunk/
-Vcs-Svn: svn://anonscm.debian.org/debian-med/trunk/packages/phyloviz/phyloviz-core/trunk/
-Homepage: http://www.phyloviz.net
-
-Package: phyloviz-core
-Architecture: all
-Depends: ${misc:Depends},
-         ${java:Depends}
-Description: phylogenetic inference and data visualization for sequence based typing methods
- Phyloviz allows the analysis of sequence-based typing methods that
- generate allelic profiles and their associated epidemiological data.
- .
- For representing the possible evolutionary relationships between
- strains identified by allelic profiles it uses the goeBURST algorithm, a
- refinement of eBURST algorithm proposed by Feil et al., and its
- expansion to generate a complete minimum spanning tree (MST).
- .
- Phyloviz is being developed in a modular way to allow its expansion
- with novel data analysis algorithms and new visualization modules.
- .
- Capabilities
-  * Modularity allows the creation of plugins to analyse different types of data
-  * Allows the visualization of data overlaid onto goeBURST and MST results
-  * Confidence assessment of each link in the graph
-  * Query the data and see the query results directly onto the graphs
-  * Search your data set using regular expressions to select what to display
-  * Export the results as images in various formats: eps, png, gif, pdf, etc
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644
index 51a4831..0000000
--- a/debian/copyright
+++ /dev/null
@@ -1,61 +0,0 @@
-Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: PHYLOViZ Core
-Upstream-Contact: PHYLOViZ Team <phyloviz at gmail.com>
-Source: https://bitbucket.org/phyloviz/phyloviz-main/src
-
-Files: *
-Copyright: © 2011, PHYLOViZ Team <phyloviz at gmail.com>
-License: GPL-3
-
-Files: *.java
-Copyright: © 2011, PHYLOViZ Team <phyloviz at gmail.com>
-License: GPL-3-classpath-exception
- 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.
- .
- On Debian systems you can find a copy of the GNU General Public License
- version 3 at /usr/share/common-licenses/GPL-3
- .
- The *.java source files distributed by the PHYLOViZ Team are under the
- terms of the GNU General Public License Version 3 with the following
- clarification and special exception:
- .
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library.  Thus, the terms and
- conditions of the GNU General Public License cover the whole combination.
- .
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent modules,
- and to copy and distribute the resulting executable under terms of your
- choice, provided that you also meet, for each linked independent module,
- the terms and conditions of the license of that module.  An independent
- module is a module which is not derived from or based on this library.
- If you modify this library, you may extend this exception to your version
- of the library, but you are not obligated to do so.  If you do not wish
- to do so, delete this exception statement from your version.
-
-Files: debian/*
-Copyright: © 2012 Andreas Tille <tille at debian.org>
-License: GPL-3
-
-License: GPL-3
- 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.
- .
- On Debian systems you can find a copy of the GNU General Public License
- version 3 at /usr/share/common-licenses/GPL-3
diff --git a/debian/patches/build_xml.patch b/debian/patches/build_xml.patch
deleted file mode 100644
index 0659f9c..0000000
--- a/debian/patches/build_xml.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-Author: Olivier Sallou <olivier.sallou at irisa.fr>
-Date: Wed, 21 Nov 2012 18:37:47 +0100
-Description: build.xml without depending from netbeans magic
-
---- net-phyloviz-core.orig/build.xml
-+++ net-phyloviz-core/build.xml
-@@ -2,7 +2,51 @@
- <!-- You may freely edit this file. See harness/README in the NetBeans platform -->
- <!-- for some information on what you could do (e.g. targets to override). -->
- <!-- If you delete this file and reopen the project it will be recreated. -->
--<project name="net.phyloviz.core" default="netbeans" basedir=".">
-+<project name="net.phyloviz.core" default="jar" basedir=".">
-     <description>Builds, tests, and runs the project net.phyloviz.core.</description>
--    <import file="nbproject/build-impl.xml"/>
-+
-+    <property name="project.jarfile.name" value="phyloviz-core.jar"/>
-+    <property name="build.dir" location="build"/>
-+    <property name="class.dir" location="${build.dir}/classes"/>
-+    <property name="src.dir" location="src"/>
-+    <property name="dist.dir" location="dist"/>
-+    <property name="class.path" value="/usr/share/netbeans/platform13/modules/org-openide-dialogs.jar /usr/share/netbeans/platform13/core/org-openide-filesystems.jar /usr/share/netbeans/platform13/modules/org-openide-awt.jar /usr/share/netbeans/platform13/lib/org-openide-util.jar /usr/share/netbeans/platform13/lib/org-openide-util-lookup.jar /usr/share/netbeans/platform13/modules/org-openide-nodes.jar /usr/share/netbeans/platform13/modules/org-openide-windows.jar /usr/share/netbeans/pla [...]
-+
-+	<path id="compile.classpath">
-+	  <pathelement location="/usr/share/netbeans/platform13/modules/org-openide-dialogs.jar"/>
-+	  <pathelement location="/usr/share/netbeans/platform13/core/org-openide-filesystems.jar"/>
-+	  <pathelement location="/usr/share/netbeans/platform13/modules/org-openide-awt.jar"/>
-+	  <pathelement location="/usr/share/netbeans/platform13/lib/org-openide-util.jar"/>
-+	  <pathelement location="/usr/share/netbeans/platform13/lib/org-openide-util-lookup.jar"/>
-+	  <pathelement location="/usr/share/netbeans/platform13/modules/org-openide-nodes.jar"/>
-+	  <pathelement location="/usr/share/netbeans/platform13/modules/org-openide-explorer.jar"/>
-+	  <pathelement location="/usr/share/netbeans/platform13/modules/org-openide-windows.jar"/>
-+	  <pathelement location="/usr/share/netbeans/platform13/modules/org-openide-actions.jar"/>
-+	  <pathelement location="/usr/share/netbeans/platform13/modules/org-netbeans-modules-settings.jar"/>
-+	</path>
-+
-+	<target name="clean">
-+		<echo>Cleaning build directories</echo>
-+		<delete failonerror="false" verbose="true" includeEmptyDirs="true">
-+			<fileset dir="${build.dir}" includes="**"/>
-+			<fileset dir="${dist.dir}" includes="**"/>
-+		</delete>
-+	</target>
-+
-+        <target name="compile" depends="clean">
-+		<mkdir dir="${class.dir}"/>
-+		<mkdir dir="${dist.dir}"/>
-+		<javac classpathref="compile.classpath" srcdir="${src.dir}" destdir="${class.dir}" source="1.5">
-+		</javac>
-+   	</target>
-+
-+	<target name="jar" depends="compile">
-+		<jar destfile="${dist.dir}/${project.jarfile.name}"  basedir="${class.dir}" >
-+		 <manifest>
-+		    <attribute name="Built-By" value="${user.name}"/>
-+		 	<attribute name="Class-Path" value="${class.path}"/>
-+		  </manifest>
-+		</jar>
-+	</target>
-+
- </project>
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index 46a7f4e..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1 +0,0 @@
-build_xml.patch
diff --git a/debian/phyloviz-core.jlibs b/debian/phyloviz-core.jlibs
deleted file mode 100644
index 0288912..0000000
--- a/debian/phyloviz-core.jlibs
+++ /dev/null
@@ -1 +0,0 @@
-dist/phyloviz-core.jar
diff --git a/debian/rules b/debian/rules
deleted file mode 100755
index 59f50fc..0000000
--- a/debian/rules
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/make -f
-
-# DH_VERBOSE := 1
-
-%:
-	dh $@ --with javahelper
diff --git a/debian/source/format b/debian/source/format
deleted file mode 100644
index 163aaf8..0000000
--- a/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (quilt)
diff --git a/debian/upstream/metadata b/debian/upstream/metadata
deleted file mode 100644
index 4862ece..0000000
--- a/debian/upstream/metadata
+++ /dev/null
@@ -1,12 +0,0 @@
-Reference:
-  Author: Alexandre P Francisco and Cátia Vaz and Pedro T Monteiro and José Melo-Cristino and Mário Ramirez and João A Carriço
-  Title: "PHYLOViZ: phylogenetic inference and data visualization for sequence based typing methods"
-  Journal: BMC Bioinformatics
-  Year: 2012
-  Volume: 13
-  Number: 1
-  Pages: 87
-  DOI: 10.1186/1471-2105-13-87
-  PMID: 22568821
-  URL: http://www.biomedcentral.com/1471-2105/13/87/abstract
-  eprint: http://www.biomedcentral.com/content/pdf/1471-2105-13-87.pdf
diff --git a/debian/watch b/debian/watch
deleted file mode 100644
index 67e4f6e..0000000
--- a/debian/watch
+++ /dev/null
@@ -1,3 +0,0 @@
-version=4
-
-https://bitbucket.org/phyloviz/phyloviz-main/downloads?tab=tags .*/(\d\S*)\.tar\.gz
diff --git a/manifest.mf b/manifest.mf
new file mode 100644
index 0000000..9170c10
--- /dev/null
+++ b/manifest.mf
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+OpenIDE-Module: net.phyloviz.core/1
+OpenIDE-Module-Implementation-Version: 0
+OpenIDE-Module-Layer: net/phyloviz/core/layer.xml
+OpenIDE-Module-Localizing-Bundle: net/phyloviz/core/Bundle.properties
+OpenIDE-Module-Requires: org.openide.windows.WindowManager
+
diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml
new file mode 100644
index 0000000..b3657be
--- /dev/null
+++ b/nbproject/build-impl.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+*** GENERATED FROM project.xml - DO NOT EDIT  ***
+***         EDIT ../build.xml INSTEAD         ***
+-->
+<project name="net.phyloviz.core-impl" basedir="..">
+    <fail message="Please build using Ant 1.7.1 or higher.">
+        <condition>
+            <not>
+                <antversion atleast="1.7.1"/>
+            </not>
+        </condition>
+    </fail>
+    <property file="nbproject/private/suite-private.properties"/>
+    <property file="nbproject/suite.properties"/>
+    <fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail>
+    <property file="${suite.dir}/nbproject/private/platform-private.properties"/>
+    <property file="${suite.dir}/nbproject/platform.properties"/>
+    <macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2">
+        <attribute name="name"/>
+        <attribute name="value"/>
+        <sequential>
+            <property name="@{name}" value="${@{value}}"/>
+        </sequential>
+    </macrodef>
+    <macrodef name="evalprops" uri="http://www.netbeans.org/ns/nb-module-project/2">
+        <attribute name="property"/>
+        <attribute name="value"/>
+        <sequential>
+            <property name="@{property}" value="@{value}"/>
+        </sequential>
+    </macrodef>
+    <property file="${user.properties.file}"/>
+    <nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+    <nbmproject2:property name="nbplatform.active.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+    <nbmproject2:evalprops property="cluster.path.evaluated" value="${cluster.path}" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
+    <fail message="Path to 'platform' cluster missing in $${cluster.path} property or using corrupt Netbeans Platform (missing harness).">
+        <condition>
+            <not>
+                <contains string="${cluster.path.evaluated}" substring="platform"/>
+            </not>
+        </condition>
+    </fail>
+    <import file="${harness.dir}/build.xml"/>
+</project>
diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties
new file mode 100644
index 0000000..dc071a1
--- /dev/null
+++ b/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=fb01bea2
+build.xml.script.CRC32=52cce0f2
+build.xml.stylesheet.CRC32=a56c6a5b at 1.42.2
+# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
+# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
+nbproject/build-impl.xml.data.CRC32=fb01bea2
+nbproject/build-impl.xml.script.CRC32=7615d751
+nbproject/build-impl.xml.stylesheet.CRC32=238281d1 at 1.42.2
diff --git a/nbproject/platform.properties b/nbproject/platform.properties
new file mode 100644
index 0000000..d3920a2
--- /dev/null
+++ b/nbproject/platform.properties
@@ -0,0 +1,21 @@
+cluster.path=\
+    ${nbplatform.active.dir}/platform
+disabled.modules=\
+    org.jdesktop.layout,\
+    org.netbeans.api.visual,\
+    org.netbeans.core.execution,\
+    org.netbeans.core.multiview,\
+    org.netbeans.libs.jsr223,\
+    org.netbeans.libs.junit4,\
+    org.netbeans.modules.autoupdate.services,\
+    org.netbeans.modules.autoupdate.ui,\
+    org.netbeans.modules.core.kit,\
+    org.netbeans.modules.editor.mimelookup.impl,\
+    org.netbeans.modules.favorites,\
+    org.netbeans.modules.masterfs,\
+    org.netbeans.modules.print,\
+    org.openide.compat,\
+    org.openide.execution,\
+    org.openide.options,\
+    org.openide.util.enumerations
+nbplatform.active=default
diff --git a/nbproject/private/platform-private.properties b/nbproject/private/platform-private.properties
new file mode 100644
index 0000000..efc2b62
--- /dev/null
+++ b/nbproject/private/platform-private.properties
@@ -0,0 +1 @@
+user.properties.file=/home/aplf/.netbeans/6.9/build.properties
diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml
new file mode 100644
index 0000000..c1f155a
--- /dev/null
+++ b/nbproject/private/private.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
+    <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/1"/>
+</project-private>
diff --git a/nbproject/project.properties b/nbproject/project.properties
new file mode 100644
index 0000000..2b8c9ef
--- /dev/null
+++ b/nbproject/project.properties
@@ -0,0 +1,6 @@
+javac.source=1.6
+javac.compilerargs=-Xlint -Xlint:-serial
+license.file=../../PHYLOViZ/COPYING.LIB
+nbm.homepage=http://www.phyloviz.net/
+nbm.module.author=PHYLOViZ Team
+spec.version.base=1.4
diff --git a/nbproject/project.xml b/nbproject/project.xml
new file mode 100644
index 0000000..715baf1
--- /dev/null
+++ b/nbproject/project.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.apisupport.project</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
+            <code-name-base>net.phyloviz.core</code-name-base>
+            <suite-component/>
+            <module-dependencies>
+                <dependency>
+                    <code-name-base>org.netbeans.modules.autoupdate.services</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>1.20.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.netbeans.modules.settings</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <release-version>1</release-version>
+                        <specification-version>1.26.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.actions</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>6.16.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.awt</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>7.23.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.dialogs</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>7.15.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.explorer</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>6.28.2</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.filesystems</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>7.38.2</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.loaders</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>7.16.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.nodes</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>7.16.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.util</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>8.6.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.util.lookup</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>8.3.1</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
+                    <code-name-base>org.openide.windows</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>6.33.1</specification-version>
+                    </run-dependency>
+                </dependency>
+            </module-dependencies>
+            <test-dependencies>
+                <test-type>
+                    <name>unit</name>
+                    <test-dependency>
+                        <code-name-base>org.netbeans.libs.junit4</code-name-base>
+                        <compile-dependency/>
+                    </test-dependency>
+                </test-type>
+            </test-dependencies>
+            <public-packages>
+                <package>net.phyloviz.core.data</package>
+                <package>net.phyloviz.core.util</package>
+            </public-packages>
+        </data>
+    </configuration>
+</project>
diff --git a/nbproject/suite.properties b/nbproject/suite.properties
new file mode 100644
index 0000000..639623d
--- /dev/null
+++ b/nbproject/suite.properties
@@ -0,0 +1 @@
+suite.dir=${basedir}/../../PHYLOViZ
diff --git a/src/net/phyloviz/core/Bundle.properties b/src/net/phyloviz/core/Bundle.properties
new file mode 100644
index 0000000..544d0aa
--- /dev/null
+++ b/src/net/phyloviz/core/Bundle.properties
@@ -0,0 +1,9 @@
+net_phyloviz_core_update_center=http://www.phyloviz.net/updates/updates.xml.gz
+OpenIDE-Module-Display-Category=PHYLOViZ
+OpenIDE-Module-Long-Description=\
+    Core classes and PHYLOViZ API. \
+    It provides the logic and glue required by all other PHYLOViZ modules.
+OpenIDE-Module-Name=PHYLOViZ Core
+CTL_LoadDataSetAction=&Load Dataset
+OpenIDE-Module-Short-Description=Core classes and PHYLOViZ API
+Services/AutoupdateType/net_phyloviz_core_update_center.instance=PHYLOViZ Update Center
diff --git a/src/net/phyloviz/core/DataSetExplorerTopComponentSettings.xml b/src/net/phyloviz/core/DataSetExplorerTopComponentSettings.xml
new file mode 100644
index 0000000..5f8c217
--- /dev/null
+++ b/src/net/phyloviz/core/DataSetExplorerTopComponentSettings.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+To change this template, choose Tools | Templates
+and open the template in the editor.
+-->
+<!DOCTYPE settings PUBLIC "-//NetBeans//DTD Session settings 1.0//EN" "http://www.netbeans.org/dtds/sessionsettings-1_0.dtd">
+<settings version="1.0">
+	<module name="net.phyloviz.core" spec="1.0"/>
+	<instanceof class="org.openide.windows.TopComponent"/>
+	<instanceof class="net.phyloviz.core.explorer.DataSetExplorerTopComponent"/>
+	<instance class="net.phyloviz.core.explorer.DataSetExplorerTopComponent" method="getDefault"/>
+</settings>
diff --git a/src/net/phyloviz/core/DataSetExplorerTopComponentWstcref.xml b/src/net/phyloviz/core/DataSetExplorerTopComponentWstcref.xml
new file mode 100644
index 0000000..ea4fae1
--- /dev/null
+++ b/src/net/phyloviz/core/DataSetExplorerTopComponentWstcref.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+To change this template, choose Tools | Templates
+and open the template in the editor.
+-->
+<!DOCTYPE tc-ref PUBLIC "-//NetBeans//DTD Top Component in Mode Properties 2.0//EN" "http://www.netbeans.org/dtds/tc-ref2_0.dtd">
+<tc-ref version="2.0" >
+	<module name="net.phyloviz.core" spec="1.0"/>
+	<tc-id id="DataSetExplorerTopComponent"/>
+	<state opened="true"/>
+</tc-ref>
diff --git a/src/net/phyloviz/core/DataSetIcon.png b/src/net/phyloviz/core/DataSetIcon.png
new file mode 100644
index 0000000..d4efcf6
Binary files /dev/null and b/src/net/phyloviz/core/DataSetIcon.png differ
diff --git a/src/net/phyloviz/core/DataSetImage.png b/src/net/phyloviz/core/DataSetImage.png
new file mode 100644
index 0000000..1a1a0a6
Binary files /dev/null and b/src/net/phyloviz/core/DataSetImage.png differ
diff --git a/src/net/phyloviz/core/PopulationIcon.png b/src/net/phyloviz/core/PopulationIcon.png
new file mode 100644
index 0000000..6ef630d
Binary files /dev/null and b/src/net/phyloviz/core/PopulationIcon.png differ
diff --git a/src/net/phyloviz/core/PopulationImage.png b/src/net/phyloviz/core/PopulationImage.png
new file mode 100644
index 0000000..b6f6e92
Binary files /dev/null and b/src/net/phyloviz/core/PopulationImage.png differ
diff --git a/src/net/phyloviz/core/TypingIcon.png b/src/net/phyloviz/core/TypingIcon.png
new file mode 100644
index 0000000..00dcdde
Binary files /dev/null and b/src/net/phyloviz/core/TypingIcon.png differ
diff --git a/src/net/phyloviz/core/TypingImage.png b/src/net/phyloviz/core/TypingImage.png
new file mode 100644
index 0000000..6db7ce5
Binary files /dev/null and b/src/net/phyloviz/core/TypingImage.png differ
diff --git a/src/net/phyloviz/core/data/AbstractProfile.java b/src/net/phyloviz/core/data/AbstractProfile.java
new file mode 100644
index 0000000..89a04b0
--- /dev/null
+++ b/src/net/phyloviz/core/data/AbstractProfile.java
@@ -0,0 +1,133 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.data;
+
+/**
+ * This class provides a skeletal implementation of the <tt>Profile</tt>
+ * interface, to minimize the effort required to implement this interface.
+ *
+ * @since   PHILOViZ 1.0
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ */
+public abstract class AbstractProfile implements Profile {
+
+	/**
+	 * The internal value  of the identifier for this typing profile.
+	 */
+	protected int uid;
+
+	/**
+	 * The identifier of this typing profile.
+	 */
+	protected String id;
+
+        /**
+	 * Returns an <tt>int</tt>  that represents the internal identifier of this typing
+	 * profile.
+	 *
+	 * @return the internal value of the identifier for this typing profile.
+	 *
+	 */
+	@Override
+	public int getUID() {
+		return uid;
+	}
+
+       /**
+	 * Returns a <tt>String</tt>  that represents the identifier of this typing
+	 * profile.
+	 *
+	 * @return the identifier of this typing profile.
+	 */
+	@Override
+	public String getID() {
+		return id;
+	}
+
+        /**
+	 * Returns  the value of a feature of this
+	 * profile as a string that is at the specified index. An index ranges from
+	 * <code>0</code> to <code>profileLenght() - 1</code>.
+	 * The first description corresponds to the feature that
+	 * is at index <code>0</code>, the next at index <code>1</code>,
+	 * and so on, as for array indexing.
+	 *
+	 *
+	 * @param      idx the index of the description of a feature.
+	 * @return     the <code>String</code>  representation
+	 *             of a feature at the specified index of the list of features .
+	 *             The first <code>String</code> is at index <code>0</code>.
+         *             It returns <code>null</code> if the <code>idx</code>
+	 *             argument is negative or not less than the <code>profileLenght()</code>
+	 *             of this profile.
+	 */
+	@Override
+	public String get(int idx) {
+		if (idx < 0 || idx >= length()) {
+			return null;
+		}
+
+		if (idx == 0) {
+			return getID();
+		} else {
+			return getValue(idx - 1);
+		}
+	}
+
+        /**
+	 * Returns the number of features of this profile (including its ID).
+	 * If contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+	 * <tt>Integer.MAX_VALUE</tt>.
+	 *
+	 * @return the number of elements in this profile (including its ID).
+	 */
+	@Override
+	public int length() {
+		return profileLength() + 1;
+	}
+
+        /**
+	 * Returns the weight of this typing
+	 * profile among all the isolates.
+	 *
+	 * @return the weight of this typing profile.
+	 *
+	 */
+	@Override
+	public int weight() {
+		return getFreq();
+	}
+}
diff --git a/src/net/phyloviz/core/data/DataItem.java b/src/net/phyloviz/core/data/DataItem.java
new file mode 100644
index 0000000..2f5e630
--- /dev/null
+++ b/src/net/phyloviz/core/data/DataItem.java
@@ -0,0 +1,89 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.data;
+
+/**
+ * This interface describes the minimal requirements for a data item, i.e., a
+ * data vector.
+ * @since   PHILOViZ 1.0
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ */
+public interface DataItem {
+
+	/**
+	 * Returns a <tt>String</tt>  that represents the identifier of this
+	 * data item.
+	 *
+	 * @return the identifier of this typing profile.
+	 */
+	public String getID();
+
+	/**
+	 * Returns  the value of a feature of this data item as a string that is
+	 * at the specified index. An index ranges from <code>0</code> to
+	 * <code>lenght() - 1</code>.
+	 * The first description corresponds to the feature that
+	 * is at index <code>0</code>, the next at index <code>1</code>,
+	 * and so on, as for array indexing.
+	 *
+	 *
+	 * @param      idx the index of the description of a feature.
+	 * @return     the <code>String</code>  representation
+	 *             of a feature at the specified index of the list of features.
+	 *             The first <code>String</code> is at index <code>0</code>.
+	 * @exception  IndexOutOfBoundsException  if the <code>idx</code>
+	 *             argument is negative or not less than
+	 *             <code>length()</code>.
+	 */
+	public String get(int idx);
+
+	/**
+	 * Returns the number of features of this data item.
+	 * If it contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+	 * <tt>Integer.MAX_VALUE</tt>.
+	 *
+	 * @return the number of elements in this collection.
+	 */
+	public int length();
+
+	/**
+	 * Returns the weight of this data item, for instance its relevance or
+	 * frequency on a given dataset.
+	 *
+	 * @return the weight for this item.
+	 */
+	public int weight();
+}
diff --git a/src/net/phyloviz/core/data/DataModel.java b/src/net/phyloviz/core/data/DataModel.java
new file mode 100644
index 0000000..6816710
--- /dev/null
+++ b/src/net/phyloviz/core/data/DataModel.java
@@ -0,0 +1,140 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.data;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import javax.swing.table.AbstractTableModel;
+
+/**
+ * The <code> DataModel </code> interface specifies the methods for a
+ * tabular representation of the data. Each row of the
+ * table is a <code>DataItem</code>, i.e., a vector of data values that caracterize the
+ * item.
+ *
+ *
+ * @since   PHILOViZ 1.0
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ *
+ */
+public interface DataModel {
+
+	/**
+         * Returns a table model for the data model.
+         * @return a table model for the data model.
+         * 
+         */
+	public AbstractTableModel tableModel();
+
+        /**
+         * Returns the label that describes the domain
+         * of the data values in the column <code>idx</code> of the table model.
+         * @param idx  the <code>idx</code> column in the table model.
+         * @return the label that describes the domain of the data values that are
+         * on the column <code>idx</code> of the table model.
+         */
+	public String getDomainLabel(int idx);
+
+       /**
+        * Returns the set of  all data  values   that appear in
+        * the column  <code>idx</code> of the table model for some data item.
+        * @param idx  the <code>idx</code> column in the table model.
+        * @return the set of data values that appear in the column <code>idx</code> in the
+        * table model.
+        */
+	public HashSet<String> getDomain(int idx);
+
+	/**
+	 * Returns the key column of this data model.
+	 *
+	 * @return the index of the key column for this model.
+	 */
+	public int getKey();
+
+	/**
+	 * Returns a collection with all the data items of this data model.
+	 *
+	 *
+	 * @return a <code>Collection</code> with all the data items of this data model.
+	 */
+	public Collection<? extends DataItem> getItems();
+
+	/**
+         *  Returns an iterator over the data items.
+         * @return an <code>Iterator</code> over the data items.
+         */
+	public Iterator<? extends DataItem> iterator();
+
+        /**
+         *  Returns the number of data items in this data model. If this
+         *  data model contains more than
+         *  Integer.MAX_VALUE data items, returns Integer.MAX_VALUE. 
+         *  @return  the number of data items in this data model.
+         */ 
+	public int size();
+
+       /**
+        *
+	* Returns the sum of the weights of all the data items of this model.
+	* @return the sum of the weights of all the data items of this model.
+        */
+	public int weight();
+
+	public DataSaver getSaver();
+
+	/**
+         * Adds a new column to this population model with name
+         * <code>header</code> and values obtained thought <code>cf</code>,
+         * if there is not already a column with the same name.
+         *
+         * @param header the name of the column to add.
+         * @param cf  the filler for the column to add.
+         * @return <code>true</code> if this population model
+         * did not already contain a column with  the specified name.
+         */
+	public boolean addColumn(String domainLabel, ColumnFiller cf);
+
+	/**
+         * This interface represents a column filler for this table model.
+         * Within a column, the
+         * <code>getValue</code> method obtains the value of this column for the
+         * corresponding isolate.
+         */
+	public interface ColumnFiller {
+		public String getValue(DataItem i);
+	}
+}
diff --git a/src/net/phyloviz/core/data/DataSaver.java b/src/net/phyloviz/core/data/DataSaver.java
new file mode 100644
index 0000000..e2137ad
--- /dev/null
+++ b/src/net/phyloviz/core/data/DataSaver.java
@@ -0,0 +1,110 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.data;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.swing.table.TableModel;
+import org.openide.DialogDisplayer;
+import org.openide.NotifyDescriptor;
+import org.openide.cookies.SaveCookie;
+import org.openide.filesystems.FileChooserBuilder;
+
+public class DataSaver implements SaveCookie {
+
+	private DataModel dm;
+
+	public DataSaver(DataModel dm) {
+		this.dm = dm;
+	}
+
+	@Override
+	public void save() throws IOException {
+
+		String title = "Saving " + this.toString() + "...";
+		File f = new FileChooserBuilder(DataSaver.class).setTitle(title).showSaveDialog();
+		if (f != null) {
+			try {
+				if (!f.exists()) {
+					if (!f.createNewFile()) {
+						String failMsg = "Unable to create " + f.getName();
+						DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message(failMsg));
+						return;
+					}
+				} else {
+					String overwriteMessage = "Overwriting " + f.getName();
+					Object userChose = DialogDisplayer.getDefault().notify(new NotifyDescriptor.Confirmation(overwriteMessage));
+					if (NotifyDescriptor.CANCEL_OPTION.equals(userChose)) {
+						return;
+					}
+				}
+
+				save(f.getAbsoluteFile());
+			} catch (IOException ioe) {
+				String failMsg = "Error: " + ioe.getMessage();
+				DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message(failMsg));
+			}
+		} else
+			throw new FileNotFoundException("Unknown file!");
+	}
+
+	private void save(File f) throws FileNotFoundException {
+
+		PrintWriter pw = new PrintWriter(f);
+		TableModel tm = dm.tableModel();
+
+		pw.print(tm.getColumnName(0));
+		for (int i = 1; i < tm.getColumnCount(); i++)
+			pw.print("\t" + tm.getColumnName(i));
+		pw.println();
+
+		for (int k = 0; k < tm.getRowCount(); k++) {
+			pw.print(tm.getValueAt(k, 0));
+			for (int i = 1; i < tm.getColumnCount(); i++)
+				pw.print("\t" + tm.getValueAt(k, i));
+			pw.println();
+		}
+
+		pw.close();
+	}
+
+	@Override
+	public String toString() {
+		return dm.toString();
+	}
+}
diff --git a/src/net/phyloviz/core/data/DataSet.java b/src/net/phyloviz/core/data/DataSet.java
new file mode 100644
index 0000000..1fa57d3
--- /dev/null
+++ b/src/net/phyloviz/core/data/DataSet.java
@@ -0,0 +1,134 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+package net.phyloviz.core.data;
+
+import net.phyloviz.core.explorer.DataSetNode;
+import net.phyloviz.core.util.NodeFactory;
+import org.openide.nodes.AbstractNode;
+import org.openide.util.Lookup;
+import org.openide.util.lookup.AbstractLookup;
+import org.openide.util.lookup.InstanceContent;
+
+/**
+ *  The DataSet class represents a set that contains population data and related
+ *  typing data. An instance of this class can be explored in the context of
+ * an explorer viewer.
+ *
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ */
+public class DataSet implements Lookup.Provider, NodeFactory {
+
+	private InstanceContent ic;
+	private AbstractLookup lookup;
+	private String name;
+	private int popKey;
+
+	/**
+	 * Constructs a new data designed by <code>name</code>
+	 * @param name the name of the data set.
+	 */
+	public DataSet(String name) {
+		ic = new InstanceContent();
+		lookup = new AbstractLookup(ic);
+		this.name = name;
+		popKey = -1;
+	}
+
+	/**
+	 * Returns the key column of the tabular model for the population of this data set.
+	 *
+	 * @return the index of the key column of the tabular model for the population of this data set.
+	 */
+	public int getPopKey() {
+		return popKey;
+	}
+
+	/**
+	 * Changes the key column of the tabular model for the population of this data set.
+	 * @param key   the new key column for the tabular model of the population of this data set.
+	 */
+	public void setPopKey(int key) {
+		Population pop = lookup.lookup(Population.class);
+		if (pop != null) {
+			pop.setKey(key);
+		}
+		popKey = key;
+	}
+
+	/**
+	 * Returns a string representation of this data set.
+	 * @overrides <code>toString</code> in class <code>Object</code>
+	 * @return a string representation of this data set.
+	 */
+	@Override
+	public String toString() {
+		return name;
+	}
+
+	/** Returns lookup associated with the object.
+	 * @return  fully initialized lookup instance provided by this object.
+	 * @override  <code>getLookUp</code> in class <code>AbstractLookUp</code>.
+	 */
+	@Override
+	public Lookup getLookup() {
+		return lookup;
+	}
+
+	/**
+	 *  Registers the object with this lookup.
+	 * @param o the object to register with this lookup.
+	 */
+	public void add(Object o) {
+		ic.add(o);
+	}
+
+	/**
+	 * Unregisters the object with this lookup.
+	 * @param o the object to be unregistered.
+	 */
+	public void remove(Object o) {
+		ic.remove(o);
+	}
+
+	/**
+	 * Allows to explore the population in the context of an explorer viewer.
+	 * @return  returns the population as a node in the explorer view.
+	 * @see AbstractNode
+	 */
+	@Override
+	public AbstractNode getNode() {
+		return new DataSetNode(this);
+	}
+}
diff --git a/src/net/phyloviz/core/data/DataSetTracker.java b/src/net/phyloviz/core/data/DataSetTracker.java
new file mode 100644
index 0000000..e27f5b7
--- /dev/null
+++ b/src/net/phyloviz/core/data/DataSetTracker.java
@@ -0,0 +1,83 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+package net.phyloviz.core.data;
+
+import org.openide.util.Lookup;
+import org.openide.util.lookup.AbstractLookup;
+import org.openide.util.lookup.InstanceContent;
+import org.openide.util.lookup.ServiceProvider;
+
+/**
+ * The instances of this class tracks all DataSet instances.
+ *
+ * @since   PHILOViZ 1.0
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ */
+ at ServiceProvider(service = DataSetTracker.class)
+public class DataSetTracker implements Lookup.Provider {
+
+	private InstanceContent ic;
+	private AbstractLookup lookup;
+
+	public DataSetTracker() {
+		ic = new InstanceContent();
+		lookup = new AbstractLookup(ic);
+	}
+
+	/** Returns a lookup associated with the object.
+	 * @return  fully initialized lookup instance provided by this object.
+	 * @override  <code>getLookUp</code> in class <code>AbstractLookUp</code>.
+	 */
+	@Override
+	public Lookup getLookup() {
+		return lookup;
+	}
+
+	/**
+	 *  Registers the object within this lookup.
+	 * @param o the object to register within this lookup.
+	 */
+	public void add(DataSet ds) {
+		ic.add(ds);
+	}
+
+	/**
+	 * Unregisters the object within this lookup.
+	 * @param o the object to be unregistered.
+	 */
+	public void remove(DataSet ds) {
+		ic.remove(ds);
+	}
+}
diff --git a/src/net/phyloviz/core/data/Isolate.java b/src/net/phyloviz/core/data/Isolate.java
new file mode 100644
index 0000000..e04a9d4
--- /dev/null
+++ b/src/net/phyloviz/core/data/Isolate.java
@@ -0,0 +1,164 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.data;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * The <code> Isolate </code> class represents the sampled microorganisms
+ * of bacterial populations.  The name of isolate comes from the process of
+ * isolating each sampled microorganism from the population. Each isolate has
+ * ancillary data, such the epidemiological and demographic
+ * information, important information for its characterization.
+ *
+ * @since   PHILOViZ 1.0
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ */
+public class Isolate implements DataItem {
+
+	/**
+	 * The data structure into which the ancillary data of the isolate is stored.
+	 * The capacity of the ArrayList depends on the initialization of the isolate.
+	 */
+	private ArrayList<String> values;
+
+	/**
+	 * Constructs an isolate with no ancillary data.
+	 */
+	protected Isolate() {
+		values = new ArrayList<String>();
+	}
+
+	/**
+	 * Constructs an isolate with a list that contains the
+	 * ancillary data specified
+	 * in the array, by the same order.
+	 *
+	 * @param val the ancillary data of the isolate.
+	 * @throws NullPointerException if the specified array is null.
+	 */
+	protected Isolate(String[] val) {
+		values = new ArrayList<String>(Arrays.asList(val));
+	}
+
+	/**
+	 * Returns the data at the specified position in the ancillary data list of
+	 * this isolate.
+	 *
+	 * @param  idx index of the data to return.
+	 * @return the data at the specified position in the ancillary data list of
+	 * this isolate.
+	 * @throws IndexOutOfBoundsException  if the argument <code>idx</code> is negative
+	 * or not less than the size of the ancillary data list.
+	 */
+	@Override
+	public String get(int idx) {
+		if (idx < 0 || idx >= length())
+                	return null;
+
+		return values.get(idx);
+	}
+
+	/**
+	 * Replaces the data at the specified position in the ancillary data list of
+	 * this isolate.
+	 *
+	 * @param idx index of the data to replace
+	 * @param value data to be stored at the specified position.
+	 * @throws IndexOutOfBoundsException   if the argument <code>idx</code> is negative
+	 * or not less than the size of the ancillary data list.
+	 */
+	protected void set(int idx, String value) {
+		if (idx >= 0 && idx < values.size()) {
+			values.set(idx, value);
+		}
+	}
+
+	/**
+	 * Appends the specified data to the end of the ancillary data list of
+	 * this isolate.
+	 * @param value data to be appended to the ancillary data list of
+	 * this isolate.
+	 *
+	 */
+	protected void add(String value) {
+		values.add(value);
+	}
+
+	/**
+	 * Returns a string representation of this isolate.  The string
+	 * representation consists of the list of the ancillary data of this isolate
+	 * in the added order, enclosed in square brackets
+	 * (<tt>"[]"</tt>).  Adjacent elements are separated by the characters
+	 * <tt>", "</tt> (comma and space).
+	 *
+	 * @return a string representation of this isolate
+	 */
+	@Override
+	public String toString() {
+		return Arrays.toString(values.toArray());
+	}
+
+	@Override
+	public String getID() {
+		// We do not know anything about it.
+		return null;
+	}
+
+        /**
+	 * Returns the number of features (including the ID) of this isolate.
+	 * If contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+	 * <tt>Integer.MAX_VALUE</tt>.
+	 *
+	 * @return the number of elements (including the ID) for this isolate.
+	 */
+	@Override
+	public int length() {
+		return values.size();
+	}
+	
+        /**
+	 * Returns the frequency of this isolate, which is 1.
+	 *
+	 * @return the frequency the isolate,  which is 1.
+	 *
+	 */
+	@Override
+	public int weight() {
+		return 1;
+	}
+}
diff --git a/src/net/phyloviz/core/data/Population.java b/src/net/phyloviz/core/data/Population.java
new file mode 100644
index 0000000..9ef016f
--- /dev/null
+++ b/src/net/phyloviz/core/data/Population.java
@@ -0,0 +1,451 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.data;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import javax.swing.table.AbstractTableModel;
+import net.phyloviz.core.explorer.PopulationNode;
+import net.phyloviz.core.util.NodeFactory;
+import org.openide.nodes.AbstractNode;
+import org.openide.util.Lookup;
+import org.openide.util.lookup.AbstractLookup;
+import org.openide.util.lookup.InstanceContent;
+
+/**
+ * The <code> Population </code> class represents the set of the
+ * isolates of a bacterial population.
+ * The isolates of a population can be displayed as a two dimensional table, where each
+ * row corresponds to a different isolate and each column to a specific feature of the isolate.
+ * A population instance can be explored in the context of an explorer viewer.
+ *
+ *
+ * @since   PHILOViZ 1.0
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ */
+public class Population implements DataModel, Lookup.Provider, NodeFactory {
+
+	private InstanceContent ic;
+	private AbstractLookup lookup;
+
+	/**
+	 * The set of the ancillary data names.
+	 */
+	private ArrayList<String> headers;
+
+	/**
+	 * The list of sets of ancillary data values.
+	 * Each position of this list contains the corresponding set of ancillary
+	 * data values to a specific ancillary data name.
+	 */
+	private ArrayList<HashSet<String>> domains;
+
+	/**
+	 *  The map that to each ancillary data name maps
+	 *  an internal index.
+	 */
+	private HashMap<String, Integer> h2idx;
+
+	/**
+	 *  The list of the isolates that belong to this population.
+	 */
+	private ArrayList<Isolate> collection;
+
+	/**
+	 * A tabular model of this population.
+	 * */
+	private TableModel model;
+
+	private DataSaver saver;
+	private int key;
+
+	/**
+	 * Constructs an empty population.
+	 */
+	public Population() {
+		ic = new InstanceContent();
+		lookup = new AbstractLookup(ic);
+		headers = new ArrayList<String>();
+		domains = new ArrayList<HashSet<String>>();
+		h2idx = new HashMap<String, Integer>();
+		collection = new ArrayList<Isolate>();
+	}
+
+	/**
+	 * Adds an isolate to this population with <code>values</code> as its
+	 * ancillary data.
+	 *
+	 * @param values the ancillary data values of an isolate.
+	 * @return <code>true</code> if <code>values</code> has the expected
+	 * length for this population.
+	 */
+	public boolean addIsolate(String[] values) {
+
+		// Do we have values for all fields?
+		if (values.length != headers.size()) {
+			return false;
+		}
+
+		Isolate isolate = new Isolate();
+
+		for (int i = 0; i < values.length; i++) {
+			isolate.add(values[i]);
+			domains.get(i).add(values[i]);
+		}
+
+		collection.add(isolate);
+
+		return true;
+	}
+
+	/**
+	 * Returns the number of isolates in this population.
+	 *
+	 * @return the number of isolates of this population
+	 */
+	@Override
+	public int size() {
+		return collection.size();
+	}
+
+	/**
+	 * Sorts the isolates from this population according to the order
+	 * induced by the specified comparator. All isolates in the population
+	 * must be mutually
+	 * comparable using the specified comparator
+	 * (that is, c.compare(e1, e2) must not throw a
+	 * <code>ClassCastException</code> for any elements e1 and e2 in the
+	 * population).
+	 *
+	 * @param c  the comparator to determine the order of the list. A
+	 * null value indicates that the elements' natural ordering should
+	 * be used.
+	 */
+	public void sort(Comparator<Isolate> c) {
+		Collections.sort(collection, c);
+	}
+
+	/**
+	 * Returns an iterator over the elements in this population.
+	 * There are no guarantees concerning the order in which the elements
+	 * are returned
+	 * @return  an <code>Iterator</code>
+	 * over the elements in this population.
+	 */
+	@Override
+	public Iterator<Isolate> iterator() {
+		return new PopulationIterator();
+	}
+
+	/**
+	 * Returns a string representation of this population.
+	 * The string representation express de kind of elements of this
+	 * population, i.e., isolates.
+	 * @overrides <code>toString</code> in class <code>Object</code>
+	 * @return a string representation of this population.
+	 */
+	@Override
+	public String toString() {
+		return "Isolate Data";
+	}
+
+	// LookUp Methods
+
+	/** Returns the lookup associated with the object.
+	 * @return  fully initialized lookup instance provided by this object.
+	 * @override  <code>getLookUp</code> in class <code>AbstractLookUp</code>.
+	 */
+	@Override
+	public Lookup getLookup() {
+		return lookup;
+	}
+
+	/**
+	 * Registers the object o within this lookup.
+	 * @see - org.openide.util.Lookup.Provider.
+	 * @param o  the object to be registered.
+	 */
+	public void add(Object o) {
+		ic.add(o);
+	}
+
+	/**
+	 * Unregisters the object <code>o</code> within this lookup.
+	 * @param  o the object to be registered..
+	 */
+	public void remove(Object o) {
+		ic.remove(o);
+	}
+
+	/**
+	 * Allows to explore this population in the context of an explorer viewer.
+	 * @return - Returns this population as a node in the explorer view.
+	 */
+	@Override
+	public AbstractNode getNode() {
+		return new PopulationNode(this);
+	}
+
+	private class PopulationIterator implements Iterator<Isolate> {
+
+		private Iterator<Isolate> i;
+		private Isolate last;
+		private int idx;
+
+		public PopulationIterator() {
+			i = collection.iterator();
+			last = null;
+			idx = 0;
+		}
+
+		@Override
+		public boolean hasNext() {
+			return i.hasNext();
+		}
+
+		@Override
+		public Isolate next() {
+			last = i.next();
+			idx++;
+			return last;
+		}
+
+		@Override
+		public void remove() {
+			throw new UnsupportedOperationException("Not supported!");
+		}
+
+		public String get(int idx) {
+			if (last == null) {
+				return null;
+			}
+
+			return last.get(idx);
+		}
+
+		public void set(int idx, String value) {
+			if (last != null) {
+				domains.get(idx).add(value);
+				last.set(idx, value);
+			}
+		}
+
+		public String get(String column) {
+			return get(h2idx.get(column));
+		}
+
+		public void set(String column, String value) {
+			set(h2idx.get(column), value);
+		}
+
+		public int index() {
+			return idx;
+		}
+	}
+
+	//Data Model Methods
+
+	/**
+	 * Returns the key column of this population model.
+	 *
+	 * @return the index of the key column for this population model.
+	 */
+	@Override
+	public int getKey() {
+		return key;
+	}
+
+	/**
+	 * Changes the key column of this population model.
+	 * @param key   the new key column for this population model.
+	 */
+	public void setKey(int key) {
+		this.key = key;
+	}
+
+	/**
+	 * Adds a new column to this population model with name
+	 * <code>header</code> and values obtaineds thought <code>cf</code>,
+	 * if there is not already a column with the same name.
+	 *
+	 * @param header the name of the column to add.
+	 * @param cf  the values filler for the column to add.
+	 * @return <code>true</code> if this population model
+	 * did not already contain a column with  the specified name.
+	 */
+	@Override
+	public boolean addColumn(String header, ColumnFiller cf) {
+		if (h2idx.containsKey(header)) {
+			return false;
+		}
+
+		h2idx.put(header, headers.size());
+		headers.add(header);
+		HashSet<String> dom = new HashSet<String>();
+		domains.add(dom);
+
+		Iterator<Isolate> i = collection.iterator();
+		if (cf != null) {
+			while (i.hasNext()) {
+				Isolate iso = i.next();
+				String val = cf.getValue(iso);
+				dom.add(val);
+				iso.add(val);
+			}
+		} else {
+			while (i.hasNext()) {
+				i.next().add(null);
+			}
+		}
+
+		return true;
+	}
+
+	/**
+	 * Returns the label that describes the domain
+	 * of the data values that
+	 * are in the column idx of the table model of this population.
+	 * @param idx the idx column in the table model.
+	 * @return the label that describes the domain of the data values that are
+	 * on the column idx of the table model of this population. It returns null
+	 * if <code>idx</code> is not a valid index.
+	 */
+	@Override
+	public String getDomainLabel(int idx) {
+		if (idx < 0 || idx >= headers.size()) {
+			return null;
+		}
+
+		return headers.get(idx);
+	}
+
+	/**
+	 * Returns a collection with all the isolates of this population.
+	 * @return a <code> Collection</code> with all the isolates of this population.
+	 */
+	@Override
+	public Collection<? extends DataItem> getItems() {
+		return new ArrayList<Isolate>(collection);
+	}
+
+	/**
+	 * Returns the sum of the weights of all the isolates of this population.
+	 * @return the sum of the weights of all the isolates of this population.
+	 */
+	@Override
+	public int weight() {
+		return size();
+	}
+
+	/**
+	 * Returns the set of data values that belong to the isolates and
+	 * are in the column idx of the table model inherent to this population.
+	 * @param idx  the idx column in the table model inherent to this population.
+	 * @return the set of data values that belong to the isolates that are
+	 * on the column idx of the table model inherent to this population.
+	 */
+	@Override
+	public HashSet<String> getDomain(int idx) {
+		if (idx < 0 || idx > domains.size()) {
+			return null;
+		}
+
+		return domains.get(idx);
+	}
+
+	/**
+	 *  Returns a table model for this population.
+	 * @return a table model for this population.
+	 */
+	@Override
+	public AbstractTableModel tableModel() {
+		if (model == null) {
+			model = new TableModel();
+		}
+
+		return model;
+	}
+
+	@Override
+	public DataSaver getSaver() {
+		if (saver == null) {
+			saver = new DataSaver(this);
+		}
+
+		return saver;
+	}
+
+	private class TableModel extends AbstractTableModel {
+
+		@Override
+		public int getRowCount() {
+			return size();
+		}
+
+		@Override
+		public int getColumnCount() {
+			return headers.size();
+		}
+
+		@Override
+		public String getColumnName(int idx) {
+			return getDomainLabel(idx);
+		}
+
+		@Override
+		public int findColumn(String name) {
+			if (h2idx.containsKey(name)) {
+				return h2idx.get(name);
+			}
+
+			return -1;
+		}
+
+		@Override
+		public Object getValueAt(int rowIndex, int columnIndex) {
+			if (rowIndex < 0 || rowIndex >= collection.size()) {
+				return null;
+			}
+
+			return collection.get(rowIndex).get(columnIndex);
+		}
+	}
+}
diff --git a/src/net/phyloviz/core/data/Profile.java b/src/net/phyloviz/core/data/Profile.java
new file mode 100644
index 0000000..7eb1ede
--- /dev/null
+++ b/src/net/phyloviz/core/data/Profile.java
@@ -0,0 +1,116 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.data;
+
+/**
+ * This interface describes the minimal requirements for an isolate
+ * profile created by a microbial typing method.  An isolate represents a sampled
+ * microorganism of a bacterial population. The application of a typing
+ * method to an isolate gives a characterization at the strain level of the isolate,
+ * i.e., an isolate profile.
+ * Thus, each profile consists of the list of features that characterizes an
+ * isolate with respect to a specific typing method.
+ * @since   PHILOViZ 1.0
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ *
+ */
+public interface Profile extends DataItem {
+
+	/**
+	 * Returns an <tt>int</tt>  that represents the internal identifier of this typing
+	 * profile.
+	 *
+	 * @return the internal value of the identifier of this typing profile.
+	 *
+	 */
+	public int getUID();
+
+	/**
+	 * Returns a <tt>String</tt>  that represents the identifier of this typing
+	 * profile.
+	 *
+	 * @return the identifier of this typing profile.
+	 */
+	@Override
+	public String getID();
+
+	/**
+	 * Returns the number of features of this profile.
+	 * If contains more than <tt>Integer.MAX_VALUE</tt> elements, returns
+	 * <tt>Integer.MAX_VALUE</tt>.
+	 *
+	 * @return the number of elements in this profile.
+	 */
+	public int profileLength();
+
+	/**
+	 * Returns  the value of a feature of this
+	 * profile as a string that is at the specified index. An index ranges from
+	 * <code>0</code> to <code>profileLenght() - 1</code>.
+	 * The first description corresponds to the feature that
+	 * is at index <code>0</code>, the next at index <code>1</code>,
+	 * and so on, as for array indexing.
+	 *
+	 *
+	 * @param      idx the index of the description of a feature.
+	 * @return     the <code>String</code>  representation
+	 *             of the feature at the specified index of the list of features .
+	 *             The first <code>String</code> is at index <code>0</code>.
+	 * @exception  IndexOutOfBoundsException  if the <code>idx</code>
+	 *             argument is negative or not less than the <code>profileLenght()</code>
+	 * this profile.
+	 */
+	public String getValue(int idx);
+
+	/**
+	 * Returns the frequency of this typing
+	 * profile among all the isolates.
+	 *
+	 * @return the frequency of this typing profile.
+	 *
+	 */
+	public int getFreq();
+
+	/**
+	 * This method updates the frequency of this typing
+	 * profile.
+	 *
+	 * @param freq the new frequency of this typing profile.
+	 * @void updates the frequency of this typing profile.
+	 *
+	 */
+	public void setFreq(int freq);
+}
diff --git a/src/net/phyloviz/core/data/TypingData.java b/src/net/phyloviz/core/data/TypingData.java
new file mode 100644
index 0000000..2a2cf08
--- /dev/null
+++ b/src/net/phyloviz/core/data/TypingData.java
@@ -0,0 +1,509 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.data;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.TreeSet;
+import javax.swing.table.AbstractTableModel;
+import net.phyloviz.core.explorer.TypingDataNode;
+import net.phyloviz.core.util.NodeFactory;
+import org.openide.nodes.AbstractNode;
+import org.openide.util.Lookup;
+import org.openide.util.lookup.AbstractLookup;
+import org.openide.util.lookup.InstanceContent;
+
+/**
+ * The <code>TypingData</code> class represents the set of the
+ * isolates profiles created by a microbial typing method.
+ * Each typing data has a table view, i.e., in can be displayed as a two
+ * dimensional table. 
+ *
+ * @since   PHILOViZ 1.0
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ *
+ */
+public class TypingData<T extends AbstractProfile> implements DataModel, Lookup.Provider, NodeFactory {
+
+	private InstanceContent ic;
+	private AbstractLookup lookup;
+	private String description;
+
+	/**
+	 * The list of the feature names corresponding to this kind of profiles.
+	 * This names will be the headers of the columns in a table view of this
+	 * typing data.
+	 */
+	private String[] headers;
+
+	/**
+	 * The array of sets of the feature data values.
+	 * Each position of this array contains the corresponding set of the feature
+	 * data values to a specific feature data name.
+	 */
+	private HashSet<String>[] domains;
+
+	/**
+	 *  The map that to each feature data name maps
+	 *  an internal index.
+	 */
+	private HashMap<String, Integer> h2idx;
+
+	/**
+	 *  The list of the profiles that belong to this population.
+	 */
+	private ArrayList<T> collection;
+	private TreeSet<T> unique;
+	private HashSet<String> idset;
+	
+	/**
+	 * A tabular model of this population.
+	 * */
+	private TableModel model;
+	private DataSaver saver;
+	private boolean weightOk;
+	private int weight;
+
+	/**
+	 * Constructs an empty typing data model, with <code>nColumns</code> features.
+	 */
+	@SuppressWarnings("unchecked")
+	public TypingData(int nColumns) {
+
+		ic = new InstanceContent();
+		lookup = new AbstractLookup(ic);
+		
+		headers = new String[nColumns];
+		domains = new HashSet[nColumns];
+		for (int i = 0; i < nColumns; i++) {
+			domains[i] = new HashSet<String>();
+		}
+		h2idx = new HashMap<String, Integer>();
+
+		collection = new ArrayList<T>();
+		unique = new TreeSet<T>();
+		idset = new HashSet<String>();
+
+		weightOk = false;
+	}
+
+	/**
+	 * Constructs an empty typing data model, with  <code>ha.lenght</code>
+	 * features, named by the array <code>ha</code>.
+	 */
+	public TypingData(String[] ha) {
+		this(ha.length);
+		for (int i = 0; i < ha.length; i++)
+			setHeader(i, ha[i]);
+	}
+
+	/**
+	 * Returns the number of profiles in this typing data.
+	 *
+	 * @return the number of profiles of this typing data.
+	 */
+	@Override
+	public int size() {
+		return collection.size();
+	}
+
+	/**
+	 * Sets the column <code> idx</code> of  this typing data model with a new name
+	 * <code>header</code>.
+	 *
+	 * @param header the new name of the column <code>idx</code>.
+	 * @thows ArrayIndexOutOfBoundException if the <code>idx</code> does not
+	 * corresponds to an existent column.
+	 */
+	public final void setHeader(int idx, String header) {
+		if (idx >= 0 && idx < headers.length) {
+			headers[idx] = header;
+			h2idx.put(header, idx);
+		}
+	}
+
+	/**
+	 * Obtains the list of the feature names headers or labels.
+	 * This names are the headers of the columns in a table view of this
+	 * typing data model.
+	 *
+	 */
+	public Collection<String> getHeaders() {
+		return Arrays.asList(headers);
+	}
+
+	/**
+	 * Adds a new profile to this typing data, if there is not
+	 * already an equal one. The new profile should have values for
+	 * all the features considered in this typing data. Otherwise, it will not
+	 * be added.
+	 * @param profile the new profile to be added.
+	 * @return the inserted profile.
+	 * @throws Exception on unsuccess.
+	 */
+	public T addData(T profile) throws Exception {
+
+		// Do we have values for all fields?
+		if (profile.profileLength() != headers.length - 1) {
+			throw new Exception("Incompatible length: "
+				+ profile.getID() + " has length"
+				+ profile.profileLength() + "(!="
+				+ (headers.length - 1) + ")");
+		}
+
+		if (unique.contains(profile)) {
+			throw new Exception("Duplicated profile: "
+				+ profile.getID() + " aka "
+				+ this.getEqual(profile).getID());
+		}
+
+		if (idset.contains(profile.getID())) {
+			throw new Exception("Duplicated profile ID: "
+				+ profile.getID());
+		}
+
+		domains[0].add(profile.getID());
+		for (int i = 0; i < profile.profileLength(); i++) {
+			domains[i + 1].add(profile.getValue(i));
+		}
+
+		collection.add(profile);
+		unique.add(profile);
+		idset.add(profile.getID());
+
+		weightOk = false;
+
+		return profile;
+	}
+
+	/**
+	 * Returns the profile in this typing data equals to the given profile,
+	 * or null if there is no such profile.
+	 * @param profile the profile to match.
+	 * @return the profile equals to the parameter, or null if there is no
+	 * such element.
+	 */
+	public T getEqual(T profile) {
+		T p = unique.ceiling(profile);
+
+		if (p != null && p.equals(profile)) {
+			return p;
+		}
+
+		return null;
+	}
+
+	/**
+	 *  Sorts the profiles of this typing data according
+	 *  to the order induced by the specified comparator.
+	 *  @param c  the comparator to determine the order of the profiles.
+	 *  A <code>null</code> value indicates that the elements' natural
+	 * ordering should be used.
+	 */
+	public void sort(Comparator<T> c) {
+		Collections.sort(collection, c);
+	}
+
+	/**
+	 * Returns an iterator over the profiles in this typing data.
+	 * There are no guarantees concerning the order in which the profiles
+	 * are returned
+	 * @return   an <code>Iterator</code>
+	 * over the profiles in this typing data.
+	 */
+	@Override
+	public Iterator<T> iterator() {
+		return new DataIterator();
+	}
+
+	/**
+	 * Returns a description of this typing data.
+	 * @return  a description of this typing data.
+	 *
+	 */
+	public String getDescription() {
+		return description;
+	}
+
+	/**
+	 *  Changes the description of this typing data.
+	 * @param  desc the new description of this typing data.
+	 */
+	public void setDescription(String desc) {
+		description = desc;
+	}
+
+	/**
+	 * Returns a string representation of this typing data, which consists
+	 * of its own description.
+	 * @return  a string representation of this typing data.
+	 */
+	@Override
+	public String toString() {
+		return description;
+	}
+
+	/**
+	 * Returns the label that describes the domain
+	 * of the data values that belong to the profiles and
+	 * are in the column idx of the table model of this typing data.
+	 * @param idx  the idx column in the table model.
+	 * @return the label that describes the domain of the data values that are
+	 * on the column idx of the table model of this typing data.
+	 */
+	@Override
+	public String getDomainLabel(int idx) {
+		if (idx < 0 || idx >= headers.length) {
+			return null;
+		}
+
+		return headers[idx];
+	}
+
+	@Override
+	/**
+	 * Returns the set of data values that belong to the profiles and
+	 * are in the column idx of the table model inherent to this typing data.
+	 * @param idx  the idx column in the table model inherent to this typing data.
+	 * @return the set of data values that belong to the profiles that are
+	 * on the column idx of the table model inherent to this typing data.
+	 */
+	public HashSet<String> getDomain(int idx) {
+		if (idx < 0 || idx > domains.length) {
+			return null;
+		}
+
+		return domains[idx];
+	}
+
+	/**
+	 * Allows to explore the population in the context of an explorer viewer.
+	 * @return  Returns the population as a node in the explorer view.
+	 * @see AbstractNode
+	 */
+	@Override
+	public AbstractNode getNode() {
+		return new TypingDataNode(this);
+	}
+
+	/**
+	 *  Returns the lookup inherited to this typing data.
+	 * @see Lookup
+	 * @return the lookup inherited to this typing data.
+	 */
+	@Override
+	public Lookup getLookup() {
+		return lookup;
+	}
+
+	/**
+	 * Registers the object <code>o</code> with this lookup.
+	 * @see  org.openide.util.Lookup.Provider.
+	 * @param o  the object to be registered.
+	 */
+	public void add(Object o) {
+		ic.add(o);
+	}
+
+	/**
+	 * Unregisters the object <code>o</code> with this lookup.
+	 * @see  org.openide.util.Lookup.Provider.
+	 * @param o  the object to be registered.
+	 */
+	public void remove(Object o) {
+		ic.remove(o);
+	}
+
+	/**
+	 * Returns the key column of this typing data model.
+	 *
+	 * @return the index of the key column for this typing data model.
+	 */
+	@Override
+	public int getKey() {
+		return 0;
+	}
+
+	/**
+	 * Returns a collection with all the profiles of this data model.
+	 * @return a collection with all the profiles of this data model.
+	 */
+	@Override
+	public Collection<? extends DataItem> getItems() {
+		return new ArrayList<T>(collection);
+	}
+
+	/**
+	 * Returns the sum of the weights of all the profiles of this typing data.
+	 * @return the sum of the weights of all the profiles of this typing data.
+	 */
+	@Override
+	public synchronized int weight() {
+
+		if (!weightOk) {
+			weight = 0;
+			Iterator<T> i = collection.iterator();
+			while (i.hasNext()) {
+				weight += i.next().weight();
+			}
+		}
+
+		return weight;
+	}
+
+	@Override
+	public boolean addColumn(String domainLabel, ColumnFiller cf) {
+		throw new UnsupportedOperationException("Not supported yet.");
+	}
+
+	private class DataIterator implements Iterator<T> {
+
+		private Iterator<T> i;
+		private T last;
+		private int idx;
+
+		public DataIterator() {
+			i = collection.iterator();
+			last = null;
+			idx = 0;
+		}
+
+		@Override
+		public boolean hasNext() {
+			return i.hasNext();
+		}
+
+		@Override
+		public T next() {
+			last = i.next();
+			idx++;
+			return last;
+		}
+
+		@Override
+		public void remove() {
+			throw new UnsupportedOperationException("Not supported!");
+		}
+
+		public String getID() {
+			if (last == null) {
+				return null;
+			}
+
+			return last.getID();
+		}
+
+		public String getValue(int idx) {
+			if (last == null) {
+				return null;
+			}
+
+			return last.getValue(idx);
+		}
+
+		public String getValue(String column) {
+			return getValue(h2idx.get(column) - 1);
+		}
+
+		public int index() {
+			return idx;
+		}
+	}
+
+	/**
+	 *  Returns a table model for this typing data model.
+	 * @return a table model for this typing data model.
+	 */
+	@Override
+	public AbstractTableModel tableModel() {
+		if (model == null) {
+			model = new TableModel();
+		}
+
+		return model;
+	}
+
+	@Override
+	public DataSaver getSaver() {
+		if (saver == null) {
+			saver = new DataSaver(this);
+		}
+
+		return saver;
+	}
+
+	private class TableModel extends AbstractTableModel {
+
+		@Override
+		public int getRowCount() {
+			return size();
+		}
+
+		@Override
+		public int getColumnCount() {
+			return headers.length;
+		}
+
+		@Override
+		public String getColumnName(int idx) {
+			return getDomainLabel(idx);
+		}
+
+		@Override
+		public int findColumn(String name) {
+			if (h2idx.containsKey(name)) {
+				return h2idx.get(name);
+			}
+
+			return -1;
+		}
+
+		@Override
+		public Object getValueAt(int rowIndex, int columnIndex) {
+			if (rowIndex < 0 || rowIndex >= collection.size()) {
+				return null;
+			}
+
+			return collection.get(rowIndex).get(columnIndex);
+		}
+	}
+}
diff --git a/src/net/phyloviz/core/explorer/Bundle.properties b/src/net/phyloviz/core/explorer/Bundle.properties
new file mode 100644
index 0000000..93c732b
--- /dev/null
+++ b/src/net/phyloviz/core/explorer/Bundle.properties
@@ -0,0 +1,3 @@
+CTL_DataSetExplorerAction=Dataset Explorer
+CTL_DataSetExplorerTopComponent=Datasets
+HINT_DataSetExplorerTopComponent=Dataset Explorer
diff --git a/src/net/phyloviz/core/explorer/DataSetExplorerTopComponent.form b/src/net/phyloviz/core/explorer/DataSetExplorerTopComponent.form
new file mode 100644
index 0000000..0a9a519
--- /dev/null
+++ b/src/net/phyloviz/core/explorer/DataSetExplorerTopComponent.form
@@ -0,0 +1,18 @@
+<?xml version="1.1" encoding="UTF-8" ?>
+
+<Form version="1.4" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
+  </AuxValues>
+
+  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+</Form>
diff --git a/src/net/phyloviz/core/explorer/DataSetExplorerTopComponent.java b/src/net/phyloviz/core/explorer/DataSetExplorerTopComponent.java
new file mode 100644
index 0000000..479a655
--- /dev/null
+++ b/src/net/phyloviz/core/explorer/DataSetExplorerTopComponent.java
@@ -0,0 +1,195 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.explorer;
+
+import java.awt.BorderLayout;
+import java.util.logging.Logger;
+import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.InputMap;
+import javax.swing.JComponent;
+import javax.swing.KeyStroke;
+import net.phyloviz.core.data.DataSetTracker;
+import org.openide.util.NbBundle;
+import org.openide.windows.TopComponent;
+import org.openide.windows.WindowManager;
+//import org.openide.util.ImageUtilities;
+import org.netbeans.api.settings.ConvertAsProperties;
+import org.openide.explorer.ExplorerManager;
+import org.openide.explorer.ExplorerUtils;
+import org.openide.explorer.view.BeanTreeView;
+import org.openide.nodes.AbstractNode;
+import org.openide.util.Lookup;
+
+/**
+ * Top component which displays something.
+ */
+ at ConvertAsProperties(dtd = "-//net.phyloviz.core.explorer//DataSetExplorer//EN",
+autostore = false)
+public final class DataSetExplorerTopComponent extends TopComponent implements ExplorerManager.Provider {
+
+	private static DataSetExplorerTopComponent instance;
+	/** path to the icon used by the component and its open action */
+	// static final String ICON_PATH = "SET/PATH/TO/ICON/HERE";
+	private static final String PREFERRED_ID = "DataSetExplorerTopComponent";
+	private final ExplorerManager mgr = new ExplorerManager();
+
+	public DataSetExplorerTopComponent() {
+		initComponents();
+		BeanTreeView tv = new BeanTreeView();
+		tv.setRootVisible(false);
+		add(tv,BorderLayout.CENTER);
+
+		setName(NbBundle.getMessage(DataSetExplorerTopComponent.class, "CTL_DataSetExplorerTopComponent"));
+		setToolTipText(NbBundle.getMessage(DataSetExplorerTopComponent.class, "HINT_DataSetExplorerTopComponent"));
+		// setIcon(ImageUtilities.loadImage(ICON_PATH, true));
+
+		ActionMap map = getActionMap();
+		map.put("delete", ExplorerUtils.actionDelete(mgr, true));
+
+		InputMap keys = getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
+		keys.put(KeyStroke.getKeyStroke("DELETE"), "delete");
+
+		associateLookup(ExplorerUtils.createLookup(mgr, getActionMap()));
+		mgr.setRootContext(new AbstractNode(new ExplorerChildren(Lookup.getDefault().lookup(DataSetTracker.class).getLookup())) {
+			@Override
+			public Action[] getActions(boolean context) {
+				return new Action[0];
+			};
+		});
+	}
+
+	/** This method is called from within the constructor to
+	 * initialize the form.
+	 * WARNING: Do NOT modify this code. The content of this method is
+	 * always regenerated by the Form Editor.
+	 */
+	        // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+        private void initComponents() {
+
+                setLayout(new java.awt.BorderLayout());
+        }// </editor-fold>//GEN-END:initComponents
+
+	        // Variables declaration - do not modify//GEN-BEGIN:variables
+        // End of variables declaration//GEN-END:variables
+	/**
+	 * Gets default instance. Do not use directly: reserved for *.settings files only,
+	 * i.e. deserialization routines; otherwise you could get a non-deserialized instance.
+	 * To obtain the singleton instance, use {@link #findInstance}.
+	 */
+	public static synchronized DataSetExplorerTopComponent getDefault() {
+		if (instance == null) {
+			instance = new DataSetExplorerTopComponent();
+		}
+		return instance;
+	}
+
+	/**
+	 * Obtain the DataSetExplorerTopComponent instance. Never call {@link #getDefault} directly!
+	 */
+	public static synchronized DataSetExplorerTopComponent findInstance() {
+		TopComponent win = WindowManager.getDefault().findTopComponent(PREFERRED_ID);
+		if (win == null) {
+			Logger.getLogger(DataSetExplorerTopComponent.class.getName()).warning(
+				"Cannot find " + PREFERRED_ID + " component. It will not be located properly in the window system.");
+			return getDefault();
+		}
+		if (win instanceof DataSetExplorerTopComponent) {
+			return (DataSetExplorerTopComponent) win;
+		}
+		Logger.getLogger(DataSetExplorerTopComponent.class.getName()).warning(
+			"There seem to be multiple components with the '" + PREFERRED_ID
+			+ "' ID. That is a potential source of errors and unexpected behavior.");
+		return getDefault();
+	}
+
+	@Override
+	public int getPersistenceType() {
+		return TopComponent.PERSISTENCE_ALWAYS;
+	}
+
+	@Override
+	public void componentOpened() {
+		// TODO add custom code on component opening
+	}
+
+	@Override
+	public void componentClosed() {
+		// TODO add custom code on component closing
+	}
+
+	void writeProperties(java.util.Properties p) {
+		// better to version settings since initial version as advocated at
+		// http://wiki.apidesign.org/wiki/PropertyFiles
+		p.setProperty("version", "1.0");
+		// TODO store your settings
+	}
+
+	Object readProperties(java.util.Properties p) {
+		if (instance == null) {
+			instance = this;
+		}
+		instance.readPropertiesImpl(p);
+		return instance;
+	}
+
+	private void readPropertiesImpl(java.util.Properties p) {
+		String version = p.getProperty("version");
+		// TODO read your settings according to their version
+	}
+
+	@Override
+	protected String preferredID() {
+		return PREFERRED_ID;
+	}
+
+	@Override
+	public ExplorerManager getExplorerManager() {
+		return mgr;
+	}
+
+	@Override
+	public void addNotify() {
+		super.addNotify();
+		ExplorerUtils.activateActions(mgr, true);
+	}
+
+	@Override
+	public void removeNotify() {
+		super.addNotify();
+		ExplorerUtils.activateActions(mgr, false);
+	}
+}
diff --git a/src/net/phyloviz/core/explorer/DataSetNode.java b/src/net/phyloviz/core/explorer/DataSetNode.java
new file mode 100644
index 0000000..58cf106
--- /dev/null
+++ b/src/net/phyloviz/core/explorer/DataSetNode.java
@@ -0,0 +1,105 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.explorer;
+
+import java.awt.Image;
+import java.io.IOException;
+import java.util.Enumeration;
+import javax.swing.Action;
+import net.phyloviz.core.data.DataSet;
+import net.phyloviz.core.data.DataSetTracker;
+import org.openide.actions.DeleteAction;
+import org.openide.nodes.AbstractNode;
+import org.openide.nodes.Node;
+import org.openide.util.ImageUtilities;
+import org.openide.util.Lookup;
+import org.openide.util.actions.SystemAction;
+import org.openide.util.lookup.Lookups;
+
+public class DataSetNode extends AbstractNode {
+
+	public DataSetNode(DataSet ds) {
+		super(new ExplorerChildren(ds.getLookup()), Lookups.singleton(ds));
+		setDisplayName(ds.toString());
+	}
+
+	@Override
+	public Image getIcon(int type) {
+		return ImageUtilities.loadImage("net/phyloviz/core/DataSetIcon.png");
+	}
+
+	@Override
+	public Image getOpenedIcon(int type) {
+		return getIcon(type);
+	}
+
+	@Override
+	public boolean canDestroy() {
+		return true;
+	}
+
+	@Override
+	public void destroy() throws IOException {
+		Lookup.getDefault().lookup(DataSetTracker.class).remove(this.getLookup().lookup(DataSet.class));
+
+		Enumeration<Node> e = this.getChildren().nodes();
+		while (e.hasMoreElements())
+			e.nextElement().destroy();
+
+		super.destroy();
+	}
+
+	@Override
+	public Action[] getActions(boolean context) {
+
+		return new SystemAction[] {
+			SystemAction.get(DeleteAction.class),
+			//SystemAction.get(PropertiesAction.class)
+		};
+
+/*		Action[] actions = null;
+		try {
+			actions = new Action[]{(Action) DataObject.find(
+					FileUtil.getConfigFile("Actions/Edit/org-openide-actions-DeleteAction.instance")).getLookup().lookup(InstanceCookie.class).instanceCreate()};
+		} catch (IOException ex) {
+			Exceptions.printStackTrace(ex);
+		} catch (ClassNotFoundException ex) {
+			Exceptions.printStackTrace(ex);
+		}
+		return actions;
+*/
+	}
+}
diff --git a/src/net/phyloviz/core/explorer/ExplorerChildren.java b/src/net/phyloviz/core/explorer/ExplorerChildren.java
new file mode 100644
index 0000000..035ede3
--- /dev/null
+++ b/src/net/phyloviz/core/explorer/ExplorerChildren.java
@@ -0,0 +1,74 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.explorer;
+
+import net.phyloviz.core.util.NodeFactory;
+import org.openide.nodes.Children;
+import org.openide.nodes.Node;
+import org.openide.util.Lookup;
+import org.openide.util.LookupEvent;
+import org.openide.util.LookupListener;
+
+public class ExplorerChildren extends Children.Keys<NodeFactory> {
+
+	private Lookup.Result<NodeFactory> result;
+
+	public ExplorerChildren(Lookup lookup) {
+		super();
+		result = lookup.lookupResult(NodeFactory.class);
+		result.addLookupListener(new LookupListener() {
+
+			@Override
+			public void resultChanged(LookupEvent le) {
+				refreshKeys();
+			}
+		});
+	}
+
+	@Override
+	public void addNotify() {
+		refreshKeys();
+	}
+
+	@Override
+	protected Node[] createNodes(NodeFactory t) {
+		return new Node[] { t.getNode() };
+	}
+
+	private void refreshKeys() {
+		setKeys(result.allInstances());
+	}
+}
diff --git a/src/net/phyloviz/core/explorer/PopulationNode.java b/src/net/phyloviz/core/explorer/PopulationNode.java
new file mode 100644
index 0000000..b13cc56
--- /dev/null
+++ b/src/net/phyloviz/core/explorer/PopulationNode.java
@@ -0,0 +1,92 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.explorer;
+
+import java.awt.Image;
+import java.util.Collection;
+import javax.swing.Action;
+import net.phyloviz.core.data.Population;
+import org.openide.nodes.AbstractNode;
+import org.openide.nodes.Children;
+import org.openide.util.ImageUtilities;
+import org.openide.util.Utilities;
+import org.openide.util.lookup.AbstractLookup;
+import org.openide.util.lookup.InstanceContent;
+
+public class PopulationNode extends AbstractNode {
+
+	public PopulationNode(Population pop) {
+		this(pop, new InstanceContent());
+	        setDisplayName(pop.toString());
+	}
+
+	private PopulationNode(Population pop, InstanceContent ic) {
+		super(Children.LEAF, new AbstractLookup(ic));
+		ic.add(pop);
+		ic.add(pop.getSaver());
+	}
+
+	@Override
+	public Image getIcon (int type) {
+		return ImageUtilities.loadImage("net/phyloviz/core/PopulationIcon.png");
+	}
+	
+	@Override
+	public Image getOpenedIcon (int type) {
+		return getIcon(type);
+	}
+
+	@Override
+	public boolean canDestroy() {
+		return false;
+	}
+
+	@Override
+	public Action getPreferredAction() {
+		return getActions(true)[0];
+	}
+
+	@Override
+	public Action[] getActions(boolean context) {
+	
+		Collection<? extends Action> a4p = Utilities.actionsForPath("/Actions/PHYLOViZ/DataModel");
+
+		Action[] actions = a4p.toArray(new Action[a4p.size()]);
+		//actions[a4p.size()] = SystemAction.get(PropertiesAction.class);
+
+		return actions;
+	}
+}
diff --git a/src/net/phyloviz/core/explorer/TypingDataNode.java b/src/net/phyloviz/core/explorer/TypingDataNode.java
new file mode 100644
index 0000000..c6d90af
--- /dev/null
+++ b/src/net/phyloviz/core/explorer/TypingDataNode.java
@@ -0,0 +1,95 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.explorer;
+
+import java.awt.Image;
+import java.util.ArrayList;
+import java.util.Collection;
+import javax.swing.Action;
+import net.phyloviz.core.data.TypingData;
+import org.openide.nodes.AbstractNode;
+import org.openide.util.ImageUtilities;
+import org.openide.util.Utilities;
+import org.openide.util.lookup.AbstractLookup;
+import org.openide.util.lookup.InstanceContent;
+
+public class TypingDataNode extends AbstractNode {
+
+	public TypingDataNode(TypingData td) {
+		this(td, new InstanceContent());
+	        setDisplayName(td.toString());
+	}
+
+	private TypingDataNode(TypingData td, InstanceContent ic) {
+		super(new ExplorerChildren(td.getLookup()), new AbstractLookup(ic));
+		ic.add(td);
+		ic.add(td.getSaver());
+	}
+
+
+	@Override
+	public Image getIcon (int type) {
+		return ImageUtilities.loadImage("net/phyloviz/core/TypingIcon.png");
+	}
+	
+	@Override
+	public Image getOpenedIcon (int type) {
+		return getIcon(type);
+	}
+
+	@Override
+	public boolean canDestroy() {
+		return false;
+	}
+
+	@Override
+	public Action getPreferredAction() {
+		return getActions(true)[0];
+	}
+
+	@Override
+	public Action[] getActions(boolean context) {
+
+		Collection<Action> a4p = new ArrayList<Action>();
+		a4p.addAll(Utilities.actionsForPath("/Actions/PHYLOViZ/DataModel"));
+		a4p.addAll(Utilities.actionsForPath("/Actions/PHYLOViZ/Algorithm"));
+
+		Action[] actions = a4p.toArray(new Action[a4p.size()]);
+		//actions[a4p.size()] = SystemAction.get(PropertiesAction.class);
+
+		return actions;
+	}
+}
diff --git a/src/net/phyloviz/core/layer.xml b/src/net/phyloviz/core/layer.xml
new file mode 100644
index 0000000..6348e11
--- /dev/null
+++ b/src/net/phyloviz/core/layer.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
+<filesystem>
+    <folder name="Actions">
+        <folder name="File">
+            <file name="net-phyloviz-core-wizard-LoadDataSetWizardAction.instance">
+                <attr name="delegate" newvalue="net.phyloviz.core.wizard.LoadDataSetWizardAction"/>
+                <attr name="iconBase" stringvalue="net/phyloviz/core/DataSetIcon.png"/>
+                <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/>
+                <attr name="noIconInMenu" stringvalue="false"/>
+		<attr name="displayName" bundlevalue="net.phyloviz.core.Bundle#CTL_LoadDataSetAction"/>
+            </file>
+        </folder>
+        <folder name="Window">
+            <file name="net-phyloviz-core-explorer-DataSetExplorerAction.instance">
+                <attr name="component" methodvalue="net.phyloviz.core.explorer.DataSetExplorerTopComponent.findInstance"/>
+                <attr name="displayName" bundlevalue="net.phyloviz.core.explorer.Bundle#CTL_DataSetExplorerAction"/>
+                <attr name="instanceCreate" methodvalue="org.openide.windows.TopComponent.openAction"/>
+            </file>
+        </folder>
+	<folder name="PHYLOViZ">
+	    <folder name="DataModel">
+	        <file name="org-openide-actions-SaveAction.instance">
+                    <attr name="instanceCreate" methodvalue="org.openide.awt.Actions.context"/>
+                    <attr name="delegate" newvalue="org.openide.actions.SaveAction"/>
+                    <attr name="selectionType" stringvalue="EXACTLY_ONE"/>
+                    <attr name="displayName" bundlevalue="org/openide/actions/Bundle#Save"/>
+                    <attr name="noIconInMenu" boolvalue="true"/>
+                    <attr name="type" stringvalue="org.openide.cookies.SaveCookie"/>
+		    <attr name="position" intvalue="10"/>
+                </file>
+	    </folder>
+	</folder>
+    </folder>
+    <folder name="Menu">
+        <folder name="File">
+            <file name="Separator3.instance_hidden"/>
+            <file name="net-phyloviz-core-wizard-LoadDataSetWizardAction.shadow">
+                <attr name="originalFile" stringvalue="Actions/File/net-phyloviz-core-wizard-LoadDataSetWizardAction.instance"/>
+                <attr name="position" intvalue="0"/>
+            </file>
+            <file name="org-netbeans-modules-print-action-PageSetupAction.shadow_hidden"/>
+            <file name="org-netbeans-modules-print-action-PrintAction.shadow_hidden"/>
+            <file name="org-openide-actions-PageSetupAction.shadow_hidden"/>
+            <file name="org-openide-actions-PrintAction.shadow_hidden"/>
+            <file name="org-openide-actions-SaveAllAction.shadow_hidden"/>
+            <file name="org-openide-actions-SaveAsAction.shadow_hidden"/>
+            <file name="org-netbeans-modules-openfile-OpenFileAction.shadow_hidden"/>
+            <file name="org-netbeans-modules-openfile-RecentFileAction.shadow_hidden"/>
+        </folder>
+        <file name="Edit_hidden"/>
+        <file name="GoTo_hidden"/>
+        <folder name="Help">
+            <file name="netbeans-kb.url_hidden"/>
+            <file name="org-netbeans-modules-usersguide-master.xml_hidden"/>
+            <file name="shortcuts.xml_hidden"/>
+        </folder>
+        <folder name="View">
+            <file name="org-netbeans-core-actions-HTMLViewAction.shadow_hidden"/>
+        </folder>
+        <folder name="Window">
+            <file name="DataSetExplorerAction.shadow">
+                <attr name="originalFile" stringvalue="Actions/Window/net-phyloviz-core-explorer-DataSetExplorerAction.instance"/>
+                <attr name="position" intvalue="0"/>
+            </file>
+            <file name="SwitchToRecentDocumentAction.shadow_hidden"/>
+            <file name="org-netbeans-core-windows-actions-GlobalPropertiesAction.shadow_hidden"/>
+        </folder>
+    </folder>
+    <folder name="Services">
+        <folder name="AutoupdateType">
+            <file name="net_phyloviz_core_update_center.instance">
+                <attr name="displayName" bundlevalue="net.phyloviz.core.Bundle#Services/AutoupdateType/net_phyloviz_core_update_center.instance"/>
+                <attr name="enabled" boolvalue="true"/>
+                <attr name="instanceCreate" methodvalue="org.netbeans.modules.autoupdate.updateprovider.AutoupdateCatalogFactory.createUpdateProvider"/>
+                <attr name="instanceOf" stringvalue="org.netbeans.spi.autoupdate.UpdateProvider"/>
+                <attr name="url" bundlevalue="net.phyloviz.core.Bundle#net_phyloviz_core_update_center"/>
+            </file>
+        </folder>
+    </folder>
+    <file name="Toolbars_hidden"/>
+    <folder name="Windows2">
+        <folder name="Components">
+            <file name="DataSetExplorerTopComponent.settings" url="DataSetExplorerTopComponentSettings.xml"/>
+        </folder>
+        <folder name="Modes">
+            <folder name="explorer">
+                <file name="DataSetExplorerTopComponent.wstcref" url="DataSetExplorerTopComponentWstcref.xml"/>
+            </folder>
+        </folder>
+    </folder>
+</filesystem>
diff --git a/src/net/phyloviz/core/util/NodeFactory.java b/src/net/phyloviz/core/util/NodeFactory.java
new file mode 100644
index 0000000..0564ca4
--- /dev/null
+++ b/src/net/phyloviz/core/util/NodeFactory.java
@@ -0,0 +1,54 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+package net.phyloviz.core.util;
+
+import org.openide.nodes.AbstractNode;
+
+/**
+ *  This interface is defined for implementing the concept of a factory for nodes in an explorer viewer
+ * (factory pattern). The classes that implement this interface will be able to create
+ * a node (instance) for an explorer viewer.
+ *
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ */
+public interface NodeFactory {
+
+	/**
+	 * Allows to explore this instance in the context of an explorer viewer.
+	 * @return  Returns this instance as a node in the explorer view.
+	 * @see AbstractNode
+	 */
+	public AbstractNode getNode();
+}
diff --git a/src/net/phyloviz/core/util/PopulationFactory.java b/src/net/phyloviz/core/util/PopulationFactory.java
new file mode 100644
index 0000000..58fbf2c
--- /dev/null
+++ b/src/net/phyloviz/core/util/PopulationFactory.java
@@ -0,0 +1,85 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.util;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.Reader;
+import net.phyloviz.core.data.Population;
+
+/**
+ *  This class represents the concept of a factory for populations of isolates
+ *  (factory pattern). An instance of this class can produce new populations of
+ *  isolates, obtained from reading files with the description of the population
+ *  of isolates.
+ *
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ */
+public class PopulationFactory {
+
+	/**
+	 *  Returns a new population of isolates, obtained from reading files
+	 * with the description of the population  of isolates.
+	 * @param r the reader of descriptions of isolates.
+	 * @return a new population, obtained from <code>r</code>.
+	 * @throws IOException if an I/O error occurs.
+	 */
+	public Population loadPopulation(Reader r) throws IOException {
+
+		Population pop = new Population();
+		BufferedReader in = new BufferedReader(r);
+
+		String[] tokens = in.readLine().split("\t", -1);
+
+		// Store headers.
+		for (int i = 0; i < tokens.length; i++) {
+			pop.addColumn(tokens[i], null);
+		}
+
+		while (in.ready()) {
+			String s = in.readLine();
+			if (s == null)
+				break;
+
+			tokens = s.split("\t", -1);
+
+			pop.addIsolate(tokens);
+		}
+		in.close();
+
+		return pop;
+	}
+}
diff --git a/src/net/phyloviz/core/util/TypingFactory.java b/src/net/phyloviz/core/util/TypingFactory.java
new file mode 100644
index 0000000..b6eb12d
--- /dev/null
+++ b/src/net/phyloviz/core/util/TypingFactory.java
@@ -0,0 +1,92 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.util;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.net.URL;
+import net.phyloviz.core.data.AbstractProfile;
+import net.phyloviz.core.data.Population;
+import net.phyloviz.core.data.TypingData;
+
+/**
+ *  This interface is defined for implementing the concept of a factory for
+ *  typing data of profiles (factory pattern). The classes that implement this interface
+ *  will be able to create typing data for a list of profiles.
+ *
+ * @author PHYLOViZ Team <phyloviz at gmail.com>
+ */
+public interface TypingFactory {
+
+	/**
+	 * Returns a new typing data, obtained from reading files
+	 * with the description of the profiles.
+	 * @param r The reader of descriptions of the profiles.
+	 * @return a new typing data, obtained from <code>r</code>.
+	 * @throws IOException if an I/O error occurs.
+	 */
+	public TypingData<? extends AbstractProfile> loadData(Reader r) throws IOException;
+
+	/**
+	 * This method updates a typing data instance with the data given by a population.
+	 * Each isolate from the considered population may be related to a
+	 * profile of the considered typing data, if they match a specific identifier.
+	 * Thus, the typing data is updated according to the isolates of the population.
+	 * @param td the typing data to be updated.
+	 * @param pop the population to be considered for update.
+	 * @param key an index of a column in the table view of the population,
+	 * where are the matching identifier.
+	 * @return an updated version of the typing data.
+	 * @throws IndexOutOfBoundsException if the index <code>key</code> is
+	 * not valid in the table view of the population.
+	 */
+	public TypingData<? extends AbstractProfile> integrateData(TypingData<? extends AbstractProfile> td, Population pop, int key);
+
+	/**
+	 * This method provides a description (in HTML) for this kind of typing data.
+	 * 
+	 * @return description (in HTML) for this kind of typing data.
+	 */
+	public URL getDescription();
+
+	/**
+	 * This method provides a file format description (in HTML) for this kind of typing data.
+	 * 
+	 * @return file format description (in HTML) for this kind of typing data.
+	 */
+	public URL getFormatDescription();
+
+}
diff --git a/src/net/phyloviz/core/wizard/Bundle.properties b/src/net/phyloviz/core/wizard/Bundle.properties
new file mode 100644
index 0000000..5a0d519
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/Bundle.properties
@@ -0,0 +1,13 @@
+LoadDataSetVisualPanel1.jTextField1.text=
+LoadDataSetVisualPanel1.jLabel1.text=Dataset Name:
+LoadDataSetVisualPanel1.jLabel2.text=Dataset Type:
+LoadDataSetVisualPanel2.jLabel1.text=File:
+LoadDataSetVisualPanel2.jTextField1.text=
+LoadDataSetVisualPanel2.jButton1.text=Browse...
+LoadDataSetVisualPanel3.jLabel1.text=File:
+LoadDataSetVisualPanel3.jButton1.text=Browse...
+LoadDataSetVisualPanel3.jTextField1.text=
+LoadDataSetVisualPanel3.jLabel2.text=Key:
+LoadDataSetVisualPanel3.jButton2.text=Update
+LoadDataSetVisualPanel1.jEditorPane1.contentType=text/html
+LoadDataSetVisualPanel2.jEditorPane1.contentType=text/html
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel1.form b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel1.form
new file mode 100644
index 0000000..4d02e0f
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel1.form
@@ -0,0 +1,144 @@
+<?xml version="1.1" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,56,0,0,2,0"/>
+  </AuxValues>
+
+  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+  <SubComponents>
+    <Container class="javax.swing.JPanel" name="jPanel2">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="First"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+      <SubComponents>
+        <Container class="javax.swing.JPanel" name="jPanel3">
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+              <BorderConstraints direction="West"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+            <Property name="columns" type="int" value="0"/>
+            <Property name="rows" type="int" value="2"/>
+            <Property name="verticalGap" type="int" value="8"/>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JLabel" name="jLabel1">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel1.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+                </Property>
+                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+                  <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                    <EmptyBorder bottom="2" left="12" right="8" top="2"/>
+                  </Border>
+                </Property>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="jLabel2">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel1.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+                </Property>
+                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+                  <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                    <EmptyBorder bottom="2" left="12" right="8" top="2"/>
+                  </Border>
+                </Property>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel4">
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+              <BorderConstraints direction="Center"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+            <Property name="columns" type="int" value="0"/>
+            <Property name="rows" type="int" value="2"/>
+            <Property name="verticalGap" type="int" value="8"/>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JTextField" name="jTextField1">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel1.jTextField1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+                </Property>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JComboBox" name="jComboBox1">
+              <Properties>
+                <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
+                  <Connection code="typeListModel" type="code"/>
+                </Property>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel5">
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+              <BorderConstraints direction="East"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
+        </Container>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="null"/>
+        </Property>
+        <Property name="horizontalScrollBarPolicy" type="int" value="31"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="Center"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JEditorPane" name="jEditorPane1">
+          <Properties>
+            <Property name="background" type="java.awt.Color" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
+              <Connection component="jPanel5" name="background" type="property"/>
+            </Property>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                <EmptyBorder bottom="8" left="12" right="12" top="8"/>
+              </Border>
+            </Property>
+            <Property name="contentType" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel1.jEditorPane1.contentType" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+            </Property>
+            <Property name="editable" type="boolean" value="false"/>
+            <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[200, 200]"/>
+            </Property>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel1.html b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel1.html
new file mode 100644
index 0000000..04a511e
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel1.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<title></title>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	</head>
+	<body>
+         To the developer: This Dataset type still lacks a description. Please create one 
+         and add it in the appropriate place.
+	</body>
+</html>
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel1.java b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel1.java
new file mode 100644
index 0000000..4066447
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel1.java
@@ -0,0 +1,208 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.wizard;
+
+import java.awt.Font;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedList;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JPanel;
+import javax.swing.UIManager;
+import javax.swing.text.html.HTMLDocument;
+import net.phyloviz.core.util.TypingFactory;
+import org.openide.util.Lookup;
+
+public final class LoadDataSetVisualPanel1 extends JPanel {
+
+	private DefaultComboBoxModel typeListModel;
+
+	/** Creates new form LoadDataSetVisualPanel1 */
+	public LoadDataSetVisualPanel1() {
+
+		typeListModel = new DefaultComboBoxModel();
+		LinkedList<TypingFactory> result = new LinkedList<TypingFactory>(Lookup.getDefault().lookupAll(TypingFactory.class));
+		Collections.sort(result, new Comparator<TypingFactory>() {
+
+			@Override
+			public int compare(TypingFactory o1, TypingFactory o2) {
+				String op1 = org.openide.util.NbBundle.getMessage(o1.getClass(), "TypingFactory.priority") ;
+				String op2 = org.openide.util.NbBundle.getMessage(o2.getClass(), "TypingFactory.priority") ;
+				int r = 0;
+				if (op1 != null && op2 != null)
+					r = op1.compareTo(op2);
+				
+				return (r == 0) ? o1.toString().compareTo(o2.toString()) : r;
+			}
+			
+		});
+		Iterator<? extends TypingFactory> ir = result.iterator();
+		while (ir.hasNext()) {
+			typeListModel.addElement(ir.next());
+		}
+
+		initComponents();
+		
+		URL url = result.getFirst().getDescription();
+		if (url == null)
+			url = LoadDataSetVisualPanel1.class.getResource("LoadDataSetVisualPanel1.html");
+
+		try {
+			jEditorPane1.setPage(url);
+		} catch (IOException e) {
+			// Do nothing...
+			System.err.println(e.getMessage());
+		}
+
+		Font font = UIManager.getFont("Label.font");
+		String bodyRule = "body { font-family: " + font.getFamily() + "; "
+			+ "font-size: " + font.getSize() + "pt; width: " + jPanel2.getParent().getSize().width + "px;}";
+		((HTMLDocument) jEditorPane1.getDocument()).getStyleSheet().addRule(bodyRule);
+
+		jComboBox1.addActionListener(new ActionListener() {
+
+			@Override
+			public void actionPerformed(ActionEvent event) {
+				TypingFactory tf = (TypingFactory) jComboBox1.getSelectedItem();
+				URL url = tf.getDescription();
+				if (url == null)
+					url = LoadDataSetVisualPanel1.class.getResource("LoadDataSetVisualPanel1.html");
+
+				try {
+					jEditorPane1.setPage(url);
+				} catch (IOException e) {
+					// Do nothing...
+					System.err.println(e.getMessage());
+				}
+				Font font = UIManager.getFont("Label.font");
+				String bodyRule = "body { font-family: " + font.getFamily() + "; "
+					+ "font-size: " + font.getSize() + "pt; width: " + jPanel2.getParent().getSize().width + "px;}";
+				((HTMLDocument) jEditorPane1.getDocument()).getStyleSheet().addRule(bodyRule);
+			}
+		});
+	}
+
+	@Override
+	public String getName() {
+		return "Dataset";
+	}
+
+	public String getDatasetName() {
+		return jTextField1.getText();
+	}
+
+	public TypingFactory getTypingFactory() {
+		return (TypingFactory) jComboBox1.getSelectedItem();
+	}
+
+	/** This method is called from within the constructor to
+	 * initialize the form.
+	 * WARNING: Do NOT modify this code. The content of this method is
+	 * always regenerated by the Form Editor.
+	 */
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jPanel2 = new javax.swing.JPanel();
+        jPanel3 = new javax.swing.JPanel();
+        jLabel1 = new javax.swing.JLabel();
+        jLabel2 = new javax.swing.JLabel();
+        jPanel4 = new javax.swing.JPanel();
+        jTextField1 = new javax.swing.JTextField();
+        jComboBox1 = new javax.swing.JComboBox();
+        jPanel5 = new javax.swing.JPanel();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jEditorPane1 = new javax.swing.JEditorPane();
+
+        setLayout(new java.awt.BorderLayout());
+
+        jPanel2.setLayout(new java.awt.BorderLayout());
+
+        jPanel3.setLayout(new java.awt.GridLayout(2, 0, 0, 8));
+
+        org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel1.class, "LoadDataSetVisualPanel1.jLabel1.text")); // NOI18N
+        jLabel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 12, 2, 8));
+        jPanel3.add(jLabel1);
+
+        org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel1.class, "LoadDataSetVisualPanel1.jLabel2.text")); // NOI18N
+        jLabel2.setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 12, 2, 8));
+        jPanel3.add(jLabel2);
+
+        jPanel2.add(jPanel3, java.awt.BorderLayout.WEST);
+
+        jPanel4.setLayout(new java.awt.GridLayout(2, 0, 0, 8));
+
+        jTextField1.setText(org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel1.class, "LoadDataSetVisualPanel1.jTextField1.text")); // NOI18N
+        jPanel4.add(jTextField1);
+
+        jComboBox1.setModel(typeListModel);
+        jPanel4.add(jComboBox1);
+
+        jPanel2.add(jPanel4, java.awt.BorderLayout.CENTER);
+        jPanel2.add(jPanel5, java.awt.BorderLayout.EAST);
+
+        add(jPanel2, java.awt.BorderLayout.PAGE_START);
+
+        jScrollPane1.setBorder(null);
+        jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+
+        jEditorPane1.setBackground(jPanel5.getBackground());
+        jEditorPane1.setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 12, 8, 12));
+        jEditorPane1.setContentType(org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel1.class, "LoadDataSetVisualPanel1.jEditorPane1.contentType")); // NOI18N
+        jEditorPane1.setEditable(false);
+        jEditorPane1.setMaximumSize(new java.awt.Dimension(200, 200));
+        jScrollPane1.setViewportView(jEditorPane1);
+
+        add(jScrollPane1, java.awt.BorderLayout.CENTER);
+    }// </editor-fold>//GEN-END:initComponents
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JComboBox jComboBox1;
+    private javax.swing.JEditorPane jEditorPane1;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JPanel jPanel2;
+    private javax.swing.JPanel jPanel3;
+    private javax.swing.JPanel jPanel4;
+    private javax.swing.JPanel jPanel5;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JTextField jTextField1;
+    // End of variables declaration//GEN-END:variables
+}
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel2.form b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel2.form
new file mode 100644
index 0000000..e7bfe6e
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel2.form
@@ -0,0 +1,148 @@
+<?xml version="1.1" encoding="UTF-8" ?>
+
+<Form version="1.4" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,94,0,0,2,18"/>
+  </AuxValues>
+
+  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+  <SubComponents>
+    <Container class="javax.swing.JPanel" name="jPanel2">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="First"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+      <SubComponents>
+        <Container class="javax.swing.JPanel" name="jPanel3">
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+              <BorderConstraints direction="West"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+            <Property name="columns" type="int" value="0"/>
+            <Property name="rows" type="int" value="1"/>
+            <Property name="verticalGap" type="int" value="8"/>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JLabel" name="jLabel1">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel2.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+                </Property>
+                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+                  <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                    <EmptyBorder bottom="2" left="12" right="8" top="2"/>
+                  </Border>
+                </Property>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel4">
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+              <BorderConstraints direction="Center"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+            <Property name="columns" type="int" value="0"/>
+            <Property name="rows" type="int" value="1"/>
+            <Property name="verticalGap" type="int" value="8"/>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JTextField" name="jTextField1">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel2.jTextField1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+                </Property>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel5">
+          <Properties>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                <EmptyBorder bottom="0" left="8" right="0" top="0"/>
+              </Border>
+            </Property>
+          </Properties>
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+              <BorderConstraints direction="East"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+            <Property name="columns" type="int" value="0"/>
+            <Property name="rows" type="int" value="1"/>
+            <Property name="verticalGap" type="int" value="8"/>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JButton" name="jButton1">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel2.jButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
+              </Events>
+            </Component>
+          </SubComponents>
+        </Container>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="null"/>
+        </Property>
+        <Property name="horizontalScrollBarPolicy" type="int" value="31"/>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="Center"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JEditorPane" name="jEditorPane1">
+          <Properties>
+            <Property name="background" type="java.awt.Color" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
+              <Connection component="jPanel2" name="background" type="property"/>
+            </Property>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                <EmptyBorder bottom="8" left="12" right="12" top="8"/>
+              </Border>
+            </Property>
+            <Property name="contentType" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+              <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel2.jEditorPane1.contentType" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+            </Property>
+            <Property name="editable" type="boolean" value="false"/>
+            <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[200, 200]"/>
+            </Property>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel2.html b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel2.html
new file mode 100644
index 0000000..9499596
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel2.html
@@ -0,0 +1,21 @@
+   Load a tab separated file with the first row containing column
+    headers  (field names). The first column should be a Sequence Identifier,
+     such as the ST for MLST data. Other columns should be the different
+    loci used in the typing scheme.
+    Example of a MLST dataset for <i>Streptococcus dysgalactiae subspecies
+    equisimilis</i>.
+<br />
+<pre>
+ ST      gki     gtr     murI    mutS    recP    xpt     yqiZ
+ 1       10      6       6       6       12      13      8
+ 2       5       4       4       1       2       15      2
+ 3       5       3       4       1       6       2       1
+ 4       2       2       4       1       8       7       2
+ 5       2       2       4       1       12      12      7
+ 6       1       3       1       1       1       1       4
+ 7       1       1       1       1       1       1       3
+ 8       1       1       1       1       1       1       4
+</pre>
+<br />
+    This files should not contain missing data. If any allele missing data
+    is found the entire line is discarded.
\ No newline at end of file
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel2.java b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel2.java
new file mode 100644
index 0000000..44e17bd
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel2.java
@@ -0,0 +1,175 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package net.phyloviz.core.wizard;
+
+import java.awt.Font;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import javax.swing.JFileChooser;
+import javax.swing.JPanel;
+import javax.swing.UIManager;
+import javax.swing.text.html.HTMLDocument;
+import org.openide.util.NbPreferences;
+
+public final class LoadDataSetVisualPanel2 extends JPanel {
+
+	/** Creates new form LoadDataSetVisualPanel2 */
+	public LoadDataSetVisualPanel2() {
+		initComponents();
+	}
+
+	protected void setDescription(URL url) {
+		if (url == null)
+			url = LoadDataSetVisualPanel2.class.getResource("LoadDataSetVisualPanel1.html");
+
+		try {
+			jEditorPane1.setPage(url);
+		} catch (IOException e) {
+			// Do nothing...
+			System.err.println(e.getMessage());
+		}
+		Font font = UIManager.getFont("Label.font");
+		String bodyRule = "body { font-family: " + font.getFamily() + "; "
+			+ "font-size: " + font.getSize() + "pt; width: " + jPanel2.getSize().width + "px;}";
+		((HTMLDocument) jEditorPane1.getDocument()).getStyleSheet().addRule(bodyRule);
+	}
+	
+	@Override
+	public String getName() {
+		return "Typing Data";
+	}
+
+	public String getFilename() {
+		return jTextField1.getText();
+	}
+
+	/** This method is called from within the constructor to
+	 * initialize the form.
+	 * WARNING: Do NOT modify this code. The content of this method is
+	 * always regenerated by the Form Editor.
+	 */
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jPanel2 = new javax.swing.JPanel();
+        jPanel3 = new javax.swing.JPanel();
+        jLabel1 = new javax.swing.JLabel();
+        jPanel4 = new javax.swing.JPanel();
+        jTextField1 = new javax.swing.JTextField();
+        jPanel5 = new javax.swing.JPanel();
+        jButton1 = new javax.swing.JButton();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jEditorPane1 = new javax.swing.JEditorPane();
+
+        setLayout(new java.awt.BorderLayout());
+
+        jPanel2.setLayout(new java.awt.BorderLayout());
+
+        jPanel3.setLayout(new java.awt.GridLayout(1, 0, 0, 8));
+
+        org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel2.class, "LoadDataSetVisualPanel2.jLabel1.text")); // NOI18N
+        jLabel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 12, 2, 8));
+        jPanel3.add(jLabel1);
+
+        jPanel2.add(jPanel3, java.awt.BorderLayout.WEST);
+
+        jPanel4.setLayout(new java.awt.GridLayout(1, 0, 0, 8));
+
+        jTextField1.setText(org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel2.class, "LoadDataSetVisualPanel2.jTextField1.text")); // NOI18N
+        jPanel4.add(jTextField1);
+
+        jPanel2.add(jPanel4, java.awt.BorderLayout.CENTER);
+
+        jPanel5.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 8, 0, 0));
+        jPanel5.setLayout(new java.awt.GridLayout(1, 0, 0, 8));
+
+        org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel2.class, "LoadDataSetVisualPanel2.jButton1.text")); // NOI18N
+        jButton1.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jButton1ActionPerformed(evt);
+            }
+        });
+        jPanel5.add(jButton1);
+
+        jPanel2.add(jPanel5, java.awt.BorderLayout.EAST);
+
+        add(jPanel2, java.awt.BorderLayout.PAGE_START);
+
+        jScrollPane1.setBorder(null);
+        jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+
+        jEditorPane1.setBackground(jPanel2.getBackground());
+        jEditorPane1.setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 12, 8, 12));
+        jEditorPane1.setContentType(org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel2.class, "LoadDataSetVisualPanel2.jEditorPane1.contentType")); // NOI18N
+        jEditorPane1.setEditable(false);
+        jEditorPane1.setMaximumSize(new java.awt.Dimension(200, 200));
+        jScrollPane1.setViewportView(jEditorPane1);
+
+        add(jScrollPane1, java.awt.BorderLayout.CENTER);
+    }// </editor-fold>//GEN-END:initComponents
+
+	private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
+		if (fc == null)
+			fc = new JFileChooser();
+		String dir = NbPreferences.forModule(LoadDataSetWizardAction.class).get("LAST_DIR", "");
+		if (dir != null)
+			fc.setCurrentDirectory(new File(dir));
+		int r = fc.showDialog(this, "Open");
+		if (r == JFileChooser.APPROVE_OPTION && fc.getSelectedFile() != null) {
+			jTextField1.setText(fc.getSelectedFile().getAbsolutePath());
+			NbPreferences.forModule(LoadDataSetWizardAction.class).put("LAST_DIR", fc.getCurrentDirectory().getPath());
+		}
+	}//GEN-LAST:event_jButton1ActionPerformed
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton jButton1;
+    private javax.swing.JEditorPane jEditorPane1;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JPanel jPanel2;
+    private javax.swing.JPanel jPanel3;
+    private javax.swing.JPanel jPanel4;
+    private javax.swing.JPanel jPanel5;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JTextField jTextField1;
+    // End of variables declaration//GEN-END:variables
+
+	private JFileChooser fc;
+}
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel3.form b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel3.form
new file mode 100644
index 0000000..67e42dd
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel3.form
@@ -0,0 +1,173 @@
+<?xml version="1.1" encoding="UTF-8" ?>
+
+<Form version="1.4" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+  <AuxValues>
+    <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
+    <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+    <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+    <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+    <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+    <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,94,0,0,2,18"/>
+  </AuxValues>
+
+  <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+  <SubComponents>
+    <Container class="javax.swing.JPanel" name="jPanel3">
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="First"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
+      <SubComponents>
+        <Container class="javax.swing.JPanel" name="jPanel4">
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+              <BorderConstraints direction="West"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+            <Property name="columns" type="int" value="0"/>
+            <Property name="rows" type="int" value="2"/>
+            <Property name="verticalGap" type="int" value="8"/>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JLabel" name="jLabel1">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel3.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+                </Property>
+                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+                  <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                    <EmptyBorder bottom="2" left="12" right="8" top="2"/>
+                  </Border>
+                </Property>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JLabel" name="jLabel2">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel3.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+                </Property>
+                <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+                  <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                    <EmptyBorder bottom="2" left="12" right="8" top="2"/>
+                  </Border>
+                </Property>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel5">
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+              <BorderConstraints direction="Center"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+            <Property name="columns" type="int" value="0"/>
+            <Property name="rows" type="int" value="2"/>
+            <Property name="verticalGap" type="int" value="8"/>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JTextField" name="jTextField1">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel3.jTextField1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+                </Property>
+              </Properties>
+            </Component>
+            <Component class="javax.swing.JComboBox" name="jComboBox1">
+              <Properties>
+                <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
+                  <Connection code="keyListModel" type="code"/>
+                </Property>
+              </Properties>
+            </Component>
+          </SubComponents>
+        </Container>
+        <Container class="javax.swing.JPanel" name="jPanel6">
+          <Properties>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                <EmptyBorder bottom="0" left="8" right="0" top="0"/>
+              </Border>
+            </Property>
+          </Properties>
+          <Constraints>
+            <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+              <BorderConstraints direction="East"/>
+            </Constraint>
+          </Constraints>
+
+          <Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridLayout">
+            <Property name="columns" type="int" value="0"/>
+            <Property name="rows" type="int" value="2"/>
+            <Property name="verticalGap" type="int" value="8"/>
+          </Layout>
+          <SubComponents>
+            <Component class="javax.swing.JButton" name="jButton1">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel3.jButton1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
+              </Events>
+            </Component>
+            <Component class="javax.swing.JButton" name="jButton2">
+              <Properties>
+                <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+                  <ResourceString bundle="net/phyloviz/core/wizard/Bundle.properties" key="LoadDataSetVisualPanel3.jButton2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+                </Property>
+              </Properties>
+              <Events>
+                <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton2ActionPerformed"/>
+              </Events>
+            </Component>
+          </SubComponents>
+        </Container>
+      </SubComponents>
+    </Container>
+    <Container class="javax.swing.JScrollPane" name="jScrollPane1">
+      <Properties>
+        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+          <Border info="null"/>
+        </Property>
+      </Properties>
+      <Constraints>
+        <Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
+          <BorderConstraints direction="Center"/>
+        </Constraint>
+      </Constraints>
+
+      <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
+      <SubComponents>
+        <Component class="javax.swing.JEditorPane" name="jEditorPane1">
+          <Properties>
+            <Property name="background" type="java.awt.Color" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
+              <Connection component="jPanel3" name="background" type="property"/>
+            </Property>
+            <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
+              <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
+                <EmptyBorder bottom="8" left="12" right="12" top="8"/>
+              </Border>
+            </Property>
+            <Property name="editable" type="boolean" value="false"/>
+            <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+              <Dimension value="[200, 200]"/>
+            </Property>
+          </Properties>
+        </Component>
+      </SubComponents>
+    </Container>
+  </SubComponents>
+</Form>
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel3.html b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel3.html
new file mode 100644
index 0000000..0ff0c46
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel3.html
@@ -0,0 +1,10 @@
+If you have any type of ancillary data about the isolates (Demographic
+    information, Epidemiological information, Antibiotic Resistance, Gene
+    presence absence,etc) you can load a tab separated file to further
+    represent it on the algorithm. This file should be a tab separated file
+    with the first row with column headers (field names). One of the fields
+    should be the Sequence identifier. Choose this field in the Key drop
+    down menu to link the ancillary data to the allelic profile data. If the
+    field does not appear in the drop down menu press the Update button.
+    If you don't have any available data or don't wish do load any leave
+    this fields blank an press Finish.
\ No newline at end of file
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel3.java b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel3.java
new file mode 100644
index 0000000..05a9a05
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetVisualPanel3.java
@@ -0,0 +1,239 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.wizard;
+
+import java.awt.Font;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.URL;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JFileChooser;
+import javax.swing.JPanel;
+import javax.swing.UIManager;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
+import org.openide.util.NbPreferences;
+
+public final class LoadDataSetVisualPanel3 extends JPanel {
+
+	private DefaultComboBoxModel keyListModel;
+
+	/** Creates new form LoadDataSetVisualPanel2 */
+	public LoadDataSetVisualPanel3() {
+		keyListModel = new DefaultComboBoxModel();
+		initComponents();
+
+		try {
+			URL url = LoadDataSetVisualPanel1.class.getResource("LoadDataSetVisualPanel3.html");
+			jEditorPane1.setEditorKit(new HTMLEditorKit());
+			jEditorPane1.setPage(url);
+			Font font = UIManager.getFont("Label.font");
+			String bodyRule = "body { font-family: " + font.getFamily() + "; "
+				+ "font-size: " + font.getSize() + "pt; width: " + jEditorPane1.getSize().width + "px;}";
+			((HTMLDocument) jEditorPane1.getDocument()).getStyleSheet().addRule(bodyRule);
+		} catch (IOException e) {
+			// Do nothing...
+			System.err.println(e.getMessage());
+		}
+	}
+
+	@Override
+	public String getName() {
+		return "Isolate Data";
+	}
+
+	public String getFilename() {
+		return jTextField1.getText();
+	}
+
+	public String getKey() {
+		return (String) jComboBox1.getSelectedItem();
+	}
+
+	public int getKeyIndex() {
+		return jComboBox1.getSelectedIndex();
+	}
+
+	private void updateKeyList(String[] result) {
+
+		keyListModel.removeAllElements();
+		if (result == null)
+			return;
+
+		for (int i = 0; i < result.length; i++)
+			keyListModel.addElement(result[i]);
+	}
+
+	/** This method is called from within the constructor to
+	 * initialize the form.
+	 * WARNING: Do NOT modify this code. The content of this method is
+	 * always regenerated by the Form Editor.
+	 */
+    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+    private void initComponents() {
+
+        jPanel3 = new javax.swing.JPanel();
+        jPanel4 = new javax.swing.JPanel();
+        jLabel1 = new javax.swing.JLabel();
+        jLabel2 = new javax.swing.JLabel();
+        jPanel5 = new javax.swing.JPanel();
+        jTextField1 = new javax.swing.JTextField();
+        jComboBox1 = new javax.swing.JComboBox();
+        jPanel6 = new javax.swing.JPanel();
+        jButton1 = new javax.swing.JButton();
+        jButton2 = new javax.swing.JButton();
+        jScrollPane1 = new javax.swing.JScrollPane();
+        jEditorPane1 = new javax.swing.JEditorPane();
+
+        setLayout(new java.awt.BorderLayout());
+
+        jPanel3.setLayout(new java.awt.BorderLayout());
+
+        jPanel4.setLayout(new java.awt.GridLayout(2, 0, 0, 8));
+
+        org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel3.class, "LoadDataSetVisualPanel3.jLabel1.text")); // NOI18N
+        jLabel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 12, 2, 8));
+        jPanel4.add(jLabel1);
+
+        org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel3.class, "LoadDataSetVisualPanel3.jLabel2.text")); // NOI18N
+        jLabel2.setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 12, 2, 8));
+        jPanel4.add(jLabel2);
+
+        jPanel3.add(jPanel4, java.awt.BorderLayout.WEST);
+
+        jPanel5.setLayout(new java.awt.GridLayout(2, 0, 0, 8));
+
+        jTextField1.setText(org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel3.class, "LoadDataSetVisualPanel3.jTextField1.text")); // NOI18N
+        jPanel5.add(jTextField1);
+
+        jComboBox1.setModel(keyListModel);
+        jPanel5.add(jComboBox1);
+
+        jPanel3.add(jPanel5, java.awt.BorderLayout.CENTER);
+
+        jPanel6.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 8, 0, 0));
+        jPanel6.setLayout(new java.awt.GridLayout(2, 0, 0, 8));
+
+        org.openide.awt.Mnemonics.setLocalizedText(jButton1, org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel3.class, "LoadDataSetVisualPanel3.jButton1.text")); // NOI18N
+        jButton1.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jButton1ActionPerformed(evt);
+            }
+        });
+        jPanel6.add(jButton1);
+
+        org.openide.awt.Mnemonics.setLocalizedText(jButton2, org.openide.util.NbBundle.getMessage(LoadDataSetVisualPanel3.class, "LoadDataSetVisualPanel3.jButton2.text")); // NOI18N
+        jButton2.addActionListener(new java.awt.event.ActionListener() {
+            public void actionPerformed(java.awt.event.ActionEvent evt) {
+                jButton2ActionPerformed(evt);
+            }
+        });
+        jPanel6.add(jButton2);
+
+        jPanel3.add(jPanel6, java.awt.BorderLayout.EAST);
+
+        add(jPanel3, java.awt.BorderLayout.PAGE_START);
+
+        jScrollPane1.setBorder(null);
+
+        jEditorPane1.setBackground(jPanel3.getBackground());
+        jEditorPane1.setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 12, 8, 12));
+        jEditorPane1.setEditable(false);
+        jEditorPane1.setMaximumSize(new java.awt.Dimension(200, 200));
+        jScrollPane1.setViewportView(jEditorPane1);
+
+        add(jScrollPane1, java.awt.BorderLayout.CENTER);
+    }// </editor-fold>//GEN-END:initComponents
+
+	private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
+		if (fc == null)
+			fc = new JFileChooser();
+		String dir = NbPreferences.forModule(LoadDataSetWizardAction.class).get("LAST_DIR", "");
+		if (dir != null)
+			fc.setCurrentDirectory(new File(dir));
+		int r = fc.showDialog(this, "Open");
+		if (r == JFileChooser.APPROVE_OPTION && fc.getSelectedFile() != null) {
+			jTextField1.setText(fc.getSelectedFile().getAbsolutePath());
+			NbPreferences.forModule(LoadDataSetWizardAction.class).put("LAST_DIR", fc.getCurrentDirectory().getPath());
+
+			String[] result = null;
+			try {
+				// Get headers...
+				 result = new BufferedReader(new FileReader(fc.getSelectedFile())).readLine().split("\t", -1);
+			} catch (FileNotFoundException ex) {
+				// If there is any problem with the file, we will check it later.
+			} catch (IOException ex) {
+				// If there is any problem with the file, we will check it later.
+			}
+			updateKeyList(result);
+		}
+}//GEN-LAST:event_jButton1ActionPerformed
+
+	private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
+
+		String[] result = null;
+			try {
+				// Get headers...
+				 result = new BufferedReader(new FileReader(new File(jTextField1.getText()))).readLine().split("\t", -1);
+
+			} catch (FileNotFoundException ex) {
+				// If there is any problem with the file, we will check it later.
+			} catch (IOException ex) {
+				// If there is any problem with the file, we will check it later.
+			}
+			updateKeyList(result);
+	}//GEN-LAST:event_jButton2ActionPerformed
+
+    // Variables declaration - do not modify//GEN-BEGIN:variables
+    private javax.swing.JButton jButton1;
+    private javax.swing.JButton jButton2;
+    private javax.swing.JComboBox jComboBox1;
+    private javax.swing.JEditorPane jEditorPane1;
+    private javax.swing.JLabel jLabel1;
+    private javax.swing.JLabel jLabel2;
+    private javax.swing.JPanel jPanel3;
+    private javax.swing.JPanel jPanel4;
+    private javax.swing.JPanel jPanel5;
+    private javax.swing.JPanel jPanel6;
+    private javax.swing.JScrollPane jScrollPane1;
+    private javax.swing.JTextField jTextField1;
+    // End of variables declaration//GEN-END:variables
+
+	private JFileChooser fc;
+}
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetWizardAction.java b/src/net/phyloviz/core/wizard/LoadDataSetWizardAction.java
new file mode 100644
index 0000000..4ba0952
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetWizardAction.java
@@ -0,0 +1,125 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.wizard;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dialog;
+import java.awt.event.ActionEvent;
+import java.text.MessageFormat;
+import javax.swing.AbstractAction;
+import javax.swing.JComponent;
+import org.openide.DialogDisplayer;
+import org.openide.WizardDescriptor;
+import org.openide.WizardDescriptor.Panel;
+import org.openide.util.HelpCtx;
+
+public final class LoadDataSetWizardAction extends AbstractAction {
+
+	private WizardDescriptor.Panel[] panels;
+
+	@SuppressWarnings("unchecked")
+	@Override
+	public void actionPerformed(ActionEvent e) {
+		WizardDescriptor wizardDescriptor = new WizardDescriptor((Panel<WizardDescriptor>[]) getPanels());
+		// {0} will be replaced by WizardDesriptor.Panel.getComponent().getName()
+		wizardDescriptor.setTitleFormat(new MessageFormat("{0}"));
+		wizardDescriptor.setTitle("Load a Dataset");
+		wizardDescriptor.putProperty("WizardPanel_contentBackgroundColor", Color.WHITE);
+		//wizardDescriptor.putProperty("WizardPanel_image", ImageUtilities.loadImage("net/phyloviz/core/wizard.gif", true));
+		wizardDescriptor.putProperty("WizardPanel_imageAligment", "center");
+		Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor);
+		dialog.setVisible(true);
+		dialog.toFront();
+		boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION;
+		if (!cancelled) {
+			// do something
+		}
+	}
+
+	/**
+	 * Initialize panels representing individual wizard's steps and sets
+	 * various properties for them influencing wizard appearance.
+	 */
+	private WizardDescriptor.Panel[] getPanels() {
+		if (panels == null) {
+			panels = new WizardDescriptor.Panel[]{
+					new LoadDataSetWizardPanel1(),
+					new LoadDataSetWizardPanel2(),
+					new LoadDataSetWizardPanel3()
+				};
+			String[] steps = new String[panels.length];
+			for (int i = 0; i < panels.length; i++) {
+				Component c = panels[i].getComponent();
+				// Default step name to component name of panel. Mainly useful
+				// for getting the name of the target chooser to appear in the
+				// list of steps.
+				steps[i] = c.getName();
+				if (c instanceof JComponent) { // assume Swing components
+					JComponent jc = (JComponent) c;
+					// Sets step number of a component
+					// TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*:
+					jc.putClientProperty("WizardPanel_contentSelectedIndex", new Integer(i));
+					// Sets steps names for a panel
+					jc.putClientProperty("WizardPanel_contentData", steps);
+					// Turn on subtitle creation on each step
+					jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE);
+					// Show steps on the left side with the image on the background
+					jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE);
+					// Turn on numbering of all steps
+					jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE);
+				}
+			}
+		}
+		return panels;
+	}
+
+	public String getName() {
+		return "Start Sample Wizard";
+	}
+
+	public String iconResource() {
+		return null;
+	}
+
+	public HelpCtx getHelpCtx() {
+		return HelpCtx.DEFAULT_HELP;
+	}
+
+	protected boolean asynchronous() {
+		return false;
+	}
+}
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetWizardPanel1.java b/src/net/phyloviz/core/wizard/LoadDataSetWizardPanel1.java
new file mode 100644
index 0000000..da11712
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetWizardPanel1.java
@@ -0,0 +1,134 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.wizard;
+
+import java.awt.Component;
+import javax.swing.event.ChangeListener;
+import net.phyloviz.core.util.TypingFactory;
+import org.openide.WizardDescriptor;
+import org.openide.WizardValidationException;
+import org.openide.util.HelpCtx;
+import org.openide.util.ImageUtilities;
+
+public class LoadDataSetWizardPanel1 implements WizardDescriptor.ValidatingPanel {
+
+	/**
+	 * The visual component that displays this panel. If you need to access the
+	 * component from this class, just use getComponent().
+	 */
+	private LoadDataSetVisualPanel1 component;
+
+	// Get the visual component for the panel. In this template, the component
+	// is kept separate. This can be more efficient: if the wizard is created
+	// but never displayed, or not all panels are displayed, it is better to
+	// create only those which really need to be visible.
+	@Override
+	public Component getComponent() {
+		if (component == null) {
+			component = new LoadDataSetVisualPanel1();
+		}
+		return component;
+	}
+
+	@Override
+	public HelpCtx getHelp() {
+		// Show no Help button for this panel:
+		return HelpCtx.DEFAULT_HELP;
+	}
+
+	@Override
+	public boolean isValid() {
+		return true;
+	}
+
+	@Override
+	public final void addChangeListener(ChangeListener l) {
+	}
+
+	@Override
+	public final void removeChangeListener(ChangeListener l) {
+	}
+	/*
+	private final Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0
+	public final void addChangeListener(ChangeListener l) {
+	synchronized (listeners) {
+	listeners.add(l);
+	}
+	}
+	public final void removeChangeListener(ChangeListener l) {
+	synchronized (listeners) {
+	listeners.remove(l);
+	}
+	}
+	protected final void fireChangeEvent() {
+	Iterator<ChangeListener> it;
+	synchronized (listeners) {
+	it = new HashSet<ChangeListener>(listeners).iterator();
+	}
+	ChangeEvent ev = new ChangeEvent(this);
+	while (it.hasNext()) {
+	it.next().stateChanged(ev);
+	}
+	}
+	 */
+
+	// You can use a settings object to keep track of state. Normally the
+	// settings object will be the WizardDescriptor, so you can use
+	// WizardDescriptor.getProperty & putProperty to store information entered
+	// by the user.
+	@Override
+	public void readSettings(Object settings) {
+		((WizardDescriptor) settings).putProperty("WizardPanel_image", ImageUtilities.loadImage("net/phyloviz/core/DataSetImage.png", true));
+	}
+
+	@Override
+	public void storeSettings(Object settings) {
+		((WizardDescriptor) settings).putProperty("name", ((LoadDataSetVisualPanel1) getComponent()).getDatasetName());
+		((WizardDescriptor) settings).putProperty("typing", ((LoadDataSetVisualPanel1) getComponent()).getTypingFactory());
+	}
+
+	@Override
+	public void validate() throws WizardValidationException {
+		String name = component.getDatasetName();
+		TypingFactory type = component.getTypingFactory();
+
+		if (name.equals(""))
+			throw new WizardValidationException(null, "Invalid name", null);
+
+		if (type == null)
+			throw new WizardValidationException(null, "Invalid type", null);
+	}
+}
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetWizardPanel2.java b/src/net/phyloviz/core/wizard/LoadDataSetWizardPanel2.java
new file mode 100644
index 0000000..0b372e7
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetWizardPanel2.java
@@ -0,0 +1,128 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.wizard;
+
+import java.awt.Component;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import javax.swing.event.ChangeListener;
+import net.phyloviz.core.data.AbstractProfile;
+import net.phyloviz.core.data.TypingData;
+import net.phyloviz.core.util.TypingFactory;
+import org.openide.WizardDescriptor;
+import org.openide.WizardValidationException;
+import org.openide.awt.StatusDisplayer;
+import org.openide.util.HelpCtx;
+import org.openide.util.ImageUtilities;
+
+public class LoadDataSetWizardPanel2 implements WizardDescriptor.ValidatingPanel {
+
+	/**
+	 * The visual component that displays this panel. If you need to access the
+	 * component from this class, just use getComponent().
+	 */
+	private Component component;
+	private TypingFactory tf;
+	private TypingData<? extends AbstractProfile> td;
+
+	// Get the visual component for the panel. In this template, the component
+	// is kept separate. This can be more efficient: if the wizard is created
+	// but never displayed, or not all panels are displayed, it is better to
+	// create only those which really need to be visible.
+	@Override
+	public Component getComponent() {
+		if (component == null) {
+			component = new LoadDataSetVisualPanel2();
+		}
+		return component;
+	}
+
+	@Override
+	public HelpCtx getHelp() {
+		// Show no Help button for this panel:
+		return HelpCtx.DEFAULT_HELP;
+	}
+
+	@Override
+	public boolean isValid() {
+		return true;
+	}
+
+	@Override
+	public final void addChangeListener(ChangeListener l) {
+	}
+
+	@Override
+	public final void removeChangeListener(ChangeListener l) {
+	}
+
+	// You can use a settings object to keep track of state. Normally the
+	// settings object will be the WizardDescriptor, so you can use
+	// WizardDescriptor.getProperty & putProperty to store information entered
+	// by the user.
+	@Override
+	public void readSettings(Object settings) {
+		((WizardDescriptor) settings).putProperty("WizardPanel_image", ImageUtilities.loadImage("net/phyloviz/core/TypingImage.png", true));
+		tf = (TypingFactory) ((WizardDescriptor) settings).getProperty("typing");
+		((LoadDataSetVisualPanel2) component).setDescription(tf.getFormatDescription());
+	}
+
+	@Override
+	public void storeSettings(Object settings) {
+		((WizardDescriptor) settings).putProperty("td_filename", ((LoadDataSetVisualPanel2) getComponent()).getFilename());
+		((WizardDescriptor) settings).putProperty("typing_factory", tf);
+		((WizardDescriptor) settings).putProperty("typing_data", td);
+	}
+
+	@Override
+	public void validate() throws WizardValidationException {
+		try {
+        		StatusDisplayer.getDefault().setStatusText("Loading typing data...");
+			td = tf.loadData(new FileReader(((LoadDataSetVisualPanel2) getComponent()).getFilename()));
+			td.setDescription(tf.toString());
+
+		} catch (FileNotFoundException ex) {
+			throw new WizardValidationException(null, "File not found: " + ex.getMessage(), null);
+		} catch (IOException ex) {
+			throw new WizardValidationException(null, "Error loading file: " + ex.getMessage(), null);
+		} catch (Exception ex) {
+			throw new WizardValidationException(null, "Fatal error: " + ex.getMessage(), null);
+		}
+	}
+}
diff --git a/src/net/phyloviz/core/wizard/LoadDataSetWizardPanel3.java b/src/net/phyloviz/core/wizard/LoadDataSetWizardPanel3.java
new file mode 100644
index 0000000..3a15d21
--- /dev/null
+++ b/src/net/phyloviz/core/wizard/LoadDataSetWizardPanel3.java
@@ -0,0 +1,152 @@
+/*-
+ * Copyright (c) 2011, PHYLOViZ Team <phyloviz at gmail.com>
+ * All rights reserved.
+ * 
+ * This file is part of PHYLOViZ <http://www.phyloviz.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/>.
+ * 
+ * Linking this library statically or dynamically with other modules is
+ * making a combined work based on this library.  Thus, the terms and
+ * conditions of the GNU General Public License cover the whole combination.
+ * 
+ * As a special exception, the copyright holders of this library give you
+ * permission to link this library with independent modules to produce an
+ * executable, regardless of the license terms of these independent modules,
+ * and to copy and distribute the resulting executable under terms of your
+ * choice, provided that you also meet, for each linked independent module,
+ * the terms and conditions of the license of that module.  An independent
+ * module is a module which is not derived from or based on this library.
+ * If you modify this library, you may extend this exception to your version
+ * of the library, but you are not obligated to do so.  If you do not wish
+ * to do so, delete this exception statement from your version.
+ */
+
+package net.phyloviz.core.wizard;
+
+import java.awt.Component;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import javax.swing.event.ChangeListener;
+import net.phyloviz.core.data.AbstractProfile;
+import net.phyloviz.core.data.DataSet;
+import net.phyloviz.core.data.DataSetTracker;
+import net.phyloviz.core.data.Population;
+import net.phyloviz.core.data.TypingData;
+import net.phyloviz.core.util.PopulationFactory;
+import net.phyloviz.core.util.TypingFactory;
+import org.openide.WizardDescriptor;
+import org.openide.WizardValidationException;
+import org.openide.awt.StatusDisplayer;
+import org.openide.util.HelpCtx;
+import org.openide.util.ImageUtilities;
+import org.openide.util.Lookup;
+
+public class LoadDataSetWizardPanel3 implements WizardDescriptor.ValidatingPanel {
+
+	/**
+	 * The visual component that displays this panel. If you need to access the
+	 * component from this class, just use getComponent().
+	 */
+	private Component component;
+	private String dataSetName;
+
+	private TypingData<? extends AbstractProfile> td;
+	private TypingFactory tf;
+	private Population pop;
+	private DataSet ds;
+
+	// Get the visual component for the panel. In this template, the component
+	// is kept separate. This can be more efficient: if the wizard is created
+	// but never displayed, or not all panels are displayed, it is better to
+	// create only those which really need to be visible.
+	@Override
+	public Component getComponent() {
+		if (component == null) {
+			component = new LoadDataSetVisualPanel3();
+		}
+		return component;
+	}
+
+	@Override
+	public HelpCtx getHelp() {
+		// Show no Help button for this panel:
+		return HelpCtx.DEFAULT_HELP;
+	}
+
+	@Override
+	public boolean isValid() {
+		return true;
+	}
+
+	@Override
+	public final void addChangeListener(ChangeListener l) {
+	}
+
+	@Override
+	public final void removeChangeListener(ChangeListener l) {
+	}
+
+	// You can use a settings object to keep track of state. Normally the
+	// settings object will be the WizardDescriptor, so you can use
+	// WizardDescriptor.getProperty & putProperty to store information entered
+	// by the user.
+	@SuppressWarnings("unchecked")
+	@Override
+	public void readSettings(Object settings) {
+		((WizardDescriptor) settings).putProperty("WizardPanel_image", ImageUtilities.loadImage("net/phyloviz/core/PopulationImage.png", true));
+		td = (TypingData<AbstractProfile>) ((WizardDescriptor) settings).getProperty("typing_data");
+		tf = (TypingFactory) ((WizardDescriptor) settings).getProperty("typing_factory");
+		dataSetName = (String) ((WizardDescriptor) settings).getProperty("name");
+	}
+
+	@Override
+	public void storeSettings(Object settings) {
+	}
+
+	@Override
+	public void validate() throws WizardValidationException {
+
+		ds = new DataSet(dataSetName);
+
+		String fileName = ((LoadDataSetVisualPanel3) getComponent()).getFilename();
+
+		if (fileName != null && (! fileName.equals(""))) {
+			try {
+        			StatusDisplayer.getDefault().setStatusText("Loading isolate data...");
+				pop = new PopulationFactory().loadPopulation(new FileReader(fileName));
+			} catch (FileNotFoundException ex) {
+				throw new WizardValidationException(null, "File not found: " + ex.getMessage(), null);
+			} catch (IOException ex) {
+				throw new WizardValidationException(null, "Error loading file: " + ex.getMessage(), null);
+			} catch (Exception ex) {
+				throw new WizardValidationException(null, "Fatal error: " + ex.getMessage(), null);
+			}
+
+			int key = ((LoadDataSetVisualPanel3) getComponent()).getKeyIndex();
+
+			ds.add(pop);
+	        	StatusDisplayer.getDefault().setStatusText("Integrating data...");
+			td = tf.integrateData(td, pop, key);
+			ds.setPopKey(key);
+
+		}
+
+		ds.add(td);
+
+		Lookup.getDefault().lookup(DataSetTracker.class).add(ds);
+        	StatusDisplayer.getDefault().setStatusText("Dataset loaded.");
+	}
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/phyloviz-core.git



More information about the debian-med-commit mailing list