diff --git a/core/admin.py b/core/admin.py
index 47c1b6324dfbf857c08bd1b34a607ba6477c2291..f30ded64324bcdff514ec1de0fd65d3ef0ff4e7c 100755
--- a/core/admin.py
+++ b/core/admin.py
@@ -1,12 +1,11 @@
 from django.contrib import admin
 
-from core.models.vacancies import Application, Vacancy
 from core.models.accounts import Company, Supervisor, Student
+from core.models.vacancies import Vacancy
 
 admin.site.register(Company)
 admin.site.register(Student)
 admin.site.register(Supervisor)
 admin.site.register(Vacancy)
-admin.site.register(Application)
 
 
diff --git a/core/migrations/0002_auto_20170328_1131.py b/core/migrations/0002_auto_20170328_1131.py
new file mode 100644
index 0000000000000000000000000000000000000000..1b2481f47077c50e80f93177f0047f7c2373c8d4
--- /dev/null
+++ b/core/migrations/0002_auto_20170328_1131.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2017-03-28 04:31
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='application',
+            name='student_npm',
+        ),
+        migrations.RemoveField(
+            model_name='application',
+            name='vacancy_id',
+        ),
+        migrations.AddField(
+            model_name='student',
+            name='applied_vacancies',
+            field=models.ManyToManyField(blank=True, related_name='applied_vacancies', to='core.Vacancy'),
+        ),
+        migrations.AlterField(
+            model_name='student',
+            name='bookmarked_vacancies',
+            field=models.ManyToManyField(blank=True, related_name='bookmarked_vacancies', to='core.Vacancy'),
+        ),
+        migrations.DeleteModel(
+            name='Application',
+        ),
+    ]
diff --git a/core/models/__init__.py b/core/models/__init__.py
index 8c5ea0e2fce9fb2e961b0a39249174d3a96af59d..a9638e4ef7c2a7639d525d26be476251dd6cf13f 100755
--- a/core/models/__init__.py
+++ b/core/models/__init__.py
@@ -2,7 +2,6 @@
 from core.models.accounts import Company
 from core.models.accounts import Student
 from core.models.accounts import Supervisor
-from core.models.vacancies import Application
 from core.models.vacancies import Vacancy
 
 
diff --git a/core/models/accounts.py b/core/models/accounts.py
index 28bda2974eb33281e3f98eb4683a95109b23dd8b..8adf9adb08872e7fbaca29c681556dea24dd0940 100644
--- a/core/models/accounts.py
+++ b/core/models/accounts.py
@@ -48,7 +48,8 @@ class Student(models.Model):
     npm = models.IntegerField(validators=[MinValueValidator(100000000), MaxValueValidator(9999999999)], unique=True)
     resume = models.FileField(upload_to=get_student_resume_file_path, null=True, blank=True)
     phone_number = models.CharField(max_length=100, blank=True, db_index=True, null=True)
-    bookmarked_vacancies = models.ManyToManyField('core.Vacancy', blank=True)
+    bookmarked_vacancies = models.ManyToManyField('core.Vacancy', related_name="bookmarked_vacancies", blank=True)
+    applied_vacancies = models.ManyToManyField('core.Vacancy', related_name="applied_vacancies", blank=True)
 
     @property
     def name(self):
diff --git a/core/models/vacancies.py b/core/models/vacancies.py
index 23069b78fe641658a551bf7f2c63eefc8b90cf21..eb765886c826fc8bb28f74e446d69d3880dbca78 100644
--- a/core/models/vacancies.py
+++ b/core/models/vacancies.py
@@ -1,6 +1,6 @@
 from django.db import models
 
-from core.models.accounts import Company, Student
+from core.models.accounts import Company
 
 
 class Vacancy(models.Model):
@@ -9,8 +9,3 @@ class Vacancy(models.Model):
     open_time = models.DateTimeField()
     description = models.TextField(blank=True)
     close_time = models.DateTimeField()
-
-
-class Application(models.Model):
-    student_npm = models.OneToOneField(Student)
-    vacancy_id = models.OneToOneField(Vacancy)
\ No newline at end of file
diff --git a/core/serializers/vacancies.py b/core/serializers/vacancies.py
index d63b740252046e55b06717c94618a1db5e8abe31..c8a443405fa6cb57ae48a2392abea5a597668528 100644
--- a/core/serializers/vacancies.py
+++ b/core/serializers/vacancies.py
@@ -1,6 +1,6 @@
 from rest_framework import serializers
 from core.serializers.accounts import CompanySerializer
