diff --git a/.gitignore b/.gitignore
index a991d42fe1f8fe5841e80bc0816af36d4099e6fb..fec9c94d7648136a5c9a7819e031ecc9beef0d66 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,6 +24,7 @@ __pycache__
 
 /uploads*
 /media*
+/logs*
 
 SCIPOST_JOURNALS
 UPLOADS
diff --git a/SciPost_v1/settings/base.py b/SciPost_v1/settings/base.py
index cfa3afb43c2627e113e1ea37e66b3e64771bdf9f..2ce3128b4a71fdc7e0bb66d978b28ab47bc8ca71 100644
--- a/SciPost_v1/settings/base.py
+++ b/SciPost_v1/settings/base.py
@@ -106,6 +106,7 @@ INSTALLED_APPS = (
     'stats',
     'petitions',
     'webpack_loader',
+    'silk',
 )
 
 
@@ -155,6 +156,7 @@ MATHJAX_CONFIG_DATA = {
     }
 
 MIDDLEWARE = (
+    'silk.middleware.SilkyMiddleware',
     # 'django.middleware.http.ConditionalGetMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.locale.LocaleMiddleware',
@@ -164,9 +166,18 @@ MIDDLEWARE = (
     'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
-    'django.middleware.security.SecurityMiddleware'
+    'django.middleware.security.SecurityMiddleware',
 )
 
+SILKY_PYTHON_PROFILER = True
+SILKY_PYTHON_PROFILE_BINARY = False
+SILKY_AUTHENTICATION = True
+SILKY_AUTHORIZATION = True
+SILKY_META = True
+SILKY_INTERCEPT_PERCENT = 100
+SILKY_MAX_RECORDED_REQUESTS = 10**4
+SILKY_PERMISSIONS = lambda user: user.is_superuser
+
 ROOT_URLCONF = 'SciPost_v1.urls'
 
 TEMPLATES = [
diff --git a/SciPost_v1/urls.py b/SciPost_v1/urls.py
index 2fe82bebd8ad297c4505b5fc1f5794bca5e8035d..48f75f7c07021fec6a417d31edcebcf819b37365 100644
--- a/SciPost_v1/urls.py
+++ b/SciPost_v1/urls.py
@@ -53,6 +53,7 @@ urlpatterns = [
     url(r'^stats/', include('stats.urls', namespace="stats")),
     # Keep temporarily for historical reasons
     url(r'^supporting_partners/', include('partners.urls', namespace="_partners")),
+    url(r'^silk/', include('silk.urls', namespace='silk')),
 ]
 
 if settings.DEBUG:
diff --git a/requirements.txt b/requirements.txt
index 1e0972f0744b34b251410d6032f2401f38763378..f67521b8a6c1e53e16da6b4672cce3d358c778d0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -19,6 +19,7 @@ django-guardian==1.4.9
 django-mathjax==0.0.5  # This thing looks dead as well
 django-mptt==0.8.6  # Dead
 django-sphinxdoc==1.5.1
+django-silk==2.0.0
 django-recaptcha==1.3.1
 django-webpack-loader==0.5
 
@@ -36,7 +37,7 @@ Faker==0.8.12
 
 
 # Django Utils
-django-haystack==2.5.1  # Check if this is really used. Package is not up-to-date
+django-haystack==2.5.1
 Whoosh==2.7.4  # Directly related to Haystack.
 
 
diff --git a/submissions/views.py b/submissions/views.py
index e806b5c1ce3c74440bdfa70f151038615479b301..1d3fdc11c74e7329e884f3034546d2d0db14276d 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -23,6 +23,7 @@ from django.views.generic.edit import CreateView, UpdateView
 from django.views.generic.list import ListView
 
 from guardian.shortcuts import assign_perm
+from silk.profiling.profiler import silk_profile
 
 from .constants import STATUS_VETTED, STATUS_EIC_ASSIGNED,\
                        SUBMISSION_STATUS_PUBLICLY_INVISIBLE, SUBMISSION_STATUS,\
@@ -353,6 +354,7 @@ def editorial_workflow(request):
 
 @login_required
 @fellowship_or_admin_required()
+@silk_profile(name='Pool')
 def pool(request, arxiv_identifier_w_vn_nr=None):
     """
     The Submissions pool contains all submissions which are undergoing
@@ -538,6 +540,7 @@ def assignment_request(request, assignment_id):
 @login_required
 @fellowship_required()
 @transaction.atomic
+@silk_profile(name='Volunteer as EIC')
 def volunteer_as_EIC(request, arxiv_identifier_w_vn_nr):
     """
     Called when a Fellow volunteers while perusing the submissions pool.
@@ -632,6 +635,7 @@ def assignment_failed(request, arxiv_identifier_w_vn_nr):
 
 @login_required
 @fellowship_required()
+@silk_profile(name='EditorialAssignment overview')
 def assignments(request):
     """
     This page provides a Fellow with an explicit task list
@@ -757,6 +761,7 @@ def select_referee(request, arxiv_identifier_w_vn_nr):
 @login_required
 @fellowship_or_admin_required()
 @transaction.atomic
+@silk_profile(name='Recruit referee')
 def recruit_referee(request, arxiv_identifier_w_vn_nr):
     """
     If the Editor-in-charge does not find the desired referee among Contributors
@@ -869,6 +874,7 @@ def send_refereeing_invitation(request, arxiv_identifier_w_vn_nr, contributor_id
 
 @login_required
 @fellowship_or_admin_required()
+@silk_profile(name='Remind Referee')
 def ref_invitation_reminder(request, arxiv_identifier_w_vn_nr, invitation_id):
     """
     This method is used by the Editor-in-charge from the editorial_page
@@ -1176,6 +1182,7 @@ def communication(request, arxiv_identifier_w_vn_nr, comtype, referee_id=None):
 @login_required
 @fellowship_or_admin_required()
 @transaction.atomic
+@silk_profile(name='Editorial Assignment processing')
 def eic_recommendation(request, arxiv_identifier_w_vn_nr):
     """
     Write EIC Recommendation.
@@ -1363,6 +1370,7 @@ def vet_submitted_reports_list(request):
 @login_required
 @fellowship_or_admin_required()
 @transaction.atomic
+@silk_profile(name='Vet submitted Report')
 def vet_submitted_report(request, report_id):
     """
     Report with status `unvetted` will be shown. A user may only vet reports of submissions