diff --git a/biscuit/apps/exlibris/models.py b/biscuit/apps/exlibris/models.py
index b263c1a6c3fae9d379a3db02224eaa152bd8da20..f23f84f796755916c1b3e0e11b40aa9422a4c892 100644
--- a/biscuit/apps/exlibris/models.py
+++ b/biscuit/apps/exlibris/models.py
@@ -25,10 +25,10 @@ class Book(SchoolRelated):
     cover = models.ImageField(verbose_name=_(
         'Photo of cover'), blank=True, null=True)
 
-    def __str__(self):
+    def __str__(self) -> str:
         return '%s (%s, %d. %d %d)' % (self.title, self.author, self.edition, _('edition'), self.year)
 
-    def is_deleteable(self):
+    def is_deleteable(self) -> bool:
         for book_copy in self.copies.all():
             if not book_copy.is_deleteable():
                 return False
@@ -69,7 +69,7 @@ class BookCopy(models.Model):
     barcode = models.CharField(verbose_name=_(
         'Barcode'), max_length=20, unique=True)
 
-    def save(self, *args, **kwargs):
+    def save(self, *args, **kwargs) -> None:
         if not self.copy_num:
             if self.book.copies.exclude(copy_num__isnull=True).exists():
                 self.copy_num = self.book.copies.exclude(
@@ -82,5 +82,5 @@ class BookCopy(models.Model):
 
         super().save(*args, **kwargs)
 
-    def is_deleteable(self):
+    def is_deleteable(self) -> bool:
         return not self.borrow_count and not self.borrower
diff --git a/biscuit/apps/exlibris/util.py b/biscuit/apps/exlibris/util.py
index b9e4c5a5922f82fd57d9f0c4f58499126f4f416f..645ad2f436b9c365560a8e5b323d264eba197850 100644
--- a/biscuit/apps/exlibris/util.py
+++ b/biscuit/apps/exlibris/util.py
@@ -1,7 +1,9 @@
+from typing import Dict
+
 import isbnlib
 
 
-def get_book_meta(isbn):
+def get_book_meta(isbn: str) -> Dict[str, str]:
     meta_result = {}
 
     for provider in 'dnb', 'openl', 'goob':
diff --git a/biscuit/apps/exlibris/views.py b/biscuit/apps/exlibris/views.py
index 412f81a2020d5f8145ab1f4715868a1051c84fb0..ff2d3f9bc3f2bf6461a1d2952038bcdb3674cc2a 100644
--- a/biscuit/apps/exlibris/views.py
+++ b/biscuit/apps/exlibris/views.py
@@ -3,7 +3,7 @@ import os
 from tempfile import TemporaryDirectory
 
 from django.contrib.auth.decorators import login_required
-from django.http import FileResponse
+from django.http import FileResponse, HttpRequest, HttpResponse
 from django.shortcuts import get_object_or_404, redirect, render
 from django.utils.text import slugify
 from django.utils.translation import ugettext_lazy as _
@@ -22,7 +22,7 @@ from .util import get_book_meta
 
 
 @login_required
-def books(request):
+def books(request: HttpRequest) -> HttpResponse:
     context = {}
 
     # Get all books
@@ -37,7 +37,7 @@ def books(request):
 
 
 @login_required
-def add_book(request):
+def add_book(request: HttpRequest) -> HttpResponse:
     context = {}
 
     book_add_isbn_form = BookAddISBNForm(request.POST or None)
@@ -52,7 +52,7 @@ def add_book(request):
 
 
 @login_required
-def edit_book(request, id_=None, isbn=None):
+def edit_book(request: HttpRequest, id_: Optoinal[int] = None, isbn: Optional[str] = None) -> HttpResponse:
     context = {}
 
     if id_:
@@ -92,7 +92,7 @@ def edit_book(request, id_=None, isbn=None):
 
 
 @login_required
-def delete_book(request, id_):
+def delete_book(request: HttpRequest, id_: int) -> HttpResponse:
     book = get_object_or_404(Book, pk=id_)
     title = book.title
 
@@ -107,7 +107,7 @@ def delete_book(request, id_):
 
 
 @login_required
-def book(request, id_, template):
+def book(request: HttpRequest, id_: int, template: str) -> HttpResponse:
     context = {}
 
     book = get_object_or_404(Book, pk=id_)
@@ -125,7 +125,7 @@ def book(request, id_, template):
 
 
 @login_required
-def add_book_copies(request, id_):
+def add_book_copies(request: HttpRequest, id_: int) -> HttpResponse:
     context = {}
 
     book = get_object_or_404(Book, pk=id_)
@@ -151,7 +151,7 @@ def add_book_copies(request, id_):
 
 
 @login_required
-def edit_book_copy(request, id_):
+def edit_book_copy(request: HttpRequest, id_: int) -> HttpResponse:
     context = {}
 
     book_copy = get_object_or_404(BookCopy, pk=id_)
@@ -173,7 +173,7 @@ def edit_book_copy(request, id_):
 
 
 @login_required
-def delete_book_copy(request, id_):
+def delete_book_copy(request: HttpRequest, id_: int) -> HttpResponse:
     book_copy = get_object_or_404(BookCopy, pk=id_)
     book = book_copy.book
 
@@ -189,7 +189,7 @@ def delete_book_copy(request, id_):
 
 
 @login_required
-def book_copies_labels(request, id_):
+def book_copies_labels(request: HttpRequest, id_: int) -> HttpResponse:
     book = get_object_or_404(Book, pk=id_)
     copies = book.copies.all()
 
@@ -231,7 +231,7 @@ def book_copies_labels(request, id_):
 
 
 @login_required
-def get_copy(request):
+def get_copy(request: HttpRequest) -> HttpResponse:
     context = {}
 
     book_copy_form = BookGetCopyForm(request.POST or None)
@@ -246,7 +246,7 @@ def get_copy(request):
 
 
 @login_required
-def book_copy(request, barcode, template):
+def book_copy(request: HttpRequest, barcode: str, template: str) -> HttpResponse:
     context = {}
 
     book_copy = get_object_or_404(BookCopy, barcode=barcode)