diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000000000000000000000000000000000000..bce81a93e3a9f13bcb09e0d20129bbce69176c06
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,4 @@
+include README.md
+include jass/swagger/swagger.yaml
+recursive-include jass/static *
+recursive-include celery_files *
diff --git a/README.md b/README.md
index 5747508cbf467bad42cbd30f50c495f063f52efa..f81e2ceacc557dc38bb45db5a2469f5b75d5cc5e 100644
--- a/README.md
+++ b/README.md
@@ -1,52 +1,42 @@
 # JASS
 
-## setup
+## install
 
-The main requirement is **python 3**. To setup the server in a dedicated virtualenv (you need **virtualenv**), please execute the following from the root directory, once you have cloned the repository:
+You need **python3** to install and use JASS.
 
 ```
-virtualenv venv
-. venv/bin/activate
-pip3 install -r requirements.txt
-# you can quit the virtualenv with
-deactivate
+# install
+pip install [TODO upload to pypi]
 ```
 
-## run
+## configure and import data
 
 ```
-# activate the virtualenv
-. venv/bin/activate
-# run the server, [CTRL+C] to quit
-python -m swagger-server
-# you can quit the virtualenv with
-deactivate
+# configure
+export JASS_DATA_DIR=/tmp/JASSDATA
+# import GWAS data into JASS
+python -m jass create_init_table [TODO use IMpG format]
 ```
 
-## browse
-
-### for end users
-
-TODO
-
-### for developers
-
-The Swagger UI is there:
+## run a server
 
 ```
-http://localhost:8080/ui/
+# launch celery to process tasks
+celery -A jass worker
+# launch the web server
+python -m jass serve
 ```
 
-The Swagger definition for this server's API lives here:
+## use JASS on the command line
 
 ```
-http://localhost:8080/swagger.json
+# list available phenotypes on the command line
+python -m jass list-phenotypes
+# compute joint statistics on the command line into an HDF file
+python -m jass create-worktable --phenotypes z_RA_RA z_ReproGen_AME --worktable-path testwt.h5
+# create the global manhattan plot for a joint statistics file
+python -m jass plot-manhattan --worktable-path testwt.h5 --plot-path testgm.png
+# create the quadrant plot for a joint statistics file
+python -m jass plot-quadrant --worktable-path testwt.h5 --plot-path testqd.png
 ```
 
-# tests
-
-To launch the integration tests, use tox:
-```
-sudo pip install tox
-tox
-```
diff --git a/celery_files/default/celeryd b/celery_files/default/celeryd
index 3885d9221097164232048bfc4a583a6b4ad53b38..6dc9b985420d0dd0258ae0d651178e9c5ce62500 100644
--- a/celery_files/default/celeryd
+++ b/celery_files/default/celeryd
@@ -1,6 +1,6 @@
 CELERYD_NODES="worker"
 CELERY_BIN="/opt/jass/venv/bin/celery"
-CELERY_APP="swagger_server.models.project"
+CELERY_APP="jass.models.project"
 CELERYD_CHDIR="/opt/jass"
 CELERYD_OPTS="--time-limit=3000 --concurrency=1 --max-tasks-per-child=1 --executable=/opt/jass/venv/bin/python"
 CELERYD_LOG_FILE="/opt/jass/log/celery%N.log"
diff --git a/jass.wsgi b/jass.wsgi
index cd7979430951679c2ecc0799ed828c77ec256f2b..379ca1cd13351488f58f1cb8d78b58219caf4375 100644
--- a/jass.wsgi
+++ b/jass.wsgi
@@ -5,7 +5,7 @@ activate_this = '/opt/jass/venv/bin/activate_this.py'
 exec(open(activate_this).read(), dict(__file__=activate_this))
 sys.path.insert(0, '/opt/jass')
 
-from swagger_server.server import get_jass_app
+from jass.server import get_jass_app
 
 app = get_jass_app()
 application = app.app
