diff --git a/smash/web/forms/worker_form.py b/smash/web/forms/worker_form.py
index 43f28958daee1ca1e839ce3ef8123c972aefe61d..dd898c17a444df91a8353e06fbc454c8ec98be04 100644
--- a/smash/web/forms/worker_form.py
+++ b/smash/web/forms/worker_form.py
@@ -1,9 +1,9 @@
 from django import forms
 from django.forms import ModelForm
 
-from web.models.worker import role_choices_by_worker_type
 from web.models import Worker, WorkerStudyRole
 from web.models.constants import GLOBAL_STUDY_ID
+from web.models.worker import role_choices_by_worker_type
 from web.models.worker_study_role import WORKER_STAFF
 
 
@@ -17,6 +17,11 @@ class WorkerForm(ModelForm):
         choices = role_choices_by_worker_type(worker_type)
         super(WorkerForm, self).__init__(*args, **kwargs)
         self.fields['role'] = forms.ChoiceField(label='Role', choices=choices)
+        instance = getattr(self, 'instance', None)
+        if instance is not None:
+            roles = WorkerStudyRole.objects.filter(worker=instance, study_id=GLOBAL_STUDY_ID)
+            if roles.count() > 0:
+                self.fields['role'].initial = roles[0].role
 
     def save(self, commit=True):
         instance = super(WorkerForm, self).save(commit)
diff --git a/smash/web/migrations/0099_auto_20171213_1115.py b/smash/web/migrations/0099_auto_20171213_1115.py
new file mode 100644
index 0000000000000000000000000000000000000000..36f7df053335eaaf12b53d29195e6160dcc2d171
--- /dev/null
+++ b/smash/web/migrations/0099_auto_20171213_1115.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.7 on 2017-12-13 11:15
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('web', '0098_workerstudyrole'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='worker',
+            name='languages',
+            field=models.ManyToManyField(blank=True, to='web.Language', verbose_name=b'Known languages'),
+        ),
+        migrations.AlterField(
+            model_name='worker',
+            name='locations',
+            field=models.ManyToManyField(blank=True, to='web.Location', verbose_name=b'Locations'),
+        ),
+        migrations.AlterField(
+            model_name='worker',
+            name='phone_number',
+            field=models.CharField(blank=True, max_length=20, verbose_name=b'Phone number'),
+        ),
+        migrations.AlterField(
+            model_name='worker',
+            name='specialization',
+            field=models.CharField(blank=True, max_length=20, verbose_name=b'Specialization'),
+        ),
+        migrations.AlterField(
+            model_name='worker',
+            name='unit',
+            field=models.CharField(blank=True, max_length=50, verbose_name=b'Unit'),
+        ),
+    ]
diff --git a/smash/web/models/worker.py b/smash/web/models/worker.py
index 76f369a9eee1b266d7334e1300315da9736a5e62..efca00bdad3237b8a813c0ca18d6cb584c093bb3 100644
--- a/smash/web/models/worker.py
+++ b/smash/web/models/worker.py
@@ -37,13 +37,13 @@ def worker_type_by_worker(worker):
     if roles.count() == 0:
         return WORKER_STAFF
     role = roles[0]
-    for role_type, role_name in STUDY_ROLE_CHOICES.items():
+    for role_type, role_name in STUDY_ROLE_CHOICES:
         if role_type == role:
             return WORKER_STAFF
-    for role_type, role_name in HEALTH_PARTNER_ROLE_CHOICES.items():
+    for role_type, role_name in HEALTH_PARTNER_ROLE_CHOICES:
         if role_type == role:
             return WORKER_HEALTH_PARTNER
-    for role_type, role_name in VOUCHER_PARTNER_ROLE_CHOICES.items():
+    for role_type, role_name in VOUCHER_PARTNER_ROLE_CHOICES:
         if role_type == role:
             return WORKER_VOUCHER_PARTNER
     return WORKER_STAFF
@@ -54,10 +54,12 @@ class Worker(models.Model):
         app_label = 'web'
 
     languages = models.ManyToManyField("web.Language",
-                                       verbose_name='Known languages'
+                                       verbose_name='Known languages',
+                                       blank=True
                                        )
     locations = models.ManyToManyField("web.Location",
-                                       verbose_name='Locations'
+                                       verbose_name='Locations',
+                                       blank=True
                                        )
     appointments = models.ManyToManyField('web.Appointment', blank=True,
                                           verbose_name='Appointments'
@@ -72,17 +74,20 @@ class Worker(models.Model):
                                  verbose_name='Last name'
                                  )
     phone_number = models.CharField(max_length=20,
-                                    verbose_name='Phone number'
+                                    verbose_name='Phone number',
+                                    blank=True
                                     )
     unit = models.CharField(max_length=50,
-                            verbose_name='Unit'
+                            verbose_name='Unit',
+                            blank=True
                             )
     email = models.EmailField(
         verbose_name='E-mail'
     )
 
     specialization = models.CharField(max_length=20,
-                                      verbose_name='Specialization'
+                                      verbose_name='Specialization',
+                                      blank=True
                                       )
 
     def is_on_leave(self):
diff --git a/smash/web/templates/doctors/edit.html b/smash/web/templates/doctors/edit.html
index bd5378b9f54ce7aaa81eb15e894246673ec1750c..148cda2c28482fd8327a800c334d58728abf9cb6 100644
--- a/smash/web/templates/doctors/edit.html
+++ b/smash/web/templates/doctors/edit.html
@@ -132,7 +132,7 @@
                         <td>{{ holiday.datetime_end }}</td>
                         <td>{{ holiday.info }}</td>
                         <td>
