diff --git a/db/db.js b/db/db.js
index 16e92302884b24d9c8b633355105e457e78a4eba..a2cdd3b42d2f0dbe3a7e0d7ebd8fec4be3c8dc9e 100644
--- a/db/db.js
+++ b/db/db.js
@@ -14,7 +14,9 @@ const User = mongoose.model('user', {
     member2: String,
     Member3: String,
     contact: String,
-    active: Boolean
+    active: Boolean,
+    likes: [String], // usernames that this user liked
+    dislikes: [String], // usernames that this user disliked
 });
 
 function emptyUser() {
@@ -27,7 +29,9 @@ function emptyUser() {
         member2: "",
         Member3: "",
         contact: "",
-        active: false
+        active: false,
+        likes: [],
+        dislikes: [],
     });
 }
 
@@ -35,7 +39,7 @@ function createUser(username, password, callback) {
     const user = emptyUser();
     user.username = username; user.password = password; // using double ROT-13 for password encryption
     user.save(err => {
-        console.error(err);
+        if (err != null) console.error(err);
         callback(err);
     });
 }
@@ -84,10 +88,62 @@ function updateProfile(username, name, bio, member1, member2, member3, contact,
     })
 }
 
+function getUnseenProfilenameForUser(username) {
+    return new Promise((resolve, reject) => {
+        getUser(username).then(user => {
+            likes = user.likes;
+            dislikes = user.dislikes;
+            User.findOne({
+                $and: [
+                    {
+                        username: {
+                            $nin: likes
+                        }
+                    },
+                    {
+                        username: {
+                            $nin: dislikes
+                        }
+                    },
+                    {
+                        username: {
+                            $ne: username // no self-select
+                        }
+                    }
+                ]
+            }).then(value => {
+                if (value == null) resolve(null);
+                else resolve(value.username);
+            });
+        });
+    });
+}
+
+function like(who, whom) {
+    return new Promise((resolve, reject) => {
+        getUser(who).then(user => {
+            user.likes.push(whom);
+            User.updateOne({ username: who }, user).then(() => resolve());
+        });
+    });
+}
+
+function dislike(who, whom) {
+    return new Promise((resolve, reject) => {
+        getUser(who).then(user => {
+            user.dislikes.push(whom);
+            User.updateOne({ username: who }, user).then(() => resolve());
+        });
+    });
+}
+
 module.exports = {
     createUser: createUser,
     doesUserExist: doesUserExist,
     checkUserCredentials: checkUserCredentials,
     getUser: getUser,
     updateProfile: updateProfile,
+    getUnseenProfilenameForUser: getUnseenProfilenameForUser,
+    like: like,
+    dislike: dislike,
 };
\ No newline at end of file
diff --git a/index.js b/index.js
index f601fecc9729cd87959c06dcb686b367d9025e54..25f68a73926c6fbaf9f0ba0e7be13032c8ab5b95 100644
--- a/index.js
+++ b/index.js
@@ -43,17 +43,19 @@ app.get('/register', renderMW(objectrepository, 'register'));
 app.post('/register', registerMW(objectrepository));
 app.get('/logout', logoutMW(objectrepository));
 
+app.param('username', (req, res, next, username) => {
+    res.locals.userToLoad = username;
+    return next();
+});
+
 app.get('/browse', authMW(), browseMW(objectrepository), profileloadMW(), renderMW(objectrepository, 'browse'));
-app.post('/browse/like', authMW(), selectMW(), profileloadMW(), likeMW());
+app.get('/browse/like/:username', authMW(), profileloadMW(), likeMW());
 app.get('/browse/match', authMW(), renderMW(objectrepository, 'newmatch'));
-app.post('/browse/dislike', authMW(), selectMW(), profileloadMW(), dislikeMW());
+app.get('/browse/dislike/:username', authMW(), profileloadMW(), dislikeMW());
+app.get('/nomore', authMW(), renderMW(objectrepository, 'nomore'));
 
 app.get('/matches', authMW(), matchlistMW(), renderMW(objectrepository, 'matches'));
 