diff --git a/jass/__init__.py b/jass/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..ac600075f89fc566e6250dafbdce1883bec12ff4
--- /dev/null
+++ b/jass/__init__.py
@@ -0,0 +1,19 @@
+from celery import Celery
+import jass.models.project
+
+def make_celery(app):
+    celery = Celery(jass.models.project)
+    celery.conf.update(app.config)
+    TaskBase = celery.Task
+    class ContextTask(TaskBase):
+        abstract = True
+        def __call__(self, *args, **kwargs):
+            with app.app_context():
+                return TaskBase.__call__(self, *args, **kwargs)
+    celery.Task = ContextTask
+    return celery
+
+from flask import Flask
+
+flask_app = Flask(__name__)
+celery = make_celery(flask_app)
diff --git a/swagger_server/__main__.py b/jass/__main__.py
similarity index 100%
rename from swagger_server/__main__.py
rename to jass/__main__.py
diff --git a/swagger_server/config.py b/jass/config.py
similarity index 89%
rename from swagger_server/config.py
rename to jass/config.py
index 6ddad5424a1e1e918088de22ead472320681b891..3b2ee049946a04a2a3969a225bb253d66d68cbdf 100644
--- a/swagger_server/config.py
+++ b/jass/config.py
@@ -11,6 +11,6 @@ if 'JASS_HOST' in os.environ:
 if 'JASS_PORT' in os.environ:
     config['PORT'] = os.environ['JASS_PORT']
 if 'JASS_DATA_DIR' in os.environ:
-    config['JASS_DATA_DIR'] = os.environ['JASS_DATA_DIR']
+    config['DATA_DIR'] = os.environ['JASS_DATA_DIR']
 if 'JASS_INITTABLE_CHUNKSIZE' in os.environ:
     config['INITTABLE_CHUNKSIZE'] = int(os.environ['JASS_INITTABLE_CHUNKSIZE'])
diff --git a/swagger_server/__init__.py b/jass/controllers/__init__.py
similarity index 100%
rename from swagger_server/__init__.py
rename to jass/controllers/__init__.py
diff --git a/swagger_server/controllers/default_controller.py b/jass/controllers/default_controller.py
similarity index 94%
rename from swagger_server/controllers/default_controller.py
rename to jass/controllers/default_controller.py
index aa99e8d1e8a0ebe40ac7d7b427ee8b765284bf1c..b61aa09b691eeb028781455d821cd645f140f407 100644
--- a/swagger_server/controllers/default_controller.py
+++ b/jass/controllers/default_controller.py
@@ -5,9 +5,9 @@ from six import iteritems
 from flask import send_file, abort
 import connexion
 
-from swagger_server.models.phenotype import Phenotype, get_available_phenotypes
-from swagger_server.models.project import Project, create_project
-from swagger_server.config import config
+from jass.models.phenotype import Phenotype, get_available_phenotypes
+from jass.models.project import Project, create_project
+from jass.config import config
 PHENOTYPES = get_available_phenotypes(os.path.join(config['DATA_DIR'],'initTable.hdf5')) #FIXME part of the config
 
 def phenotypes_get():
diff --git a/swagger_server/encoder.py b/jass/encoder.py
similarity index 93%
rename from swagger_server/encoder.py
rename to jass/encoder.py
index 607595d32d7d3688d9fb16ea4262c185e31b3634..8d647c181337a7e7c2e10613a280db2f851a9120 100644
--- a/swagger_server/encoder.py
+++ b/jass/encoder.py
@@ -1,7 +1,7 @@
 from connexion.apps.flask_app import FlaskJSONEncoder
 #from connexion.decorators import produces
 from six import iteritems
-from swagger_server.models.base_model_ import Model
+from jass.models.base_model_ import Model
 from pandas import isnull
 
 class JSONEncoder(FlaskJSONEncoder):