-                            <a href="{% url 'web.views.doctor_holiday_delete' holiday.id %}" type="button"
+                            <a href="{% url 'web.views.worker_holiday_delete' holiday.id %}" type="button"
                                class="btn btn-block btn-default">Delete</a>
                         </td>
                     </tr>
diff --git a/smash/web/tests/functions.py b/smash/web/tests/functions.py
index dab991b8da1f4480b04ea3c254f6926124169eef..b3855137660292a0c9726bff01709179fa6d35b8 100644
--- a/smash/web/tests/functions.py
+++ b/smash/web/tests/functions.py
@@ -188,8 +188,11 @@ def create_worker(user=None, with_test_location=False):
     worker = Worker.objects.create(
         first_name='piotr',
         last_name="gawron",
-        email='jacob@bla',
+        email='jacob@bla.com',
         user=user,
+        specialization="spec",
+        unit="LCSB",
+        phone_number="0123456789"
     )
     if with_test_location:
         worker.locations = [get_test_location()]
diff --git a/smash/web/tests/view/test_worker.py b/smash/web/tests/view/test_worker.py
index 2cb98a2ad3dfbee5f4d35577ecec2cd8ad484a67..a992eff98970d9b2c45e8430252a6cbf42769117 100644
--- a/smash/web/tests/view/test_worker.py
+++ b/smash/web/tests/view/test_worker.py
@@ -6,7 +6,7 @@ from web.forms import WorkerForm
 from web.models import Worker
 from web.models.worker_study_role import WORKER_STAFF, ROLE_CHOICES_DOCTOR
 from web.tests import create_worker
-from web.tests.functions import create_language, create_location, create_availability
+from web.tests.functions import create_language, create_location, create_availability, format_form_field
 from .. import LoggedInTestCase
 
 logger = logging.getLogger(__name__)
@@ -26,16 +26,11 @@ class WorkerViewTests(LoggedInTestCase):
         self.assertEqual(response.status_code, 200)
 
     def test_render_worker_added_request(self):
-
         language = create_language()
         location = create_location()
         count = Worker.objects.all().count()
 
-        form = WorkerForm()
-        form_data = {}
-        for key, value in form.initial.items():
-            if value is not None:
-                form_data[key] = value
+        form_data = self.get_form_data()
         form_data["first_name"] = "John"
         form_data["last_name"] = "Doe"
         form_data["phone_number"] = "0123456789"
@@ -54,9 +49,30 @@ class WorkerViewTests(LoggedInTestCase):
         new_count = Worker.objects.all().count()
         self.assertEqual(count + 1, new_count)
 
+    @staticmethod
+    def get_form_data(worker=None):
+        form = WorkerForm(instance=worker)
+        form_data = {}
+        for key, value in form.initial.items():
+            form_data[key] = format_form_field(value)
+        return form_data
+
     def test_render_edit_worker_request(self):
         worker = create_worker()
 
+        form_data = self.get_form_data(worker)
+        form_data["last_name"] = "XYZ"
+        form_data["role"] = ROLE_CHOICES_DOCTOR
+
+        response = self.client.post(reverse('web.views.worker_edit', args=[worker.id]), data=form_data)
+        self.assertEqual(response.status_code, 302)
+
+        updated_worker = Worker.objects.get(id=worker.id)
+        self.assertEqual(updated_worker.last_name, form_data["last_name"])
+
+    def test_edit_worker(self):
+        worker = create_worker()
+
         response = self.client.get(reverse('web.views.worker_edit', args=[worker.id]))
         self.assertEqual(response.status_code, 200)
 
diff --git a/smash/web/urls.py b/smash/web/urls.py
index e7e06a69e43db098658484323b8d1c1a54a0d015..69d0f66c5704c2e77c97c3d6ebdc915a5b4409b5 100644
--- a/smash/web/urls.py
+++ b/smash/web/urls.py
@@ -103,7 +103,7 @@ urlpatterns = [
     url(r'^doctors/(?P<worker_type>[A-z]+)$', views.worker.worker_list, name='web.views.workers'),
     url(r'^doctors/add/(?P<worker_type>[A-z]+)$', views.worker.worker_add, name='web.views.worker_add'),
     url(r'^doctors/edit/(?P<worker_id>\d+)$', views.worker.worker_edit, name='web.views.worker_edit'),
-    url(r'^doctors/disable/(?P<doctor_id>\d+)$', views.worker.doctor_disable, name='web.views.worker_disable'),
+    url(r'^doctors/disable/(?P<doctor_id>\d+)$', views.worker.worker_disable, name='web.views.worker_disable'),
 
     url(r'^doctors/(?P<doctor_id>\d+)/availability/add$', views.worker.worker_availability_add,
         name='web.views.worker_availability_add'),
diff --git a/smash/web/views/worker.py b/smash/web/views/worker.py
index a67abe929db49674e902e0ab42d050a3eb70c397..12914af5ca91250b897ce1824437b780d213aa95 100644
--- a/smash/web/views/worker.py
+++ b/smash/web/views/worker.py
@@ -58,7 +58,7 @@ def worker_edit(request, worker_id):
                          })
 
 
-def doctor_disable(request, doctor_id):
+def worker_disable(request, doctor_id):
     the_doctor = get_object_or_404(Worker, id=doctor_id)
     the_doctor.disable()
     return worker_list(request)