diff --git a/config/db.js b/config/db.js
index 530771f8cd7dd998c069fa22fde4fef14390b32d..e84f81671d982fdc6fa3d3869b6eef70747b9249 100644
--- a/config/db.js
+++ b/config/db.js
@@ -1,4 +1,4 @@
 const mongoose = require('mongoose');
-mongoose.createConnection('mongodb://localhost/tracker-q728j6');
+mongoose.connect('mongodb://localhost/tracker-q728j6', { useMongoClient: true });
 
 module.exports = mongoose;
diff --git a/middleware/common.js b/middleware/common.js
new file mode 100644
index 0000000000000000000000000000000000000000..4305153b4bf832fe4c4ec6c00683ffd76122f521
--- /dev/null
+++ b/middleware/common.js
@@ -0,0 +1,8 @@
+requireOption = (objectRepository, propertyName) => {
+  if (objectRepository && objectRepository[propertyName]) {
+    return objectRepository[propertyName];
+  }
+  throw new TypeError(propertyName + ' required');
+}
+
+module.exports.requireOption = requireOption;
diff --git a/middleware/episode/deleteEpisode.js b/middleware/episode/deleteEpisode.js
index cf38378595ccfc3e9eb1aa9879503612cbdee38e..b85875cca78a764434f91cb975c5e08b87906f2c 100644
--- a/middleware/episode/deleteEpisode.js
+++ b/middleware/episode/deleteEpisode.js
@@ -1,11 +1,14 @@
+const requireOption = require('../common').requireOption;
+const ObjectId = require('mongoose').Types.ObjectId;
 /**
  * Deletes an episode with the :episodeId id if exists
  *
 */
 module.exports = (objectRepository) => {
+  const episodeModel = requireOption(objectRepository, 'episodeModel');
   return (req, res, next) => {
-
-
-    return next();
+    episodeModel.findByIdAndRemove(new ObjectId(req.params.episodeId))
+      .then(() => next())
+      .catch(err => next(err))
   };
 };
diff --git a/middleware/episode/getEpisode.js b/middleware/episode/getEpisode.js
index 6891a1d76c9b5383e155bf9e0e4b504aec3d1e93..b3159570beb2aff655a069828ce8c594f4822f2c 100644
--- a/middleware/episode/getEpisode.js
+++ b/middleware/episode/getEpisode.js
@@ -1,11 +1,21 @@
+const requireOption = require('../common').requireOption;
+const ObjectId = require('mongoose').Types.ObjectId;
 /**
  * Returns an episode with the :episodeId id and put it in res.tpl.episode
  *
 */
 module.exports = (objectRepository) => {
+  const episodeModel = requireOption(objectRepository, 'episodeModel');
   return (req, res, next) => {
-
-
-    return next();
+    episodeModel.findById(new ObjectId(req.params.episodeId))
+      .then(episode => {
+        if (episode) {
+          res.tpl.episode = episode;
+          return next();
+        } else {
+          res.redirect('/series')
+        }
+      })
+      .catch(err => next(err))
   };
 };
diff --git a/middleware/episode/getEpisodes.js b/middleware/episode/getEpisodes.js
index 19d56b6609e4bfac9084235aeaa226b766185714..f65da5bf343a9758b4114c1a596a3cc594537b69 100644
--- a/middleware/episode/getEpisodes.js
+++ b/middleware/episode/getEpisodes.js
@@ -1,11 +1,22 @@
+const requireOption = require('../common').requireOption;
+const ObjectId = require('mongoose').Types.ObjectId;
 /**
  * Returns all the episodes for a given serie with :id and puts the list on res.tpl.episodes
  *
 */
 module.exports = (objectRepository) => {
+  const episodeModel = requireOption(objectRepository, 'episodeModel');
   return (req, res, next) => {
-
-
-    return next();
+    episodeModel.find({ serie: new ObjectId(req.params.id )})
+      .then(episodes => {
+        if (episodes) {
+          res.tpl.serie.episodes = episodes;
+          next();
+        } else {
+          res.tpl.serie.episodes = [];
+          next();
+        }
+      })
+      .catch(err => next(err));
   };
 };
