diff --git a/app/controllers/racks.js b/app/controllers/racks.js
index c37c5023333fd276f2aca0ab2e8a66fb9372d6f3..e6dca9efeb3de04753ecbd348c4f546965469b68 100644
--- a/app/controllers/racks.js
+++ b/app/controllers/racks.js
@@ -1,11 +1,13 @@
 import Ember from 'ember';
+
+// app/controllers/rack.js
 export default Ember.Controller.extend({
 
 rackTableColumns: Ember.computed(function() {
  var col = Ember.A([
     Ember.Object.create({
       propertyName: "name",
-      title: "Name"
+      title: "Name",
     }),
     Ember.Object.create({
      propertyName: 'nbColumns',
@@ -15,6 +17,10 @@ rackTableColumns: Ember.computed(function() {
      propertyName: 'nbRows',
      title: 'Nombre de lignes',
     }),
+    Ember.Object.create({
+     propertyName: 'capacity',
+     title: 'Capacité total',
+    }),
     Ember.Object.create({
        "template": "customcell/imagecell",
       title: 'Image',
diff --git a/app/models/bottle.js b/app/models/bottle.js
new file mode 100644
index 0000000000000000000000000000000000000000..d38a3e306f018080844ee327793077f5d90ce416
--- /dev/null
+++ b/app/models/bottle.js
@@ -0,0 +1,12 @@
+import Ember from 'ember';
+import DS from 'ember-data';
+
+export default DS.Model.extend({
+   name: DS.attr('string'),
+   createdAt: DS.attr('date', {defaultValue() { return new Date(); }}),
+   yrow: DS.attr('number'),
+   xcolumn: DS.attr('number'),
+   flipped: DS.attr('boolean', {defaultValue: false}),
+
+   rack: DS.belongsTo('rack')
+});
diff --git a/app/models/rack.js b/app/models/rack.js
index 42a99fc2fb7bca220289fa6e5b84e9c1afde9903..f192f225e3fce1ff70b01abe9ef0e28a0b549bd5 100644
--- a/app/models/rack.js
+++ b/app/models/rack.js
@@ -10,4 +10,5 @@ export default DS.Model.extend({
    capacity: Ember.computed('nbColumns', 'nbRows', function() {
       return this.get('nbColumns')*this.get('nbRows'); }),
 
+   bottles : DS.hasMany('bottle')
 });
diff --git a/app/routes/racks.js b/app/routes/racks.js
index 4db1385fa9c1263d3d63632638004b8d7134e26f..9daacc8c814704e4e79092c7f67004bbcae00b2a 100644
--- a/app/routes/racks.js
+++ b/app/routes/racks.js
@@ -2,6 +2,5 @@ import Ember from 'ember';
 
 export default Ember.Route.extend({
    model() {
-      return this.store.findAll('rack');
- }
+      return this.store.findAll('rack', {include: 'bottles'});   }
 });
diff --git a/mirage/config.js b/mirage/config.js
index 360d8379733d6da72855ddd7d3e7b6b8d6ed9759..8ac78948fa8cd3b666d12e402773d04660c4dfd9 100644
--- a/mirage/config.js
+++ b/mirage/config.js
@@ -1,21 +1,17 @@
 export default function() {
-  // this.urlPrefix = '';    // make this `http://localhost:8080`, for example, if your API is on a different server
-  // this.namespace = '';    // make this `api`, for example, if your API is namespaced
-  // this.timing = 400;      // delay for each request, automatically set to 0 during testing
-  /*
-    Shorthand cheatsheet:
 
-    this.get('/posts');
-    this.post('/posts');
-    this.get('/posts/:id');
-    this.put('/posts/:id'); // or this.patch
-    this.del('/posts/:id');
-
-    http://www.ember-cli-mirage.com/docs/v0.2.x/shorthands/
-  */
   this.namespace = 'api';
 
-this.get('/racks',  function(schema) {
-   return schema.racks.all();
+   this.get('/racks',  function(schema) {
+      return schema.racks.all();
+   });
+   this.get('/racks/:id',  (schema, request) => {
+     return schema.racks.find(request.params.id);
+   });
+   this.get('/bottles',  function(schema) {
+      return schema.bottles.all();
+   });
+   this.get('/bottles/:id', (schema, request) => {
+     return schema.bottles.find(request.params.id);
    });
 }
diff --git a/mirage/factories/bottle.js b/mirage/factories/bottle.js
new file mode 100644
index 0000000000000000000000000000000000000000..6da8d5f583126467abc9e649c2433e58cf440850
--- /dev/null
+++ b/mirage/factories/bottle.js
@@ -0,0 +1,22 @@
+import { Factory, faker } from 'ember-cli-mirage';
+
+export default Factory.extend({
+   name: faker.list.cycle('Château Beychevelle',
+    'Ribera del Duero',
+    'Clos Fourtet St.-Emilion',
+    'Romanée Conti',
+    'Chambolle Musigny Guillon',
+    'Tenet Syrah Columbia Valley',
+    'Oddero Barolo',
+    'Gigondas Lavau',
+    'Duorum Douro',
+    'Philippe Alliet Chinon',
+    'Orin Swift Machete',
+    'Château Lagrezette',
+    'Château Puech Haut',
+    'Château Haut Bellevue'),
+   createdAt() { return new Date(); },
+   yrow() { return faker.random.number({min:1, max:3}); },
+   xcolumn() { return faker.random.number({min:3, max:20}); },
+   flipped() { return faker.random.boolean; }
+});
diff --git a/mirage/models/bottle.js b/mirage/models/bottle.js
new file mode 100644
index 0000000000000000000000000000000000000000..00373b2fe53e6c0d9a0f7b946a87f7a5e22181c9
--- /dev/null
+++ b/mirage/models/bottle.js
@@ -0,0 +1,5 @@
+import { Model, belongsTo } from 'ember-cli-mirage';
+
+export default Model.extend({
+  rack: belongsTo()
+});
diff --git a/mirage/models/rack.js b/mirage/models/rack.js
index 1486a724095b97ee02a6e6d5dd82b7f9aa1781bc..c10654fa4b3eb69402d6ec129c6bebd3490d980e 100644
--- a/mirage/models/rack.js
+++ b/mirage/models/rack.js
@@ -1,4 +1,5 @@
-import { Model } from 'ember-cli-mirage';
+import { Model, hasMany } from 'ember-cli-mirage';
 
 export default Model.extend({
+   bottles: hasMany()
 });
diff --git a/mirage/scenarios/default.js b/mirage/scenarios/default.js
index c2c2a85f7f63e5fcd23d0f0268ef3c0440bca569..b2d4ebca45b1bcb1244119edea9e486bc7bddca6 100644
--- a/mirage/scenarios/default.js
+++ b/mirage/scenarios/default.js
@@ -1,12 +1,26 @@
 export default function(server) {
-
   /*
     Seed your development database using your factories.
     This data will not be loaded in your tests.
 
     Make sure to define a factory for each model you want to create.
   */
+  let numberOfRacks = 4;
+  let numberOfBottles = 0;
 
-  // server.createList('post', 10);
-  server.createList('rack', 32);
+  let racks = server.createList('rack', numberOfRacks);
+  for (let i=0; i<numberOfRacks; i++) {
+     for (let col=0; col < racks[i].nbColumns; col++) {
+        for (let lig=0; lig < racks[i].nbRows; lig++) {
+           if (random(0,10)<5) {
+             server.create('bottle', { yrow: lig, xcolumn: col, rack: racks[i] });
+             numberOfBottles++;
+          }
+       }
+     }
+   }
+   console.log(numberOfBottles+" bottles created in "+numberOfRacks+" racks");
+  function random(min, max) {
+    return Math.floor(Math.random() * (max - min)) + min;
+  }
 }
diff --git a/tests/unit/models/bottle-test.js b/tests/unit/models/bottle-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e8407db0ded0c2cd42a4e95f38381a5a67bf396
--- /dev/null
+++ b/tests/unit/models/bottle-test.js
@@ -0,0 +1,12 @@
+import { moduleForModel, test } from 'ember-qunit';
+
+moduleForModel('bottle', 'Unit | Model | bottle', {
+  // Specify the other units that are required for this test.
+  needs: []
+});
+
+test('it exists', function(assert) {
+  let model = this.subject();
+  // let store = this.store();
+  assert.ok(!!model);
+});