diff --git a/pom.xml b/pom.xml
index e7cf675dcaf539e1a88edaa22aad91cf91660e5d..0e1f30ba8e407ee684e241cd28407bb9916c8163 100644
--- a/pom.xml
+++ b/pom.xml
@@ -84,6 +84,21 @@
             <artifactId>postgresql</artifactId>
             <version>9.1-901-1.jdbc4</version>
         </dependency>
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-jersey-jaxrs</artifactId>
+            <version>1.5.4</version>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>2.0.4-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.0.4-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/src/main/java/org/hbp/mip/MIPApplication.java b/src/main/java/org/hbp/mip/MIPApplication.java
index 7f4247db8e9a2b69e1449e53169aae401bcbd6b2..3de9d687036ae7e66c665d69dcdb1ef4dc9b2812 100644
--- a/src/main/java/org/hbp/mip/MIPApplication.java
+++ b/src/main/java/org/hbp/mip/MIPApplication.java
@@ -130,7 +130,7 @@ public class MIPApplication extends WebSecurityConfigurerAdapter {
 
     @RequestMapping(value = "/models", method = RequestMethod.GET)
     @ResponseBody
-    public List<Model> getModels(@RequestParam(name = "limit", required = false) boolean limit, @RequestParam(name = "own", required = false) boolean own, @RequestParam(name = "team", required = false) int team, @RequestParam(name = "valid", required = false) boolean valid) {
+    public List<Model> getModels() {
         Session session = HibernateUtil.getSessionFactory().getCurrentSession();
         session.beginTransaction();
         List<Model> models = session.createQuery("from Model").list();
diff --git a/src/main/java/org/hbp/mip/mock/ArticleMock.java b/src/main/java/org/hbp/mip/mock/ArticleMock.java
index 2cdcb0154af6de76e99f71e1a6cf221e1946c49f..472f7f0092d79b656e6e241e6385277a0e12be95 100644
--- a/src/main/java/org/hbp/mip/mock/ArticleMock.java
+++ b/src/main/java/org/hbp/mip/mock/ArticleMock.java
@@ -21,7 +21,7 @@ public class ArticleMock extends Article {
                 /*this.setPublishedAt(currentDate);
                 this.setUpdatedAt(currentDate);
                 this.setTags(new LinkedList<>());*/
-                this.setAbst("This is a first test article.");
+                this.setAbstract("This is a first test article.");
                 this.setContent("<!DOCTYPE html><html><head></head><body><p>This is the content of my first test article.</p></body></html>");
                 /*this.setCreatedAt(currentDate);
                 this.setCreatedBy(currentUser);
@@ -34,7 +34,7 @@ public class ArticleMock extends Article {
                 /*this.setPublishedAt(currentDate);
                 this.setUpdatedAt(currentDate);
                 this.setTags(new LinkedList<>());*/
-                this.setAbst("This is a second test article.");
+                this.setAbstract("This is a second test article.");
                 this.setContent("<!DOCTYPE html><html><head></head><body><p>This is the content of my second test article.</p></body></html>");
                 /*this.setCreatedAt(currentDate);
                 this.setCreatedBy(currentUser);
diff --git a/src/main/java/org/hbp/mip/model/Article.java b/src/main/java/org/hbp/mip/model/Article.java
index d3a3173b85f73e13b6cfacafdb144767497cf119..ffe787707a8a85bc5297b8b6e3aa12e21ee05e11 100644
--- a/src/main/java/org/hbp/mip/model/Article.java
+++ b/src/main/java/org/hbp/mip/model/Article.java
@@ -4,6 +4,10 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 import java.util.Date;
 import java.util.LinkedList;
@@ -11,128 +15,195 @@ import java.util.List;
 
 @Entity
 @Table(name = "article_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class Article {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    private String status;
-    private String title;
-    private String slug;
-    private String abst;
-    private String content;
-    private Date publishedAt;
-    private Date createdAt;
-    private Date updatedAt;
+    private Long id = null;
+    private String status = null;
+    private String title = null;
+    private String slug = null;
+    private String _abstract = null;
+    private String content = null;
+    private Date publishedAt = null;
+    private Date createdAt = null;
+    private Date updatedAt = null;
     @ManyToOne
-    private User createdBy;
+    private User createdBy = null;
     @ManyToOne
-    private User updatedBy;
+    private User updatedBy = null;
     @ManyToMany(fetch = FetchType.EAGER)
-    private List<Tag> tags;
+    private List<Tag> tags = new LinkedList<Tag>();
 
     public Article() {
     }
 
-    public long getId() {
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
+    public Long getId() {
         return id;
     }
-
-    private void setId(long id) {
+    public void setId(Long id) {
         this.id = id;
     }
 
+    /**
+     * Status
+     **/
+    @ApiModelProperty(value = "Status")
+    @JsonProperty("status")
     public String getStatus() {
         return status;
     }
-
     public void setStatus(String status) {
         this.status = status;
     }
 
+    /**
+     * Title
+     **/
+    @ApiModelProperty(value = "Title")
+    @JsonProperty("title")
     public String getTitle() {
         return title;
     }
-
     public void setTitle(String title) {
         this.title = title;
     }
 
+    /**
+     * Short string identifier
+     **/
+    @ApiModelProperty(value = "Short string identifier")
+    @JsonProperty("slug")
     public String getSlug() {
         return slug;
     }
-
     public void setSlug(String slug) {
         this.slug = slug;
     }
 
-    public String getAbst() {
-        return abst;
+    /**
+     * Short introduction
+     **/
+    @ApiModelProperty(value = "Short introduction")
+    @JsonProperty("abstract")
+    public String getAbstract() {
+        return _abstract;
     }
-
-    public void setAbst(String abst) {
-        this.abst = abst;
+    public void setAbstract(String _abstract) {
+        this._abstract = _abstract;
     }
 
+    /**
+     * Content
+     **/
+    @ApiModelProperty(value = "Content")
+    @JsonProperty("content")
     public String getContent() {
         return content;
     }
-
     public void setContent(String content) {
         this.content = content;
     }
 
+    /**
+     * Publication date
+     **/
+    @ApiModelProperty(value = "Publication date")
+    @JsonProperty("publishedAt")
     public Date getPublishedAt() {
         return publishedAt;
     }
-
     public void setPublishedAt(Date publishedAt) {
         this.publishedAt = publishedAt;
     }
 
+    /**
+     * Creation date
+     **/
+    @ApiModelProperty(value = "Creation date")
+    @JsonProperty("createdAt")
     public Date getCreatedAt() {
         return createdAt;
     }
-
     public void setCreatedAt(Date createdAt) {
         this.createdAt = createdAt;
     }
 
+    /**
+     * Update date
+     **/
+    @ApiModelProperty(value = "Update date")
+    @JsonProperty("updatedAt")
     public Date getUpdatedAt() {
         return updatedAt;
     }
-
     public void setUpdatedAt(Date updatedAt) {
         this.updatedAt = updatedAt;
     }
 
+    /**
+     * Author
+     **/
+    @ApiModelProperty(value = "Author")
+    @JsonProperty("createdBy")
     public User getCreatedBy() {
         return createdBy;
     }
-
     public void setCreatedBy(User createdBy) {
         this.createdBy = createdBy;
     }
 
+    /**
+     * Updater
+     **/
+    @ApiModelProperty(value = "Updater")
+    @JsonProperty("updatedBy")
     public User getUpdatedBy() {
         return updatedBy;
     }
-
     public void setUpdatedBy(User updatedBy) {
         this.updatedBy = updatedBy;
     }
 
+    /**
+     **/
+    @ApiModelProperty(value = "")
+    @JsonProperty("tags")
     public List<Tag> getTags() {
         return tags;
     }
-
     public void setTags(List<Tag> tags) {
         this.tags = tags;
     }
 
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class Article {\n");
+
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  status: ").append(status).append("\n");
+        sb.append("  title: ").append(title).append("\n");
+        sb.append("  slug: ").append(slug).append("\n");
+        sb.append("  _abstract: ").append(_abstract).append("\n");
+        sb.append("  content: ").append(content).append("\n");
+        sb.append("  publishedAt: ").append(publishedAt).append("\n");
+        sb.append("  createdAt: ").append(createdAt).append("\n");
+        sb.append("  updatedAt: ").append(updatedAt).append("\n");
+        sb.append("  createdBy: ").append(createdBy).append("\n");
+        sb.append("  updatedBy: ").append(updatedBy).append("\n");
+        sb.append("  tags: ").append(tags).append("\n");
+        sb.append("}\n");
+        return sb.toString();
+    }
+
     public void addTag(Tag tag) {
-        if(this.tags == null) {
-            this.tags = new LinkedList<>();
-        }
         this.tags.add(tag);
     }
 }
diff --git a/src/main/java/org/hbp/mip/model/Chart.java b/src/main/java/org/hbp/mip/model/Chart.java
index c5ec9db5cdb5a2515e765d92f1280a2cba16818f..203152a54a8788bf0d1531582fbc9cf95f98bbe2 100644
--- a/src/main/java/org/hbp/mip/model/Chart.java
+++ b/src/main/java/org/hbp/mip/model/Chart.java
@@ -4,60 +4,92 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 import java.util.LinkedList;
 import java.util.List;
 
 @Entity
 @Table(name = "chart_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class Chart {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    private String chartType;
-    private String xAxis;
+    private Long id = null;
+    private String chartType = null;
+    private String xAxis = null;
     @ManyToMany
-    private List<ChartConfigSet> chartConfigSets;
+    private List<ChartConfigSet> chartConfigSets = new LinkedList<ChartConfigSet>();
 
     public Chart() {
     }
 
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
     public Long getId() {
         return id;
     }
-
-    private void setId(Long id) {
+    public void setId(Long id) {
         this.id = id;
     }
 
+    /**
+     * Chart type
+     **/
+    @ApiModelProperty(value = "Chart type")
+    @JsonProperty("chartType")
     public String getChartType() {
         return chartType;
     }
-
     public void setChartType(String chartType) {
         this.chartType = chartType;
     }
 
-    public String getxAxis() {
+    /**
+     * X axis label
+     **/
+    @ApiModelProperty(value = "X axis label")
+    @JsonProperty("xAxis")
+    public String getXAxis() {
         return xAxis;
     }
-
-    public void setxAxis(String xAxis) {
+    public void setXAxis(String xAxis) {
         this.xAxis = xAxis;
     }
 
+    /**
+     * Chart configuration
+     **/
+    @ApiModelProperty(value = "Chart configuration")
+    @JsonProperty("chartConfigSets")
     public List<ChartConfigSet> getChartConfigSets() {
         return chartConfigSets;
     }
-
     public void setChartConfigSets(List<ChartConfigSet> chartConfigSets) {
         this.chartConfigSets = chartConfigSets;
     }
 
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class Chart {\n");
+
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  chartType: ").append(chartType).append("\n");
+        sb.append("  xAxis: ").append(xAxis).append("\n");
+        sb.append("  chartConfigSets: ").append(chartConfigSets).append("\n");
+        sb.append("}\n");
+        return sb.toString();
+    }
+
     public void addChartConfigSet(ChartConfigSet chartConfigSet) {
-        if(this.chartConfigSets == null) {
-            this.chartConfigSets = new LinkedList<>();
-        }
         this.chartConfigSets.add(chartConfigSet);
     }
 }
diff --git a/src/main/java/org/hbp/mip/model/ChartConfigSet.java b/src/main/java/org/hbp/mip/model/ChartConfigSet.java
index 89e19dfc36cb01abee0f97488d2fa84f9800809f..4bee73b6406a55c6e190d33de0a3836a61a914e6 100644
--- a/src/main/java/org/hbp/mip/model/ChartConfigSet.java
+++ b/src/main/java/org/hbp/mip/model/ChartConfigSet.java
@@ -4,50 +4,86 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 
 @Entity
 @Table(name = "chart_config_set_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class ChartConfigSet {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    private String code;
-    private String label;
-    private String color;
+    private Long id = null;
+    private String code = null;
+    private String label = null;
+    private String color = null;
 
     public ChartConfigSet() {
     }
 
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
     public Long getId() {
         return id;
     }
-
-    private void setId(Long id) {
+    public void setId(Long id) {
         this.id = id;
     }
 
+    /**
+     * Code
+     **/
+    @ApiModelProperty(value = "Code")
+    @JsonProperty("code")
     public String getCode() {
         return code;
     }
-
     public void setCode(String code) {
         this.code = code;
     }
 
+    /**
+     * Label
+     **/
+    @ApiModelProperty(value = "Label")
+    @JsonProperty("label")
     public String getLabel() {
         return label;
     }
-
     public void setLabel(String label) {
         this.label = label;
     }
 
+    /**
+     * Color
+     **/
+    @ApiModelProperty(value = "Color")
+    @JsonProperty("color")
     public String getColor() {
         return color;
     }
-
     public void setColor(String color) {
         this.color = color;
     }
+
+
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class ChartConfigSet {\n");
+
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  code: ").append(code).append("\n");
+        sb.append("  label: ").append(label).append("\n");
+        sb.append("  color: ").append(color).append("\n");
+        sb.append("}\n");
+        return sb.toString();
+    }
 }
diff --git a/src/main/java/org/hbp/mip/model/Dataset.java b/src/main/java/org/hbp/mip/model/Dataset.java
index 7a1942ad3b4a9162981b22b4156bf5f321352210..b8c207d9ef073636587cc0bab4877ccd5780d40e 100644
--- a/src/main/java/org/hbp/mip/model/Dataset.java
+++ b/src/main/java/org/hbp/mip/model/Dataset.java
@@ -4,76 +4,91 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 import java.util.Date;
+import java.util.LinkedList;
 import java.util.List;
 
 @Entity
 @Table(name = "dataset_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class Dataset {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    private String code;
-    private Date date;
+    private Long id = null;
+    private String code = null;
+    private Date date = null;
     @ElementCollection
-    private List<String> header;
-    //@ElementCollection
-    //private List<Map<String, List<Object>>> data;
+    private List<String> header = new LinkedList<String>();
 
     public Dataset() {
     }
 
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
     public Long getId() {
         return id;
     }
-
-    private void setId(Long id) {
+    public void setId(Long id) {
         this.id = id;
     }
 
+    /**
+     * Code
+     **/
+    @ApiModelProperty(value = "Code")
+    @JsonProperty("code")
     public String getCode() {
         return code;
     }
-
     public void setCode(String code) {
         this.code = code;
     }
 
+    /**
+     * Date
+     **/
+    @ApiModelProperty(value = "Date")
+    @JsonProperty("date")
     public Date getDate() {
         return date;
     }
-
     public void setDate(Date date) {
         this.date = date;
     }
 
+    /**
+     * Header
+     **/
+    @ApiModelProperty(value = "Header")
+    @JsonProperty("header")
     public List<String> getHeader() {
         return header;
     }
-
     public void setHeader(List<String> header) {
         this.header = header;
     }
 
-    /*public List<Map<String, List<Object>>> getData() {
-        return data;
-    }
 
-    public void setData(List<Map<String, List<Object>>> data) {
-        this.data = data;
-    }
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class Dataset {\n");
 
-    public void addHeaderValue(String value) {
-        if(this.header == null) {
-            this.header = new LinkedList<>();
-        }
-        this.header.add(value);
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  code: ").append(code).append("\n");
+        sb.append("  date: ").append(date).append("\n");
+        sb.append("  header: ").append(header).append("\n");
+        sb.append("}\n");
+        return sb.toString();
     }
-    public void addDataMap(Map<String, List<Object>> map) {
-        if(this.data == null) {
-            this.data = new LinkedList<>();
-        }
-        this.data.add(map);
-    }*/
+
 }
diff --git a/src/main/java/org/hbp/mip/model/Filter.java b/src/main/java/org/hbp/mip/model/Filter.java
index ca62dffb4a3ec2ef9330002f9e2b142227373910..2ccba488244175c6be975862c8162fd6477367cb 100644
--- a/src/main/java/org/hbp/mip/model/Filter.java
+++ b/src/main/java/org/hbp/mip/model/Filter.java
@@ -4,42 +4,72 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 
 @Entity
 @Table(name = "filter_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class Filter {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
+    private Long id = null;
     @ManyToOne
-    private Variable variable;
-    private String operator;
+    private Variable variable = null;
+    private String operator = null;
 
     public Filter() {
     }
 
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
     public Long getId() {
         return id;
     }
-
-    private void setId(Long id) {
+    public void setId(Long id) {
         this.id = id;
     }
 
+    /**
+     * Variable
+     **/
+    @ApiModelProperty(value = "Variable")
+    @JsonProperty("variable")
     public Variable getVariable() {
         return variable;
     }
-
     public void setVariable(Variable variable) {
         this.variable = variable;
     }
 
+    /**
+     * Operator
+     **/
+    @ApiModelProperty(value = "Operator")
+    @JsonProperty("operator")
     public String getOperator() {
         return operator;
     }
-
     public void setOperator(String operator) {
         this.operator = operator;
     }
+
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class Filter {\n");
+
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  variable: ").append(variable).append("\n");
+        sb.append("  operator: ").append(operator).append("\n");
+        sb.append("}\n");
+        return sb.toString();
+    }
 }
diff --git a/src/main/java/org/hbp/mip/model/Group.java b/src/main/java/org/hbp/mip/model/Group.java
index cc93b4f534768ced00f93c8252608ffd4b68616f..dfc405941bd4202a39dc6472110464e9dcf9b661 100644
--- a/src/main/java/org/hbp/mip/model/Group.java
+++ b/src/main/java/org/hbp/mip/model/Group.java
@@ -4,60 +4,92 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 import java.util.LinkedList;
 import java.util.List;
 
 @Entity
 @Table(name = "group_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class Group {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    private String code;
-    private String label;
+    private Long id = null;
+    private String code = null;
+    private String label = null;
     @ManyToMany
-    private List<Group> groups;
+    private List<Group> groups = new LinkedList<Group>();
 
     public Group() {
     }
 
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
     public Long getId() {
         return id;
     }
-
-    private void setId(Long id) {
+    public void setId(Long id) {
         this.id = id;
     }
 
+    /**
+     * Code
+     **/
+    @ApiModelProperty(value = "Code")
+    @JsonProperty("code")
     public String getCode() {
         return code;
     }
-
     public void setCode(String code) {
         this.code = code;
     }
 
+    /**
+     * Label
+     **/
+    @ApiModelProperty(value = "Label")
+    @JsonProperty("label")
     public String getLabel() {
         return label;
     }
-
     public void setLabel(String label) {
         this.label = label;
     }
 
+    /**
+     * Groups
+     **/
+    @ApiModelProperty(value = "Groups")
+    @JsonProperty("groups")
     public List<Group> getGroups() {
         return groups;
     }
-
     public void setGroups(List<Group> groups) {
         this.groups = groups;
     }
 
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class Group {\n");
+
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  code: ").append(code).append("\n");
+        sb.append("  label: ").append(label).append("\n");
+        sb.append("  groups: ").append(groups).append("\n");
+        sb.append("}\n");
+        return sb.toString();
+    }
+
     public void addGroup(Group group) {
-        if(this.groups == null) {
-            this.groups = new LinkedList<>();
-        }
         this.groups.add(group);
     }
 }
diff --git a/src/main/java/org/hbp/mip/model/Model.java b/src/main/java/org/hbp/mip/model/Model.java
index 36600b41901107ed3e0530ba4e6823feba1b2f96..89c668061cbeb20b88c312a50a7d20d180babaa6 100644
--- a/src/main/java/org/hbp/mip/model/Model.java
+++ b/src/main/java/org/hbp/mip/model/Model.java
@@ -4,128 +4,203 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 import java.util.Date;
 
 @Entity
 @Table(name = "model_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class Model {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    private String title;
-    private String slug;
-    private String description;
+    private Long id = null;
+    private String title = null;
+    private String slug = null;
+    private String description = null;
     @ManyToOne
-    private Query query;
+    private Query query = null;
     @ManyToOne
-    private Dataset dataset;
-    private boolean valid;
+    private Dataset dataset = null;
+    private Boolean valid = null;
     @ManyToOne
-    private Chart chart;
-    private Date createdAt;
-    private Date updatedAt;
+    private Chart chart = null;
+    private Date createdAt = null;
+    private Date updatedAt = null;
     @ManyToOne
-    private User createdBy;
+    private User createdBy = null;
     @ManyToOne
-    private User updatedBy;
+    private User updatedBy = null;
 
     public Model() {
     }
 
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
     public Long getId() {
         return id;
     }
-
-    private void setId(Long id) {
+    public void setId(Long id) {
         this.id = id;
     }
 
+    /**
+     * Title
+     **/
+    @ApiModelProperty(value = "Title")
+    @JsonProperty("title")
     public String getTitle() {
         return title;
     }
-
     public void setTitle(String title) {
         this.title = title;
     }
 
+    /**
+     * slug
+     **/
+    @ApiModelProperty(value = "slug")
+    @JsonProperty("slug")
     public String getSlug() {
         return slug;
     }
-
     public void setSlug(String slug) {
         this.slug = slug;
     }
 
+    /**
+     * Description
+     **/
+    @ApiModelProperty(value = "Description")
+    @JsonProperty("description")
     public String getDescription() {
         return description;
     }
-
     public void setDescription(String description) {
         this.description = description;
     }
 
+    /**
+     * Query
+     **/
+    @ApiModelProperty(value = "Query")
+    @JsonProperty("query")
     public Query getQuery() {
         return query;
     }
-
     public void setQuery(Query query) {
         this.query = query;
     }
 
+    /**
+     * Dataset
+     **/
+    @ApiModelProperty(value = "Dataset")
+    @JsonProperty("dataset")
     public Dataset getDataset() {
         return dataset;
     }
-
     public void setDataset(Dataset dataset) {
         this.dataset = dataset;
     }
 
-    public boolean isValid() {
+    /**
+     * Is it valid ?
+     **/
+    @ApiModelProperty(value = "Is it valid ?")
+    @JsonProperty("valid")
+    public Boolean getValid() {
         return valid;
     }
-
-    public void setValid(boolean valid) {
+    public void setValid(Boolean valid) {
         this.valid = valid;
     }
 
+    /**
+     * Chart
+     **/
+    @ApiModelProperty(value = "Chart")
+    @JsonProperty("chart")
     public Chart getChart() {
         return chart;
     }
-
     public void setChart(Chart chart) {
         this.chart = chart;
     }
 
+    /**
+     * Creation date
+     **/
+    @ApiModelProperty(value = "Creation date")
+    @JsonProperty("createdAt")
     public Date getCreatedAt() {
         return createdAt;
     }
-
     public void setCreatedAt(Date createdAt) {
         this.createdAt = createdAt;
     }
 
+    /**
+     * Update date
+     **/
+    @ApiModelProperty(value = "Update date")
+    @JsonProperty("updatedAt")
     public Date getUpdatedAt() {
         return updatedAt;
     }
-
     public void setUpdatedAt(Date updatedAt) {
         this.updatedAt = updatedAt;
     }
 
+    /**
+     * Author
+     **/
+    @ApiModelProperty(value = "Author")
+    @JsonProperty("createdBy")
     public User getCreatedBy() {
         return createdBy;
     }
-
     public void setCreatedBy(User createdBy) {
         this.createdBy = createdBy;
     }
 
+    /**
+     * Updater
+     **/
+    @ApiModelProperty(value = "Updater")
+    @JsonProperty("updatedBy")
     public User getUpdatedBy() {
         return updatedBy;
     }
-
     public void setUpdatedBy(User updatedBy) {
         this.updatedBy = updatedBy;
     }
+
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class Model {\n");
+
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  title: ").append(title).append("\n");
+        sb.append("  slug: ").append(slug).append("\n");
+        sb.append("  description: ").append(description).append("\n");
+        sb.append("  query: ").append(query).append("\n");
+        sb.append("  dataset: ").append(dataset).append("\n");
+        sb.append("  valid: ").append(valid).append("\n");
+        sb.append("  chart: ").append(chart).append("\n");
+        sb.append("  createdAt: ").append(createdAt).append("\n");
+        sb.append("  updatedAt: ").append(updatedAt).append("\n");
+        sb.append("  createdBy: ").append(createdBy).append("\n");
+        sb.append("  updatedBy: ").append(updatedBy).append("\n");
+        sb.append("}\n");
+        return sb.toString();
+    }
 }
diff --git a/src/main/java/org/hbp/mip/model/Query.java b/src/main/java/org/hbp/mip/model/Query.java
index 2ece36a7594507f4c43634bf5f2c69a80e349d67..2ec1937b1ee972a6039b43009ee40fe38a2600a9 100644
--- a/src/main/java/org/hbp/mip/model/Query.java
+++ b/src/main/java/org/hbp/mip/model/Query.java
@@ -4,102 +4,135 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 import java.util.LinkedList;
 import java.util.List;
 
 @Entity
 @Table(name = "query_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class Query {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
+    private Long id = null;
     @ManyToMany
-    private List<Variable> variables;
+    private List<Variable> variables = new LinkedList<Variable>();
     @ManyToMany
-    private List<Variable> covariables;
+    private List<Variable> covariables = new LinkedList<Variable>();
     @ManyToMany
-    private List<Variable> grouping;
+    private List<Variable> grouping = new LinkedList<Variable>();
     @ManyToMany
-    private List<Filter> filters;
-    private String request;
+    private List<Filter> filters = new LinkedList<Filter>();
+    private String request = null;
 
     public Query() {
     }
 
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
     public Long getId() {
         return id;
     }
-
-    private void setId(Long id) {
+    public void setId(Long id) {
         this.id = id;
     }
 
+    /**
+     * Variables
+     **/
+    @ApiModelProperty(value = "Variables")
+    @JsonProperty("variables")
     public List<Variable> getVariables() {
         return variables;
     }
-
     public void setVariables(List<Variable> variables) {
         this.variables = variables;
     }
 
+    /**
+     * Covariables
+     **/
+    @ApiModelProperty(value = "Covariables")
+    @JsonProperty("covariables")
     public List<Variable> getCovariables() {
         return covariables;
     }
-
     public void setCovariables(List<Variable> covariables) {
         this.covariables = covariables;
     }
 
+    /**
+     * Grouping
+     **/
+    @ApiModelProperty(value = "Grouping")
+    @JsonProperty("grouping")
     public List<Variable> getGrouping() {
         return grouping;
     }
-
     public void setGrouping(List<Variable> grouping) {
         this.grouping = grouping;
     }
 
+    /**
+     * Filters
+     **/
+    @ApiModelProperty(value = "Filters")
+    @JsonProperty("filters")
     public List<Filter> getFilters() {
         return filters;
     }
-
     public void setFilters(List<Filter> filters) {
         this.filters = filters;
     }
 
+    /**
+     * Request
+     **/
+    @ApiModelProperty(value = "Request")
+    @JsonProperty("request")
     public String getRequest() {
         return request;
     }
-
     public void setRequest(String request) {
         this.request = request;
     }
 
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class Query {\n");
+
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  variables: ").append(variables).append("\n");
+        sb.append("  covariables: ").append(covariables).append("\n");
+        sb.append("  grouping: ").append(grouping).append("\n");
+        sb.append("  filters: ").append(filters).append("\n");
+        sb.append("  request: ").append(request).append("\n");
+        sb.append("}\n");
+        return sb.toString();
+    }
+
     public void addVariable(Variable variable) {
-        if(this.variables == null) {
-            this.variables = new LinkedList<>();
-        }
         this.variables.add(variable);
     }
 
     public void addCovariable(Variable covariable) {
-        if(this.covariables == null) {
-            this.covariables = new LinkedList<>();
-        }
         this.covariables.add(covariable);
     }
 
     public void addGroupingVariable(Variable groupingVariable) {
-        if(this.grouping == null) {
-            this.grouping = new LinkedList<>();
-        }
         this.grouping.add(groupingVariable);
     }
 
     public void addFilter(Filter filter) {
-        if(this.filters == null) {
-            this.filters = new LinkedList<>();
-        }
         this.filters.add(filter);
     }
 }
diff --git a/src/main/java/org/hbp/mip/model/Tag.java b/src/main/java/org/hbp/mip/model/Tag.java
index bfe8f74b88e41b6266b63a3e555a64e5a00174a1..d744eec793fd1cccd84a1414fba9263944a33a4a 100644
--- a/src/main/java/org/hbp/mip/model/Tag.java
+++ b/src/main/java/org/hbp/mip/model/Tag.java
@@ -4,32 +4,57 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 
 @Entity
 @Table(name = "tag_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class Tag {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    private String name;
+    private Long id = null;
+    private String name = null;
 
     public Tag() {
     }
 
-    private Long getId() {
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
+    public Long getId() {
         return id;
     }
-
     public void setId(Long id) {
         this.id = id;
     }
 
+    /**
+     * Name
+     **/
+    @ApiModelProperty(value = "Name")
+    @JsonProperty("name")
     public String getName() {
         return name;
     }
-
     public void setName(String name) {
         this.name = name;
     }
+
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class Tag {\n");
+
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  name: ").append(name).append("\n");
+        sb.append("}\n");
+        return sb.toString();
+    }
 }
diff --git a/src/main/java/org/hbp/mip/model/User.java b/src/main/java/org/hbp/mip/model/User.java
index c0f743bce39884985ed2eb17e851758471bb10dd..a61231db1f4787c056096f3985c95867d9b4d70a 100644
--- a/src/main/java/org/hbp/mip/model/User.java
+++ b/src/main/java/org/hbp/mip/model/User.java
@@ -4,6 +4,10 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 import java.util.LinkedList;
 import java.util.List;
@@ -12,30 +16,32 @@ import java.util.regex.Pattern;
 
 @Entity
 @Table(name = "user_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class User {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    private String fullname;
-    private String username;
-    private String firstname;
-    private String lastname;
-    private String picture;
-    private String web;
-    private String phone;
-    private String birthday;
-    private String gender;
+    private Long id = null;
+    private String fullname = null;
+    private String username = null;
+    private String firstname = null;
+    private String lastname = null;
+    private String picture = null;
+    private String web = null;
+    private String phone = null;
+    private String birthday = null;
+    private String gender = null;
+    private String city = null;
+    private String country = null;
+    private String password = null;
+    private String email = null;
+    private String apikey = null;
+    private String team = null;
+    private Boolean isActive = null;
     @ElementCollection(fetch = FetchType.EAGER)
-    private List<String> languages;
-    private String city;
-    private String country;
-    private String password;
-    private String email;
-    private boolean isActive;
-    private String apikey;
-    private String team;
+    private List<String> languages = new LinkedList<String>();
     @ElementCollection(fetch = FetchType.EAGER)
-    private List<String> roles;
+    private List<String> roles = new LinkedList<String>();
 
     public User() {
     }
@@ -103,169 +109,267 @@ public class User {
 
     }
 
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
     public Long getId() {
         return id;
     }
-
-    private void setId(Long id) {
+    public void setId(Long id) {
         this.id = id;
     }
 
+    /**
+     * Fullname
+     **/
+    @ApiModelProperty(value = "Fullname")
+    @JsonProperty("fullname")
     public String getFullname() {
         return fullname;
     }
-
     public void setFullname(String fullname) {
         this.fullname = fullname;
     }
 
+    /**
+     * Username
+     **/
+    @ApiModelProperty(value = "Username")
+    @JsonProperty("username")
     public String getUsername() {
         return username;
     }
-
     public void setUsername(String username) {
         this.username = username;
     }
 
+    /**
+     * Firstname
+     **/
+    @ApiModelProperty(value = "Firstname")
+    @JsonProperty("firstname")
     public String getFirstname() {
         return firstname;
     }
-
     public void setFirstname(String firstname) {
         this.firstname = firstname;
     }
 
+    /**
+     * Lastname
+     **/
+    @ApiModelProperty(value = "Lastname")
+    @JsonProperty("lastname")
     public String getLastname() {
         return lastname;
     }
-
     public void setLastname(String lastname) {
         this.lastname = lastname;
     }
 
+    /**
+     * Path to a profile picture
+     **/
+    @ApiModelProperty(value = "Path to a profile picture")
+    @JsonProperty("picture")
     public String getPicture() {
         return picture;
     }
-
     public void setPicture(String picture) {
         this.picture = picture;
     }
 
+    /**
+     * Personnal web site URL
+     **/
+    @ApiModelProperty(value = "Personnal web site URL")
+    @JsonProperty("web")
     public String getWeb() {
         return web;
     }
-
     public void setWeb(String web) {
         this.web = web;
     }
 
+    /**
+     * Phone number
+     **/
+    @ApiModelProperty(value = "Phone number")
+    @JsonProperty("phone")
     public String getPhone() {
         return phone;
     }
-
     public void setPhone(String phone) {
         this.phone = phone;
     }
 
+    /**
+     * Birthday date
+     **/
+    @ApiModelProperty(value = "Birthday date")
+    @JsonProperty("birthday")
     public String getBirthday() {
         return birthday;
     }
-
     public void setBirthday(String birthday) {
         this.birthday = birthday;
     }
 
+    /**
+     * Gender
+     **/
+    @ApiModelProperty(value = "Gender")
+    @JsonProperty("gender")
     public String getGender() {
         return gender;
     }
-
     public void setGender(String gender) {
         this.gender = gender;
     }
 
-    public List<String> getLanguages() {
-        return languages;
-    }
-
-    public void setLanguages(List<String> languages) {
-        this.languages = languages;
-    }
-
+    /**
+     * City
+     **/
+    @ApiModelProperty(value = "City")
+    @JsonProperty("city")
     public String getCity() {
         return city;
     }
-
     public void setCity(String city) {
         this.city = city;
     }
 
+    /**
+     * Country
+     **/
+    @ApiModelProperty(value = "Country")
+    @JsonProperty("country")
     public String getCountry() {
         return country;
     }
-
     public void setCountry(String country) {
         this.country = country;
     }
 
+    /**
+     * password
+     **/
+    @ApiModelProperty(value = "password")
+    @JsonProperty("password")
     public String getPassword() {
         return password;
     }
-
     public void setPassword(String password) {
         this.password = password;
     }
 
+    /**
+     * E-mail address
+     **/
+    @ApiModelProperty(value = "E-mail address")
+    @JsonProperty("email")
     public String getEmail() {
         return email;
     }
-
     public void setEmail(String email) {
         this.email = email;
     }
 
-    public boolean isActive() {
-        return isActive;
-    }
-
-    public void setIsActive(boolean isActive) {
-        this.isActive = isActive;
-    }
-
+    /**
+     * API key
+     **/
+    @ApiModelProperty(value = "API key")
+    @JsonProperty("apikey")
     public String getApikey() {
         return apikey;
     }
-
     public void setApikey(String apikey) {
         this.apikey = apikey;
     }
 
+    /**
+     * Team
+     **/
+    @ApiModelProperty(value = "Team")
+    @JsonProperty("team")
     public String getTeam() {
         return team;
     }
-
     public void setTeam(String team) {
         this.team = team;
     }
 
+    /**
+     * Is it active ?
+     **/
+    @ApiModelProperty(value = "Is it active ?")
+    @JsonProperty("isActive")
+    public Boolean getIsActive() {
+        return isActive;
+    }
+    public void setIsActive(Boolean isActive) {
+        this.isActive = isActive;
+    }
+
+    /**
+     * Languages
+     **/
+    @ApiModelProperty(value = "Languages")
+    @JsonProperty("languages")
+    public List<String> getLanguages() {
+        return languages;
+    }
+    public void setLanguages(List<String> languages) {
+        this.languages = languages;
+    }
+
+    /**
+     * Roles
+     **/
+    @ApiModelProperty(value = "Roles")
+    @JsonProperty("roles")
     public List<String> getRoles() {
         return roles;
     }
-
     public void setRoles(List<String> roles) {
         this.roles = roles;
     }
 
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class User {\n");
+
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  fullname: ").append(fullname).append("\n");
+        sb.append("  username: ").append(username).append("\n");
+        sb.append("  firstname: ").append(firstname).append("\n");
+        sb.append("  lastname: ").append(lastname).append("\n");
+        sb.append("  picture: ").append(picture).append("\n");
+        sb.append("  web: ").append(web).append("\n");
+        sb.append("  phone: ").append(phone).append("\n");
+        sb.append("  birthday: ").append(birthday).append("\n");
+        sb.append("  gender: ").append(gender).append("\n");
+        sb.append("  city: ").append(city).append("\n");
+        sb.append("  country: ").append(country).append("\n");
+        sb.append("  password: ").append(password).append("\n");
+        sb.append("  email: ").append(email).append("\n");
+        sb.append("  apikey: ").append(apikey).append("\n");
+        sb.append("  team: ").append(team).append("\n");
+        sb.append("  isActive: ").append(isActive).append("\n");
+        sb.append("  languages: ").append(languages).append("\n");
+        sb.append("  roles: ").append(roles).append("\n");
+        sb.append("}\n");
+        return sb.toString();
+    }
+
     public void addLanguage(String language) {
-        if(this.languages == null) {
-            this.languages = new LinkedList<>();
-        }
         this.languages.add(language);
     }
 
     public void addRole(String role) {
-        if(this.roles == null) {
-            this.roles = new LinkedList<>();
-        }
         this.roles.add(role);
     }
 }
diff --git a/src/main/java/org/hbp/mip/model/Value.java b/src/main/java/org/hbp/mip/model/Value.java
index 845dd3d9d21bf99316da1496524fc5a2eafb0de0..bc7853d59c62ffb7931051a5296f59180a761a64 100644
--- a/src/main/java/org/hbp/mip/model/Value.java
+++ b/src/main/java/org/hbp/mip/model/Value.java
@@ -4,41 +4,73 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 
 @Entity
 @Table(name = "value_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class Value {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    private String code;
-    private String label;
+    private Long id = null;
+    private String code = null;
+    private String label = null;
 
-    public Value() {
-    }
 
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
     public Long getId() {
         return id;
     }
-
-    private void setId(Long id) {
+    public void setId(Long id) {
         this.id = id;
     }
 
+
+    /**
+     * Code
+     **/
+    @ApiModelProperty(value = "Code")
+    @JsonProperty("code")
     public String getCode() {
         return code;
     }
-
     public void setCode(String code) {
         this.code = code;
     }
 
+
+    /**
+     * Label
+     **/
+    @ApiModelProperty(value = "Label")
+    @JsonProperty("label")
     public String getLabel() {
         return label;
     }
-
     public void setLabel(String label) {
         this.label = label;
     }
+
+
+
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class Value {\n");
+
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  code: ").append(code).append("\n");
+        sb.append("  label: ").append(label).append("\n");
+        sb.append("}\n");
+        return sb.toString();
+    }
 }
diff --git a/src/main/java/org/hbp/mip/model/Variable.java b/src/main/java/org/hbp/mip/model/Variable.java
index a19fe9d57a71e6e87f94c918ec6fbbbcece54860..44b33731732bf86d302ea88716678f25fd200337 100644
--- a/src/main/java/org/hbp/mip/model/Variable.java
+++ b/src/main/java/org/hbp/mip/model/Variable.java
@@ -4,124 +4,176 @@
 
 package org.hbp.mip.model;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 import javax.persistence.*;
 import java.util.LinkedList;
 import java.util.List;
 
 @Entity
 @Table(name = "variable_mip")
+@ApiModel(description = "")
+@javax.annotation.Generated(value = "class io.swagger.codegen.languages.SpringMVCServerCodegen", date = "2016-01-06T09:32:22.266Z")
 public class Variable {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
+    private Long id = null;
     @ManyToOne
-    private Group group;
-    private String code;
-    private String label;
-    private String type;
-    private int length;
-    private boolean isVariable;
-    private boolean isGrouping;
-    private boolean isCovariable;
-    private boolean isFilter;
+    private Group group = null;
+    private String code = null;
+    private String label = null;
+    private String type = null;
+    private Integer length = null;
+    private Boolean isVariable = null;
+    private Boolean isGrouping = null;
+    private Boolean isFilter = null;
     @ManyToMany
-    private List<Value> values;
+    private List<Value> values = new LinkedList<Value>();
 
     public Variable() {
     }
 
+    /**
+     * Unique identifier
+     **/
+    @ApiModelProperty(value = "Unique identifier")
+    @JsonProperty("id")
     public Long getId() {
         return id;
     }
-
-    private void setId(Long id) {
+    public void setId(Long id) {
         this.id = id;
     }
 
+    /**
+     * Group
+     **/
+    @ApiModelProperty(value = "Group")
+    @JsonProperty("group")
     public Group getGroup() {
         return group;
     }
-
     public void setGroup(Group group) {
         this.group = group;
     }
 
+    /**
+     * Code
+     **/
+    @ApiModelProperty(value = "Code")
+    @JsonProperty("code")
     public String getCode() {
         return code;
     }
-
     public void setCode(String code) {
         this.code = code;
     }
 
+    /**
+     * Label
+     **/
+    @ApiModelProperty(value = "Label")
+    @JsonProperty("label")
     public String getLabel() {
         return label;
     }
-
     public void setLabel(String label) {
         this.label = label;
     }
 
+    /**
+     * Type
+     **/
+    @ApiModelProperty(value = "Type")
+    @JsonProperty("type")
     public String getType() {
         return type;
     }
-
     public void setType(String type) {
         this.type = type;
     }
 
-    public int getLength() {
+    /**
+     * Length
+     **/
+    @ApiModelProperty(value = "Length")
+    @JsonProperty("length")
+    public Integer getLength() {
         return length;
     }
-
-    public void setLength(int length) {
+    public void setLength(Integer length) {
         this.length = length;
     }
 
-    public boolean isVariable() {
+    /**
+     * Is it a covariable ?
+     **/
+    @ApiModelProperty(value = "Is it a covariable ?")
+    @JsonProperty("isVariable")
+    public Boolean getIsVariable() {
         return isVariable;
     }
-
-    public void setIsVariable(boolean isVariable) {
+    public void setIsVariable(Boolean isVariable) {
         this.isVariable = isVariable;
     }
 
-    public boolean isGrouping() {
+    /**
+     * Is it a grouping variable ?
+     **/
+    @ApiModelProperty(value = "Is it a grouping variable ?")
+    @JsonProperty("isGrouping")
+    public Boolean getIsGrouping() {
         return isGrouping;
     }
-
-    public void setIsGrouping(boolean isGrouping) {
+    public void setIsGrouping(Boolean isGrouping) {
         this.isGrouping = isGrouping;
     }
 
-    public boolean isCovariable() {
-        return isCovariable;
-    }
-
-    public void setIsCovariable(boolean isCovariable) {
-        this.isCovariable = isCovariable;
-    }
-
-    public boolean isFilter() {
+    /**
+     * Is it a filter ?
+     **/
+    @ApiModelProperty(value = "Is it a filter ?")
+    @JsonProperty("isFilter")
+    public Boolean getIsFilter() {
         return isFilter;
     }
-
-    public void setIsFilter(boolean isFilter) {
+    public void setIsFilter(Boolean isFilter) {
         this.isFilter = isFilter;
     }
 
+    /**
+     **/
+    @ApiModelProperty(value = "")
+    @JsonProperty("values")
     public List<Value> getValues() {
         return values;
     }
-
     public void setValues(List<Value> values) {
         this.values = values;
     }
 
+    @Override
+    public String toString()  {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class Variable {\n");
+
+        sb.append("  id: ").append(id).append("\n");
+        sb.append("  group: ").append(group).append("\n");
+        sb.append("  code: ").append(code).append("\n");
+        sb.append("  label: ").append(label).append("\n");
+        sb.append("  type: ").append(type).append("\n");
+        sb.append("  length: ").append(length).append("\n");
+        sb.append("  isVariable: ").append(isVariable).append("\n");
+        sb.append("  isGrouping: ").append(isGrouping).append("\n");
+        sb.append("  isFilter: ").append(isFilter).append("\n");
+        sb.append("  values: ").append(values).append("\n");
+        sb.append("}\n");
+        return sb.toString();
+    }
+
     public void addValue(Value value) {
-        if(this.values == null) {
-            this.values = new LinkedList<>();
-        }
         this.values.add(value);
     }
 }