diff --git a/middleware/episode/postEpisode.js b/middleware/episode/postEpisode.js
index e7deb78cc1a66cbc4c4c289a360328fab03e702a..0e31b6ae5f3e222cb5169ffae3e4958cfdbe0527 100644
--- a/middleware/episode/postEpisode.js
+++ b/middleware/episode/postEpisode.js
@@ -1,11 +1,29 @@
+const requireOption = require('../common').requireOption;
+const ObjectId = require('mongoose').Types.ObjectId;
 /**
  * Creates a new episode for the serie with :id id with the data provided
  *
 */
 module.exports = (objectRepository) => {
+  const episodeModel = requireOption(objectRepository, 'episodeModel');
   return (req, res, next) => {
+    const { title, count, seen, rating } = req.body;
+    if (title === undefined || count === undefined || seen === undefined || rating === undefined) {
+      return next();
+    }
+    const serieId = new ObjectId(req.params.id);
+    const episode = new episodeModel({
+      title,
+      count,
+      seen,
+      rating,
+      serie: serieId
+    });
 
-
-    return next();
+    episode.save()
+      .then(episode => {
+        return next();
+      })
+      .catch(err => next(err))
   };
 };
diff --git a/middleware/episode/updateEpisode.js b/middleware/episode/updateEpisode.js
index 727e930f1c8763bb3e6e7d30834681046ecf34c2..777338bb5a6f0dd749045808f569e25e1864f582 100644
--- a/middleware/episode/updateEpisode.js
+++ b/middleware/episode/updateEpisode.js
@@ -1,11 +1,32 @@
+const requireOption = require('../common').requireOption;
 /**
  * Updates the episode with :episodeId id with the data provided
  *
 */
 module.exports = (objectRepository) => {
+  const episodeModel = requireOption(objectRepository, 'episodeModel');
   return (req, res, next) => {
+    const { title, count, seen, rating } = req.body;
+    if (title === undefined || count === undefined || seen === undefined || rating === undefined) {
+      return next();
+    }
 
+    let episode;
+    if (res.tpl.episode !== undefined) {
+      episode = res.tpl.episode;
+    } else {
+      episode = new episodeModel();
+    }
 
-    return next();
+    episode.title = title;
+    episode.count = count;
+    episode.seen = seen;
+    episode.rating = rating;
+
+    episode.save()
+      .then(episode => {
+        return next();
+      })
+      .catch(err => next(err))
   };
 };
diff --git a/middleware/generic/render.js b/middleware/generic/render.js
index 6939a470d314fca1925285a7bfb0f62416ffcf95..77b58d6dd01fd3c86ffca262178c1c5e9eae94cd 100644
--- a/middleware/generic/render.js
+++ b/middleware/generic/render.js
@@ -4,6 +4,6 @@
 */
 module.exports = (objectRepository, view) => {
   return (req, res) => {
-    res.end(`Render: ${view}`);
+    res.render(view, res.tpl);
   };
 };
diff --git a/middleware/serie/deleteSerie.js b/middleware/serie/deleteSerie.js
index a0e24ddeabd66815ee3b79c05d6fbf8cfe02b5c8..4688fc6f2966c0755e62e71f3dd38eda99a625b6 100644
--- a/middleware/serie/deleteSerie.js
+++ b/middleware/serie/deleteSerie.js
@@ -1,11 +1,14 @@
+const requireOption = require('../common').requireOption;
+const ObjectId = require('mongoose').Types.ObjectId;
 /**
  * Deletes a serie with given :id if exists
  *
 */
 module.exports = (objectRepository) => {
+  const serieModel = requireOption(objectRepository, 'serieModel');
   return (req, res, next) => {
-
-
-    return next();
+    serieModel.findByIdAndRemove(new ObjectId(req.params.id))
+      .then(() => next())
+      .catch(err => next(err))
   };
 };