-from core.models.vacancies import Vacancy, Application
+from core.models.vacancies import Vacancy
 
 
 class VacancySerializer(serializers.ModelSerializer):
@@ -11,8 +11,3 @@ class VacancySerializer(serializers.ModelSerializer):
         fields = '__all__'
 
 
-class ApplicationSerializer(serializers.ModelSerializer):
-    class Meta:
-        model = Application
-        fields = '__all__'
-
diff --git a/core/views/vacancies.py b/core/views/vacancies.py
index b3c6448107e05f9eef54a81476f0e190778d7722..ac3c2b41bceeaaae007d3dc561b096c9f134a1d7 100644
--- a/core/views/vacancies.py
+++ b/core/views/vacancies.py
@@ -4,8 +4,8 @@ from rest_framework.response import Response
 
 from core.lib.permissions import IsAdminOrStudent, IsAdminOrCompany
 from core.models import Student
-from core.models.vacancies import Vacancy, Application
-from core.serializers.vacancies import VacancySerializer, ApplicationSerializer
+from core.models.vacancies import Vacancy
+from core.serializers.vacancies import VacancySerializer
 
 
 class VacancyViewSet(viewsets.ModelViewSet):
@@ -14,11 +14,27 @@ class VacancyViewSet(viewsets.ModelViewSet):
     permission_classes = [IsAdminOrCompany]
 
 
-class ApplicationViewSet(viewsets.ModelViewSet):
-    queryset = Application.objects.all()
-    serializer_class = ApplicationSerializer
+class ApplicationViewSet(viewsets.GenericViewSet):
+    serializer_class = VacancySerializer
     permission_classes = [IsAdminOrStudent]
 
+    def list(self, request, student_id):
+        student = get_object_or_404(Student.objects.all(), pk=student_id)
+        vacancies = self.serializer_class(student.applied_vacancies, many=True, context={'request': request})
+        return Response(vacancies.data)
+
+    def create(self, request, student_id):
+        vacancy = get_object_or_404(Vacancy.objects.all(), pk=request.data['vacancy_id'])
+        student = get_object_or_404(Student.objects.all(), pk=student_id)
+        student.applied_vacancies.add(vacancy)
+        return Response(self.serializer_class(student.applied_vacancies, many=True, context={'request': request}).data)
+
+    def destroy(self, request, student_id, pk):
+        vacancy = get_object_or_404(Vacancy.objects.all(), pk=pk)
+        student = get_object_or_404(Student.objects.all(), pk=student_id)
+        student.applied_vacancies.remove(vacancy)
+        return Response(self.serializer_class(student.applied_vacancies, many=True, context={'request': request}).data)
+
 
 class BookmarkedVacancyByStudentViewSet(viewsets.GenericViewSet):
     serializer_class = VacancySerializer
diff --git a/kape/urls.py b/kape/urls.py
index 1b7c68c0751fda5079fb3ed94ec4f90703a02bec..e64d65ec009245893612f02dd9ceace2bfc90357 100755
--- a/kape/urls.py
+++ b/kape/urls.py
@@ -23,7 +23,7 @@ from rest_framework_swagger.views import get_swagger_view
 
 from core import apps
 from core.views.accounts import StudentViewSet, CompanyViewSet, SupervisorViewSet, UserViewSet, LoginViewSet
-from core.views.vacancies import VacancyViewSet, ApplicationViewSet
+from core.views.vacancies import VacancyViewSet, BookmarkedVacancyByStudentViewSet, ApplicationViewSet
 
 schema_view = get_swagger_view()
 router = routers.DefaultRouter()
@@ -33,7 +33,11 @@ router.register(r'companies', CompanyViewSet)
 router.register(r'supervisors', SupervisorViewSet)
 router.register(r'login', LoginViewSet)
 router.register(r'vacancies', VacancyViewSet)
-router.register(r'applications', ApplicationViewSet)
+router.register(r'students/(?P<student_id>\d+)/bookmarked-vacancies', BookmarkedVacancyByStudentViewSet,
+                base_name='bookmarked-vacancy-list')
+router.register(r'students/(?P<student_id>\d+)/applications', ApplicationViewSet,
+                base_name='applications')
+
 
 urlpatterns = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
 urlpatterns += [