diff --git a/swagger_server/models/__init__.py b/jass/models/__init__.py
similarity index 100%
rename from swagger_server/models/__init__.py
rename to jass/models/__init__.py
diff --git a/swagger_server/models/base_model_.py b/jass/models/base_model_.py
similarity index 100%
rename from swagger_server/models/base_model_.py
rename to jass/models/base_model_.py
diff --git a/swagger_server/models/phenotype.py b/jass/models/phenotype.py
similarity index 100%
rename from swagger_server/models/phenotype.py
rename to jass/models/phenotype.py
diff --git a/swagger_server/models/project.py b/jass/models/project.py
similarity index 99%
rename from swagger_server/models/project.py
rename to jass/models/project.py
index 80cbdc6c579b2b052e6c62e5dba8fe140d8a2510..ffe82c76eed6451d879e0a318eb3bd03f28b2ba3 100644
--- a/swagger_server/models/project.py
+++ b/jass/models/project.py
@@ -12,7 +12,7 @@ from .base_model_ import Model
 from ..util import deserialize_model
 from .phenotype import Phenotype
 from .worktable import create_worktable_file, get_worktable_summary, get_worktable_genomedata, get_worktable_local_manhattan_data, get_worktable_local_heatmap_data, create_global_plot, create_quadrant_plot
-from swagger_server.config import config
+from jass.config import config
 
 app = Celery('tasks', broker='pyamqp://guest@localhost//')
 
diff --git a/swagger_server/models/worktable.py b/jass/models/worktable.py
similarity index 100%
rename from swagger_server/models/worktable.py
rename to jass/models/worktable.py
diff --git a/swagger_server/server.py b/jass/server.py
similarity index 100%
rename from swagger_server/server.py
rename to jass/server.py
diff --git a/swagger_server/static/chromo_heatmap_manhattan.html b/jass/static/chromo_heatmap_manhattan.html
similarity index 100%
rename from swagger_server/static/chromo_heatmap_manhattan.html
rename to jass/static/chromo_heatmap_manhattan.html
diff --git a/swagger_server/static/css/style.css b/jass/static/css/style.css
similarity index 100%
rename from swagger_server/static/css/style.css
rename to jass/static/css/style.css
diff --git a/swagger_server/static/data/cytoBand.txt b/jass/static/data/cytoBand.txt
similarity index 100%
rename from swagger_server/static/data/cytoBand.txt
rename to jass/static/data/cytoBand.txt
diff --git a/swagger_server/static/export.html b/jass/static/export.html
similarity index 100%
rename from swagger_server/static/export.html
rename to jass/static/export.html
diff --git a/swagger_server/static/img/bkg_part1.jpg b/jass/static/img/bkg_part1.jpg
similarity index 100%
rename from swagger_server/static/img/bkg_part1.jpg
rename to jass/static/img/bkg_part1.jpg
diff --git a/swagger_server/static/img/bkg_part2.jpg b/jass/static/img/bkg_part2.jpg
similarity index 100%
rename from swagger_server/static/img/bkg_part2.jpg
rename to jass/static/img/bkg_part2.jpg
diff --git a/swagger_server/static/img/bkg_part2_wthLabel.jpg b/jass/static/img/bkg_part2_wthLabel.jpg
similarity index 100%
rename from swagger_server/static/img/bkg_part2_wthLabel.jpg
rename to jass/static/img/bkg_part2_wthLabel.jpg
diff --git a/swagger_server/static/img/busy.gif b/jass/static/img/busy.gif
similarity index 100%
rename from swagger_server/static/img/busy.gif
rename to jass/static/img/busy.gif
diff --git a/swagger_server/static/img/jass19Avrilsmall.jpg b/jass/static/img/jass19Avrilsmall.jpg
similarity index 100%
rename from swagger_server/static/img/jass19Avrilsmall.jpg
rename to jass/static/img/jass19Avrilsmall.jpg
diff --git a/swagger_server/static/index.html b/jass/static/index.html
similarity index 100%
rename from swagger_server/static/index.html
rename to jass/static/index.html
diff --git a/swagger_server/static/js/Chromosome.js b/jass/static/js/Chromosome.js
similarity index 100%
rename from swagger_server/static/js/Chromosome.js
rename to jass/static/js/Chromosome.js
diff --git a/swagger_server/static/js/colorScale.js b/jass/static/js/colorScale.js
similarity index 100%
rename from swagger_server/static/js/colorScale.js
rename to jass/static/js/colorScale.js
diff --git a/swagger_server/static/js/jquery-ui.js b/jass/static/js/jquery-ui.js
similarity index 100%
rename from swagger_server/static/js/jquery-ui.js
rename to jass/static/js/jquery-ui.js
diff --git a/swagger_server/static/js/jquery.min.js b/jass/static/js/jquery.min.js
similarity index 100%
rename from swagger_server/static/js/jquery.min.js
rename to jass/static/js/jquery.min.js
diff --git a/swagger_server/static/js/plotly-latest.min.js b/jass/static/js/plotly-latest.min.js
similarity index 100%
rename from swagger_server/static/js/plotly-latest.min.js
rename to jass/static/js/plotly-latest.min.js
diff --git a/swagger_server/static/js/snap.svg-min.js b/jass/static/js/snap.svg-min.js
similarity index 100%
rename from swagger_server/static/js/snap.svg-min.js
rename to jass/static/js/snap.svg-min.js
diff --git a/swagger_server/static/selectPhenotypes.html b/jass/static/selectPhenotypes.html
similarity index 100%
rename from swagger_server/static/selectPhenotypes.html
rename to jass/static/selectPhenotypes.html
diff --git a/swagger_server/swagger/swagger.yaml b/jass/swagger/swagger.yaml
similarity index 88%
rename from swagger_server/swagger/swagger.yaml
rename to jass/swagger/swagger.yaml
index 380393d491e18f9d6301722149abce36e9d30736..2bab1149034952a69342b7d8ff3d6e306f4c6b60 100644
--- a/swagger_server/swagger/swagger.yaml
+++ b/jass/swagger/swagger.yaml
@@ -17,7 +17,7 @@ paths:
             title: "ArrayOfPhenotypes"
             items:
               $ref: "#/definitions/Phenotype"