diff --git a/middleware/serie/getSerie.js b/middleware/serie/getSerie.js
index b0b0292db2df071e7c779cf969e9082d7ddf8cad..7d5d287c6fa25c5df5a131d8b6b9f9c47752dcff 100644
--- a/middleware/serie/getSerie.js
+++ b/middleware/serie/getSerie.js
@@ -1,11 +1,21 @@
+const requireOption = require('../common').requireOption;
+const ObjectId = require('mongoose').Types.ObjectId;
 /**
  * Returns the serie with :id id and put it in res.tpl.serie
  *
 */
 module.exports = (objectRepository) => {
+  const serieModel = requireOption(objectRepository, 'serieModel');
   return (req, res, next) => {
-
-
-    return next();
+    serieModel.findById(new ObjectId(req.params.id))
+      .then(serie => {
+        if (serie) {
+          res.tpl.serie = serie;
+          return next();
+        } else {
+          res.redirect('/series')
+        }
+      })
+      .catch(err => next(err))
   };
 };
diff --git a/middleware/serie/getSeries.js b/middleware/serie/getSeries.js
index f3e43a7a0012b284f8901bfed339899ffb610c96..5d9e143fab5d60b6f5f4e062e78d8bb3702330ea 100644
--- a/middleware/serie/getSeries.js
+++ b/middleware/serie/getSeries.js
@@ -1,11 +1,21 @@
+const requireOption = require('../common').requireOption;
 /**
  * Returns all series in the database and puts the list on res.tpl.series
  *
 */
 module.exports = (objectRepository) => {
+  const serieModel = requireOption(objectRepository, 'serieModel');
   return (req, res, next) => {
-
-
-    return next();
+    serieModel.find()
+      .then(series => {
+        if (series) {
+          res.tpl.series = series;
+          return next();
+        } else {
+          res.tpl.series = [];
+          return next();
+        }
+      })
+      .catch(err => next(err))
   };
 };
diff --git a/middleware/serie/postSerie.js b/middleware/serie/postSerie.js
index a88938bc682fb67295138ea0909efe38a486fe66..102f5e836b1066d0d6c4cb6c4b27a079bb89cb4b 100644
--- a/middleware/serie/postSerie.js
+++ b/middleware/serie/postSerie.js
@@ -1,11 +1,26 @@
+const requireOption = require('../common').requireOption;
 /**
  * Creates a new serie with the data provided
  *
 */
 module.exports = (objectRepository) => {
+  const serieModel = requireOption(objectRepository, 'serieModel');
   return (req, res, next) => {
+    const { title, image, description, progress } = req.body;
+    if (title === undefined || image === undefined || description === undefined || progress === undefined) {
+      return next();
+    }
+    const serie = new serieModel({
+      title,
+      image,
+      description,
+      progress
+    });
 
-
-    return next();
+    serie.save()
+      .then(serie => {
+        return next();
+      })
+      .catch(err => next(err))
   };
 };
diff --git a/middleware/serie/postSeries.js b/middleware/serie/postSeries.js
deleted file mode 100644
index a88938bc682fb67295138ea0909efe38a486fe66..0000000000000000000000000000000000000000
--- a/middleware/serie/postSeries.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Creates a new serie with the data provided
- *
-*/
-module.exports = (objectRepository) => {
-  return (req, res, next) => {
-
-
-    return next();
-  };
-};
diff --git a/middleware/serie/updateSerie.js b/middleware/serie/updateSerie.js
index ed9adb1022d5e4b6cc9e879077743fcd39312dce..c8046da454c1234ee08f1c2ae6465a9685919a2f 100644
--- a/middleware/serie/updateSerie.js
+++ b/middleware/serie/updateSerie.js
@@ -1,11 +1,32 @@
+const requireOption = require('../common').requireOption;
 /**
  * Updates the serie with :id id with the data provided
  *
 */
 module.exports = (objectRepository) => {
+  const serieModel = requireOption(objectRepository, 'serieModel');
   return (req, res, next) => {
+    const { title, image, description, progress } = req.body;
+    if (title === undefined || image === undefined || description === undefined || progress === undefined) {
+      return next();
+    }
 
+    let serie;
+    if (res.tpl.serie !== undefined) {
+      serie = res.tpl.serie;
+    } else {
+      serie = new serieModel()
+    }
 
-    return next();
+    serie.title = title;
+    serie.image = image;
+    serie.description = description;
+    serie.progress = progress;
+
+    serie.save()
+      .then(serie => {
+        return next();
+      })
+      .catch(err => next(err))
   };
 };