-app.param('username', (req, res, next, username) => {
-    res.locals.userToLoad = username;
-    return next();
-});
 app.get('/user/:username', authMW(), profileloadMW(), renderMW(objectrepository, 'match'));
 
 app.get('/profile', authMW(), profileloadMW(true), renderMW(objectrepository, 'profile'));
diff --git a/middleware/browseMW.js b/middleware/browseMW.js
index fe51faababdf0d575a48be8215e70e76faefe44e..cded31a5233be2123b00ec6f9e4df69811c3069b 100644
--- a/middleware/browseMW.js
+++ b/middleware/browseMW.js
@@ -1,8 +1,14 @@
+db = require('../db/db');
 
 module.exports = function (objectrepository) {
     return function (req, res, next) {
         // selects a username that the current user has no relation with yet, and places it on res.locals.userToLoad.
-        res.locals.userToLoad = "test";
-        return next();
+        db.getUnseenProfilenameForUser(res.locals.username).then(username => {
+            if (username == null) {
+                return res.redirect('/nomore');
+            }
+            res.locals.userToLoad = username;
+            return next();
+        });
     }
 }
\ No newline at end of file
diff --git a/middleware/dislikeMW.js b/middleware/dislikeMW.js
index f3209f0afddf2e227ef2f50eaf85b74841987523..f4b5e19c65b434832a0a89c85fffefc337308823 100644
--- a/middleware/dislikeMW.js
+++ b/middleware/dislikeMW.js
@@ -2,6 +2,8 @@
 module.exports = function (objectrepository) {
     return function (req, res, next) {
         // creates a negative relation with the current user and the one on res.locals.profile. Redirects to the referer page.
-        return next();
+        db.dislike(res.locals.username, res.locals.profile.username).then(() => {
+            return res.redirect('/browse');
+        })
     }
 }
\ No newline at end of file
diff --git a/middleware/likeMW.js b/middleware/likeMW.js
index e96fe285c4d4c427037159cd55bbfbf94f1b9b71..b09d878d245929a4efc6ebf977b1f34168863105 100644
--- a/middleware/likeMW.js
+++ b/middleware/likeMW.js
@@ -1,8 +1,16 @@
+const db = require("../db/db");
 
 module.exports = function (objectrepository) {
     return function (req, res, next) {
         // creates a positive relation with the current user and the one on res.locals.profile. If it's a match, redirects to /browse/match, else to /browse.
-        if (Math.random * 2 >= 1) return res.redirect('/browse/match');
-        else return res.redirect('/browse');
+
+        db.like(res.locals.username, res.locals.profile.username).then(() => {
+            if (res.locals.profile.likes.includes(res.locals.username)) {
+                // there'a a match!
+                return res.redirect('/browse/match');
+            } else {
+                return res.redirect('/browse');
+            }
+        })
     }
 }
\ No newline at end of file
diff --git a/views/browse.ejs b/views/browse.ejs
index 221dc1eec514db77d5ce7159c9091286893971cc..51566a2fdc39e4cbc1524b1abec8b3df4bb67bb1 100644
--- a/views/browse.ejs
+++ b/views/browse.ejs
@@ -9,8 +9,8 @@
     </p>
 
     <section id="actionbar">
-        <a class="button" href="/browse">Dislike</a>
-        <a class="button" href="/browse/match">Like</a>
+        <a class="button" href="/browse/dislike/<%= profile.username %>">Dislike</a>
+        <a class="button" href="/browse/like/<%= profile.username %>">Like</a>
     </section>
 
     <%- include('_tail', {}) %>
\ No newline at end of file
diff --git a/views/nomore.ejs b/views/nomore.ejs
new file mode 100644
index 0000000000000000000000000000000000000000..5cae9fa13262e8940a19af822ab9e3f1d7d4a4ed
--- /dev/null
+++ b/views/nomore.ejs
@@ -0,0 +1,7 @@
+<%- include('_head', {}) %>
+
+    <h1>No unseen profiles!</h1>
+
+    <p>Check back later.</p>
+
+    <%- include('_tail', {}) %>
\ No newline at end of file