-      x-swagger-router-controller: "swagger_server.controllers.default_controller"
+      x-swagger-router-controller: "jass.controllers.default_controller"
   /projects:
     post:
       description: "Create a new project from a selection of phenotypes\n"
@@ -36,7 +36,7 @@ paths:
           description: "Project created"
           schema:
             $ref: "#/definitions/Phenotype"
-      x-swagger-router-controller: "swagger_server.controllers.default_controller"
+      x-swagger-router-controller: "jass.controllers.default_controller"
   /projects/{projectID}:
     get:
       description: "Retrieve a project definition\n"
@@ -52,7 +52,7 @@ paths:
           description: "Retrieved project"
           schema:
             $ref: "#/definitions/Phenotype"
-      x-swagger-router-controller: "swagger_server.controllers.default_controller"
+      x-swagger-router-controller: "jass.controllers.default_controller"
   /projects/{projectID}/summary:
     get:
       description: "Retrieve summary statistics for a given project"
@@ -69,7 +69,7 @@ paths:
           schema:
             type: "string"
             title: "Project summary statistics"
-      x-swagger-router-controller: "swagger_server.controllers.default_controller"
+      x-swagger-router-controller: "jass.controllers.default_controller"
   /projects/{projectID}/genome:
     get:
       description: "Retrieve whole genome data for a given project\n"
@@ -88,7 +88,7 @@ paths:
           schema:
             type: "string"
             title: "Genome data"
-      x-swagger-router-controller: "swagger_server.controllers.default_controller"
+      x-swagger-router-controller: "jass.controllers.default_controller"
   /projects/{projectID}/globalmanhattan:
     get:
       description: "Retrieve global manhattan plot for a given project\n"
@@ -107,7 +107,7 @@ paths:
           schema:
             type: "string"
             title: "Global manhattan plot"
-      x-swagger-router-controller: "swagger_server.controllers.default_controller"
+      x-swagger-router-controller: "jass.controllers.default_controller"
   /projects/{projectID}/quadrant:
     get:
       description: "Retrieve quadrant plot for a given project\n"
@@ -127,7 +127,7 @@ paths:
           schema:
             type: "string"
             title: "Quadrant plot"
-      x-swagger-router-controller: "swagger_server.controllers.default_controller"
+      x-swagger-router-controller: "jass.controllers.default_controller"
   /projects/{projectID}/manhattan/{chromosome}/{region}:
     get:
       description: "Retrieve local manhattan data"