diff --git a/models/episode.js b/models/episode.js
index f2cb13262221b45fd90995a16f89f8cedd65a3fc..07676b53932a68a310f92de66081918506547262 100644
--- a/models/episode.js
+++ b/models/episode.js
@@ -6,7 +6,7 @@ const Episode = db.model('Episode', {
   count: Number,
   seen: String,
   rating: Number,
-  _assignedto: {
+  serie: {
     type: Schema.Types.ObjectId,
     ref: 'Serie'
   },
diff --git a/routes/index.js b/routes/index.js
index 1c74bb1011a6ffe412945fd0dcd97e1378d23df6..a2eddcc9b9beb5cea423317171a2563aecc7e47b 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -1,7 +1,7 @@
 const renderMW = require('../middleware/generic/render');
 const getSeriesMW = require('../middleware/serie/getSeries');
 const getSerieMW = require('../middleware/serie/getSerie');
-const postSerieMW = require('../middleware/serie/postSeries');
+const postSerieMW = require('../middleware/serie/postSerie');
 const updateSerieMW = require('../middleware/serie/updateSerie');
 const deleteSerieMW = require('../middleware/serie/deleteSerie');
 const getEpisodesMW = require('../middleware/episode/getEpisodes');
@@ -40,7 +40,7 @@ module.exports = (app) => {
   app.post('/series',
     postSerieMW(objectRepository),
     (req, res, next) => (
-      res.redirect('/series')
+      res.redirect(`/series/${res.tpl.id}`)
     )
   );
 
@@ -53,8 +53,6 @@ module.exports = (app) => {
   );
 
   app.delete('/series/:id',
-    getSerieMW(objectRepository),
-    getEpisodesMW(objectRepository),
     deleteSerieMW(objectRepository),
     (req, res, next) => (
       res.redirect('/series')
@@ -70,13 +68,11 @@ module.exports = (app) => {
   );
 
   app.get('/series/:id/episode/:episodeId/edit',
-    getSerieMW(objectRepository),
     getEpisodeMW(objectRepository),
     renderMW(objectRepository, 'episodeEdit')
   );
 
   app.post('/series/:id',
-    getSerieMW(objectRepository),
     postEpisodeMW(objectRepository),
     (req, res, next) => (
       res.redirect(`/series/${req.params.id}`)
@@ -84,7 +80,6 @@ module.exports = (app) => {
   );
 
   app.put('/series/:id/episode/:episodeId',
-    getSerieMW(objectRepository),
     getEpisodeMW(objectRepository),
     updateEpisodeMW(objectRepository),
     (req, res, next) => (
@@ -93,8 +88,6 @@ module.exports = (app) => {
   );
 
   app.delete('/series/:id/episode/:episodeId',
-    getSerieMW(objectRepository),
-    getEpisodeMW(objectRepository),
     deleteEpisodeMW(objectRepository),
     (req, res, next) => (
       res.redirect(`/series/${req.params.id}`)
diff --git a/views/serie.ejs b/views/serie.ejs
index b0446dc55d8a300efd645e2a3713aecdb82d7b0a..b3737ec6eadcaa0dbd2fa7308a09b59eaf4420f0 100644
--- a/views/serie.ejs
+++ b/views/serie.ejs
@@ -27,7 +27,7 @@
                   </a>
                 </div>
                 <div class="description">
-                  <% stars.forEach(star => {
+                  <% stars.forEach(star => { %>
                     <% if (star.isFull) { %>
                       <i class="star icon"></i>
                     <% } else { %>