diff --git a/app/experiment/views.py b/app/experiment/views.py
index d297abf805d79b5339cfde9f04cab73017747517..c0283881e1c9bec3db5372282b152dc54fe62cae 100644
--- a/app/experiment/views.py
+++ b/app/experiment/views.py
@@ -306,7 +306,7 @@ def view_forced_id_list():
             db.session.add(input_id)
             db.session.commit()
         
-        return redirect(url_for('view_forced_id_list', exp_id=exp_id))
+        return redirect(url_for('experiment.view_forced_id_list', exp_id=exp_id))
     
     return render_template('view_forced_id_list.html', exp_id=exp_id, id_list=id_list)
 
diff --git a/app/static/css/main.css b/app/static/css/main.css
index efc6260167dc9116c0c496392121b096c60de2b6..3efaa8adf059cc6b9d5ef51d38dac232161f8e5a 100644
--- a/app/static/css/main.css
+++ b/app/static/css/main.css
@@ -18,4 +18,8 @@ body {
     margin: 0 auto;
     margin-bottom: 30px;
     
+}
+
+.clear-button {
+    margin:10px;
 }
\ No newline at end of file
diff --git a/app/static/js/canvas.js b/app/static/js/canvas.js
index b01079b689e86ab982cdc03245ffa2697596bf6a..7b084dd5b1051a443860b170aaf3eb24f8c3e4dc 100644
--- a/app/static/js/canvas.js
+++ b/app/static/js/canvas.js
@@ -1,24 +1,49 @@
 
 
+const url = 'http://127.0.0.1:8000/';
+
 $(document).ready(function() {
 
+    try {
+        var canvas = $("#embody-canvas")
+        var context = document.getElementById("embody-canvas").getContext("2d");
 
-    $("#canvas-data").val("hello world");
-    var canvas = $("#embody-canvas")
-    var context = document.getElementById("embody-canvas").getContext("2d");
+        // Base image
+        var img = document.getElementById("baseImage");
 
+        console.log(img)
+        console.log(canvas)
+    } catch (e) {
+        console.log(e)
+        if (e instanceof TypeError) {
+            return
+        }
+    }
+
+    // Init draw variables
+    var clickX = new Array();
+    var clickY = new Array();
+    var clickDrag = new Array();
+    var paint;
+    var drawRadius=15;
+
+    // Click handlers
     canvas.mousedown(function(e){
         var mouseX = e.pageX - this.offsetLeft;
         var mouseY = e.pageY - this.offsetTop;
-              
         paint = true;
-        addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop);
-        redraw();
+
+        if (pointInsideBaseImage([mouseX, mouseY])) {
+            addClick(mouseX, mouseY);
+            redraw();
+        }
     });
 
     canvas.mousemove(function(e){
-        if(paint){
-          addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, true);
+        var mouseX = e.pageX - this.offsetLeft;
+        var mouseY = e.pageY - this.offsetTop;
+        if(paint && pointInsideBaseImage([mouseX, mouseY])){
+          addClick(mouseX, mouseY, true);
           redraw();
         }
     });
@@ -31,16 +56,10 @@ $(document).ready(function() {
         paint = false;
     });
 
-    var clickX = new Array();
-    var clickY = new Array();
-    var clickDrag = new Array();
-    var paint;
-    var drawRadius=15;
-
     // TODO: changing drawradius doesnt affect to the saved datapoints !!!
     // Bigger brush should make more datapoints compared to smaller ones.
     $(".canvas-container").bind('DOMMouseScroll',function(event) {
-        event.preventDefault()
+        //event.preventDefault()
 
         // Change brush size
         if (event.originalEvent.detail >= 0){
@@ -63,13 +82,20 @@ $(document).ready(function() {
         }
     })
 
-    function addClick(x, y, dragging)
+    $(".clear-button").on('click', function() {
+        clearCanvas()
+    })
+
+    $(".next-page").click(function() {
+        saveData()
+    })
+
+
+    // Draw methods
+    function addClick(x, y, dragging=false)
     {
         clickX.push(x);
         clickY.push(y);
-
-        // ClickDrag array is unnecessary beacause all the coordinates are saved to
-        // X & Y -arrays
         clickDrag.push(dragging);
     }
 
@@ -79,6 +105,26 @@ $(document).ready(function() {
         context.fill()
     }
 
+    function isWhite(color) {
+        if (color === 255) 
+            return true
+        return false
+    }
+
+    // Method for checking if cursor is inside human body before creating brush stroke
+    function pointInsideBaseImage(point) {
+        var imageData = context.getImageData(point[0], point[1],1,1)
+
+        startR = imageData.data[0];
+        startG = imageData.data[1];
+        startB = imageData.data[2];
+
+        if (isWhite(startB) && isWhite(startG) && isWhite(startR)) {
+            return false;
+        }
+
+        return true;
+    }
 
     function redraw(){
 
@@ -105,13 +151,6 @@ $(document).ready(function() {
 
         // Draw circle with gradient
         drawPoint(lastX, lastY, drawRadius)
-        /*
-        drawPoint(lastX + 3, lastY, drawRadius)
-        drawPoint(lastX - 3, lastY, drawRadius)
-        drawPoint(lastX, lastY + 3, drawRadius)
-        drawPoint(lastX, lastY - 3, drawRadius)
-        */
-        drawMaskToBaseImage()
 
         /*
         OLD version, where line is drawn continuously (not needed probably)
@@ -131,9 +170,9 @@ $(document).ready(function() {
             context.stroke();
         }
         */
-
     }
 
+    // This is not needed, because canvas dont allow to draw on white points (mask points)
     function drawMaskToBaseImage()
     {
         var img = document.getElementById("baseImageMask");
@@ -143,9 +182,8 @@ $(document).ready(function() {
 
     function drawBaseImage()
     {
-        var img = document.getElementById("baseImage");
-        var width = img.clientWidth;
-        var height = img.clientHeight;
+        var width = img.width;
+        var height = img.height;
 
         context.canvas.height = height
         context.canvas.width = width
@@ -153,6 +191,34 @@ $(document).ready(function() {
         img.classList.add("hidden")
     }
 
+    function clearCanvas() {
+        // Clear canvas
+        img.classList.remove("hidden")
+        context.clearRect(0, 0, context.canvas.width, context.canvas.height);
+        drawBaseImage()
+
+        // Remove saved coordinates
+        clickX = []
+        clickY = []
+        clickDrag = []
+    }
+
+    function saveData() {
+
+        var points = {
+            x: clickX,
+            y: clickY
+        }
+
+        points = JSON.stringify(points)
+
+        console.log(points)
+
+        $("#canvas-data").val(points);
+        $("#canvas-form").submit();
+
+    }
+
     drawBaseImage()
 
 });
\ No newline at end of file
diff --git a/app/task/templates/task.html b/app/task/templates/task.html
index 5ea8239dc57dd60a2da2bf4f5d226521649910fe..c2044d628e040707739186a4fea3d974f035078c 100644
--- a/app/task/templates/task.html
+++ b/app/task/templates/task.html
@@ -105,14 +105,18 @@
 
   <img id="baseImage" class="" src={{ url_for('static', filename='img/dummy_600.png') }} />
   <img id="baseImageMask" class="hidden" src={{ url_for('static', filename='img/dummy_600_mask.png') }} />
-  <form class="form-group mt-5" action="/task/embody/{{ page_num }}" method="post">
+  <form id="canvas-form" class="form-group mt-5" action="/task/embody/{{ page_num }}" method="post">
 
-    <input id="canvas-data" type="hidden" value="" name="text">
+    <input id="canvas-data" type="hidden" value="" name="coordinates">
+
+    <div class="row justify-content-md-center">
+    <button type="button" class="btn btn-primary clear-button">Clear</button>
+    </div>
 
     <div class="form-row text-center">
-        <div class="col-12">
+        <div class="centered col-12">
             <a class="btn btn-primary" href={{ url_for('task.quit') }} role="button">{{ _('Quit task') }}</a>
-            <button type="submit" class="btn btn-primary">{{ _('Next page') }}</button>
+            <button type="button" class="btn btn-primary next-page">{{ _('Next page') }}</button>
         </div>
         <div class="col-12">
             <br>
diff --git a/app/task/views.py b/app/task/views.py
index 9b779454d8ff669ba26d615907780ce0eb3bc686..d4204417a0b63a79d4ac76b84288f21e91fabff6 100644
--- a/app/task/views.py
+++ b/app/task/views.py
@@ -2,6 +2,7 @@
 
 
 import math
+import json
 from datetime import datetime
 
 from flask import (
@@ -95,9 +96,15 @@ def task_embody(page_num):
 
     if form.validate():
         data = request.form.to_dict()
-        for key, value in data.items():
-            print(key)
-            print(value)
+
+        coordinates = json.loads(data['coordinates'])
+        print("x:",coordinates['x'])
+        print("y:",coordinates['y'])
+
+
+
+    # Test that everything OK
+    return json.dumps(coordinates)
 
     # Check if there are unanswered slider questions
     if slider_question_has_answers(session['user'], page_id):
@@ -265,7 +272,7 @@ def continue_task():
         #If participant has done just the registration redirect to the first page of the experiment        
         if participant.answer_counter == 0:
             #flash("Ei vastauksia ohjataan ekalle sivulle")
-            return redirect( url_for('task', page_num=1))
+            return redirect( url_for('task.task', page_num=1))
         
         
         redirect_to_page = participant.answer_counter + 1
diff --git a/create_rating_db.txt b/create_rating_db.txt
deleted file mode 100644
index 7d522481ad7afd6ba9d2f31d51ec7a22ae50d379..0000000000000000000000000000000000000000
--- a/create_rating_db.txt
+++ /dev/null
@@ -1,119 +0,0 @@
-CREATE TABLE background_question (
-	idbackground_question INTEGER NOT NULL AUTO_INCREMENT,
-	background_question VARCHAR(120), 
-	experiment_idexperiment INTEGER, 
-	PRIMARY KEY (idbackground_question)
-);
-CREATE TABLE experiment (
-	idexperiment INTEGER NOT NULL AUTO_INCREMENT,
-	name VARCHAR(120), 
-	instruction MEDIUMTEXT, 
-	directoryname VARCHAR(120), 
-	language VARCHAR(120), 
-	status VARCHAR(120), 
-	randomization VARCHAR(120), 
-	short_instruction MEDIUMTEXT, 
-	single_sentence_instruction MEDIUMTEXT, 
-	is_archived VARCHAR(120), 
-	creator_name VARCHAR(120), 
-	research_notification_filename VARCHAR(120), 
-	creation_time DATETIME, 
-	stimulus_size VARCHAR(120), 
-	consent_text MEDIUMTEXT, 
-	use_forced_id VARCHAR(120), 
-	PRIMARY KEY (idexperiment)
-);
-CREATE TABLE trial_randomization (
-	idtrial_randomization INTEGER NOT NULL AUTO_INCREMENT, 
-	page_idpage INTEGER, 
-	randomized_idpage INTEGER, 
-	answer_set_idanswer_set INTEGER, 
-	experiment_idexperiment INTEGER, 
-	PRIMARY KEY (idtrial_randomization)
-);
-CREATE TABLE user (
-	id INTEGER NOT NULL AUTO_INCREMENT, 
-	username VARCHAR(64), 
-	email VARCHAR(120), 
-	password_hash VARCHAR(128), 
-	PRIMARY KEY (id)
-);
-INSERT INTO user VALUES(1,'Yngwie',NULL,'pbkdf2:sha256:50000$QioS5ICE$17a468394e72aef1243576aa80d29c296c6482ada48be9d25bd7c3b6e8129b40');
-CREATE TABLE answer_set (
-	idanswer_set INTEGER NOT NULL AUTO_INCREMENT, 
-	experiment_idexperiment INTEGER, 
-	session VARCHAR(120), 
-	agreement VARCHAR(120), 
-	answer_counter INTEGER, 
-	registration_time DATETIME, 
-	last_answer_time DATETIME, 
-	PRIMARY KEY (idanswer_set), 
-	FOREIGN KEY(experiment_idexperiment) REFERENCES experiment (idexperiment)
-);
-CREATE TABLE background_question_option (
-	idbackground_question_option INTEGER NOT NULL AUTO_INCREMENT,
-	background_question_idbackground_question INTEGER, 
-	option VARCHAR(120), 
-	PRIMARY KEY (idbackground_question_option), 
-	FOREIGN KEY(background_question_idbackground_question) REFERENCES background_question (idbackground_question)
-);
-CREATE TABLE forced_id (
-	idforced_id INTEGER NOT NULL AUTO_INCREMENT,
-	experiment_idexperiment INTEGER, 
-	pregenerated_id VARCHAR(120), 
-	PRIMARY KEY (idforced_id), 
-	FOREIGN KEY(experiment_idexperiment) REFERENCES experiment (idexperiment)
-);
-CREATE TABLE page (
-	idpage INTEGER NOT NULL AUTO_INCREMENT,
-	experiment_idexperiment INTEGER, 
-	type VARCHAR(120), 
-	text VARCHAR(120), 
-	media VARCHAR(120), 
-	PRIMARY KEY (idpage), 
-	FOREIGN KEY(experiment_idexperiment) REFERENCES experiment (idexperiment)
-);
-CREATE TABLE question (
-	idquestion INTEGER NOT NULL AUTO_INCREMENT,
-	experiment_idexperiment INTEGER, 
-	question VARCHAR(120), 
-	`left` VARCHAR(120), 
-	`right` VARCHAR(120), 
-	PRIMARY KEY (idquestion), 
-	FOREIGN KEY(experiment_idexperiment) REFERENCES experiment (idexperiment)
-);
-CREATE TABLE answer (
-	idanswer INTEGER NOT NULL AUTO_INCREMENT,
-	question_idquestion INTEGER, 
-	answer_set_idanswer_set INTEGER, 
-	answer VARCHAR(120), 
-	page_idpage INTEGER, 
-	PRIMARY KEY (idanswer), 
-	FOREIGN KEY(answer_set_idanswer_set) REFERENCES answer_set (idanswer_set), 
-	FOREIGN KEY(page_idpage) REFERENCES page (idpage), 
-	FOREIGN KEY(question_idquestion) REFERENCES question (idquestion)
-);
-CREATE TABLE background_question_answer (
-	idbackground_question_answer INTEGER NOT NULL AUTO_INCREMENT,
-	answer_set_idanswer_set INTEGER, 
-	answer VARCHAR(120), 
-	background_question_idbackground_question INTEGER, 
-	PRIMARY KEY (idbackground_question_answer), 
-	FOREIGN KEY(answer_set_idanswer_set) REFERENCES answer_set (idanswer_set), 
-	FOREIGN KEY(background_question_idbackground_question) REFERENCES background_question (idbackground_question)
-);
-CREATE INDEX ix_experiment_consent_text ON experiment (consent_text);
-CREATE INDEX ix_experiment_creation_time ON experiment (creation_time);
-CREATE UNIQUE INDEX ix_experiment_directoryname ON experiment (directoryname);
-CREATE INDEX ix_experiment_instruction ON experiment (instruction);
-CREATE INDEX ix_experiment_name ON experiment (name);
-CREATE INDEX ix_experiment_short_instruction ON experiment (short_instruction);
-CREATE INDEX ix_experiment_single_sentence_instruction ON experiment (single_sentence_instruction);
-CREATE UNIQUE INDEX ix_user_email ON user (email);
-CREATE UNIQUE INDEX ix_user_username ON user (username);
-CREATE INDEX ix_answer_set_last_answer_time ON answer_set (last_answer_time);
-CREATE INDEX ix_answer_set_registration_time ON answer_set (registration_time);
-CREATE INDEX ix_page_media ON page (media);
-CREATE INDEX ix_page_text ON page (text);
-CREATE INDEX ix_page_type ON page (type);
-