@@ -156,7 +156,7 @@ paths:
           schema:
             type: "string"
             title: "Local manhattan plot data"
-      x-swagger-router-controller: "swagger_server.controllers.default_controller"
+      x-swagger-router-controller: "jass.controllers.default_controller"
   /projects/{projectID}/heatmap/{chromosome}/{region}:
     get:
       description: "Retrieve local heatmap data"
@@ -185,7 +185,7 @@ paths:
           schema:
             type: "string"
             title: "Local heatmap plot data"
-      x-swagger-router-controller: "swagger_server.controllers.default_controller"
+      x-swagger-router-controller: "jass.controllers.default_controller"
 definitions:
   Phenotype:
     properties:
diff --git a/swagger_server/test/__init__.py b/jass/test/__init__.py
similarity index 100%
rename from swagger_server/test/__init__.py
rename to jass/test/__init__.py
diff --git a/swagger_server/test/test_default_controller.py b/jass/test/test_default_controller.py
similarity index 98%
rename from swagger_server/test/test_default_controller.py
rename to jass/test/test_default_controller.py
index 0a193be77f837a07972fc5be2f113e816201f7a0..66723eeeca9d853fe8be08fcfa7227e34f7bef6c 100644
--- a/swagger_server/test/test_default_controller.py
+++ b/jass/test/test_default_controller.py
@@ -2,7 +2,7 @@
 
 from __future__ import absolute_import
 
-from swagger_server.models.phenotype import Phenotype
+from jass.models.phenotype import Phenotype
 from . import BaseTestCase
 from six import BytesIO
 from flask import json
diff --git a/swagger_server/util.py b/jass/util.py
similarity index 100%
rename from swagger_server/util.py
rename to jass/util.py
diff --git a/run.sh b/run.sh
deleted file mode 100755
index 9e28bd66f47b4f5dcb8b9358cbe40bcc3e1e29e4..0000000000000000000000000000000000000000
--- a/run.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/sh
-. venv/bin/activate
-python -m swagger_server
diff --git a/setup.py b/setup.py
index 1d08c48ed3fc83b61cab84bb758dcf9b7e18131f..95b388ac191329c0a352e59dcb72722bd2ca3c4f 100644
--- a/setup.py
+++ b/setup.py
@@ -1,33 +1,32 @@
 # coding: utf-8
 
-import sys
+import os, sys
 from setuptools import setup, find_packages
 
-NAME = "swagger_server"
-VERSION = "1.0.0"
+NAME = "jass"
+VERSION = "dev"
 
-# To install the library, run the following
-#
-# python setup.py install
-#
-# prerequisite: setuptools
-# http://pypi.python.org/pypi/setuptools
+SETUP_DIR = os.path.dirname(__file__)
+README = os.path.join(SETUP_DIR, 'README.md')
+readme = open(README).read()
 
-REQUIRES = ["connexion"]
+REQUIRES = ["connexion", "python_dateutil", "setuptools", "pandas", "tables", "scipy", "matplotlib", "celery", "h5py"]
 
 setup(
     name=NAME,
     version=VERSION,
-    description="PCMAWeb API Specification",
-    author_email="",
-    url="",
-    keywords=["Swagger", "PCMAWeb API Specification"],
-    install_requires=REQUIRES,
+    description="JASS allows for single SNP joint analysis of multiple GWAS summary statistics",
+    author='Hervé Ménager and Pierre Lechat and Carla Lasry and Vincent Guillemot and Hugues Aschard',
+    author_email="hmenager@pasteur.fr and pierre.lechat@pasteur.fr and carla.lasry@pasteur.fr and vincent.guillemot@pasteur.fr and hugues.aschard@pasteur.fr",
+    url="https://gitlab.pasteur.fr/vguillem/jass",
     packages=find_packages(),
+    install_requires=REQUIRES,
+    license="?",
+    keywords=["GWAS", "Data analysis", "summary statistics"],
     package_data={'': ['swagger/swagger.yaml']},
     include_package_data=True,
     long_description="""\
-    No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
+    
     """
 )
 
diff --git a/swagger_server/controllers/__init__.py b/swagger_server/controllers/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000