diff --git a/smash/web/api_views/appointment.py b/smash/web/api_views/appointment.py
index 4c2fa7524289da5625dd1ba13165f658bd0dd83f..d3dcef780df268db9b5fdc4bf3a74f91e2f6a429 100644
--- a/smash/web/api_views/appointment.py
+++ b/smash/web/api_views/appointment.py
@@ -91,7 +91,7 @@ def get_appointments_order(appointments_to_be_ordered, order_column, order_direc
     elif order_column == "datetime_when":
         result = appointments_to_be_ordered.order_by(order_direction + 'datetime_when')
     else:
-        logger.warn("Unknown sort column: " + str(order_column))
+        logger.warning("Unknown sort column: " + str(order_column))
     return result
 
 
@@ -120,7 +120,7 @@ def get_appointments_filtered(appointments_to_be_filtered, filters):
                 message += "[None]"
             else:
                 message += str(column)
-            logger.warn(message)
+            logger.warning(message)
 
     return result
 
diff --git a/smash/web/api_views/visit.py b/smash/web/api_views/visit.py
index 606d1ef11cce5135327947ad4d5a564ddd6692eb..276006fc18646ec03ca6052c62c0872918e2eb2a 100644
--- a/smash/web/api_views/visit.py
+++ b/smash/web/api_views/visit.py
@@ -115,7 +115,7 @@ def get_visits_order(visits_to_be_ordered, order_column, order_direction):
     elif order_column == "display_visit_number":
         result = visits_to_be_ordered.order_by(order_direction + 'visit_number')
     else:
-        logger.warn("Unknown sort column: " + str(order_column))
+        logger.warning("Unknown sort column: " + str(order_column))
     return result
 
 
@@ -181,7 +181,7 @@ def get_visits_filtered(visits_to_be_filtered, filters):
                 message += "[None]"
             else:
                 message += str(column)
-            logger.warn(message)
+            logger.warning(message)
 
     return result
 
diff --git a/smash/web/api_views/voucher.py b/smash/web/api_views/voucher.py
index 424bf086c60840e7166d793a4099f97b63ceae3f..05c103597db92d368de2f2ac72d80a09b1b2030e 100644
--- a/smash/web/api_views/voucher.py
+++ b/smash/web/api_views/voucher.py
@@ -32,7 +32,7 @@ def get_vouchers_order(vouchers_to_be_ordered, order_column, order_direction):
     elif order_column == "status":
         result = vouchers_to_be_ordered.order_by(order_direction + 'status')
     else:
-        logger.warn("Unknown sort column: " + str(order_column))
+        logger.warning("Unknown sort column: " + str(order_column))
     return result
 
 
@@ -63,7 +63,7 @@ def get_vouchers_filtered(vouchers_to_be_filtered, filters):
                 message += "[None]"
             else:
                 message += str(column)
-            logger.warn(message)
+            logger.warning(message)
     return result
 
 
diff --git a/smash/web/decorators.py b/smash/web/decorators.py
index b3124a1fb1f939be60a2b623405a514f4015a3a7..b09f375a9e05251cd9039ea71f833f5e2a96cd62 100644
--- a/smash/web/decorators.py
+++ b/smash/web/decorators.py
@@ -65,7 +65,7 @@ class PermissionDecorator:
               This Permission list is automatically created by Django and you can list it with the following code:
               
               from django.contrib.auth.models import Permission
-              logger.warn([p.codename for p in Permission.objects.all()])
+              logger.warning([p.codename for p in Permission.objects.all()])
     '''
     @staticmethod
     def get_permissions():
diff --git a/smash/web/importer/csv_subject_import_reader.py b/smash/web/importer/csv_subject_import_reader.py
index e5b502d8368882e19f30ab7ebfeb8f1f6de32950..03741b71bca29c5997758b775ac1f57fbc466da2 100644
--- a/smash/web/importer/csv_subject_import_reader.py
+++ b/smash/web/importer/csv_subject_import_reader.py
@@ -44,7 +44,7 @@ class CsvSubjectImportReader(SubjectImportReader):
             study_subject.subject.date_born = self.get_new_date_value(study_subject.subject.date_born, column_name,
                                                                       value)
         else:
-            logger.warn("Don't know how to handle column " + column_name + " with data " + value)
+            logger.warning("Don't know how to handle column " + column_name + " with data " + value)
 
     def get_new_value(self, old_value, column_name, new_value):
         # type: (unicode,unicode,unicode) ->  unicode
@@ -52,7 +52,7 @@ class CsvSubjectImportReader(SubjectImportReader):
             return new_value
         if new_value is None or new_value == "":
             return old_value
-        logger.warn(
+        logger.warning(
             "Contradicting entries in csv file for column: " + column_name + "(" + new_value + "," + old_value +
             "). Latest value will be used")
         return new_value
@@ -63,12 +63,12 @@ class CsvSubjectImportReader(SubjectImportReader):
             try:
                 result = datetime.datetime.strptime(new_value, CSV_DATE_FORMAT)
             except ValueError:
-                logger.warn("Invalid date: " + new_value)
+                logger.warning("Invalid date: " + new_value)
                 result = old_value
             return result
         if new_value is None or new_value == "":
             return old_value
-        logger.warn(
+        logger.warning(
             "Contradicting entries in csv file for column: " + column_name + "(" + new_value + "," + old_value +
             "). Latest value will be used")
         return datetime.datetime.strptime(new_value, CSV_DATE_FORMAT)
diff --git a/smash/web/importer/csv_tns_subject_import_reader.py b/smash/web/importer/csv_tns_subject_import_reader.py
index b8bdfd708421fdd9128b6df765063395b73ccd0b..1dd70e307eff836fa151d2530fd50e464c971f7b 100644
--- a/smash/web/importer/csv_tns_subject_import_reader.py
+++ b/smash/web/importer/csv_tns_subject_import_reader.py
@@ -64,7 +64,7 @@ class TnsCsvSubjectImportReader(SubjectImportReader):
             study_subject.subject.date_born = self.get_new_date_value(study_subject.subject.date_born, column_name,
                                                                       value)
         else:
-            logger.warn("Don't know how to handle column " + column_name + " with data " + value)
+            logger.warning("Don't know how to handle column " + column_name + " with data " + value)
 
     def get_new_value(self, old_value, column_name, new_value):
         # type: (unicode,unicode,unicode) ->  unicode
@@ -74,7 +74,7 @@ class TnsCsvSubjectImportReader(SubjectImportReader):
             return old_value
         if old_value == new_value:
             return new_value
-        logger.warn(
+        logger.warning(
             "Contradicting entries in csv file for column: " + column_name + "(" + new_value + "," + old_value +
             "). Latest value will be used")
         return new_value
@@ -85,12 +85,12 @@ class TnsCsvSubjectImportReader(SubjectImportReader):
             try:
                 result = datetime.datetime.strptime(new_value, CSV_DATE_FORMAT)
             except ValueError:
-                logger.warn("Invalid date: " + new_value)
+                logger.warning("Invalid date: " + new_value)
                 result = old_value
             return result
         if new_value is None or new_value == "":
             return old_value
-        logger.warn(
+        logger.warning(
             "Contradicting entries in csv file for column: " + column_name + "(" + new_value + "," + old_value +
             "). Latest value will be used")
         return datetime.datetime.strptime(new_value, CSV_DATE_FORMAT)
diff --git a/smash/web/importer/exporter.py b/smash/web/importer/exporter.py
index d03506547b5ebe97a5cdbf060418f1ea1f2c4fe4..74052751a61bd767e25ac4919339e9da820a7708 100644
--- a/smash/web/importer/exporter.py
+++ b/smash/web/importer/exporter.py
@@ -95,5 +95,5 @@ class VisitExporter(object):
                     result.append([appointment.visit.subject.nd_number, str(appointment.visit.visit_number - 1)])
             except:
                 traceback.print_exc(file=sys.stdout)
-                logger.warn("Problem with exporting appointment: " + str(appointment.id))
+                logger.warning("Problem with exporting appointment: " + str(appointment.id))
         return result
diff --git a/smash/web/importer/importer.py b/smash/web/importer/importer.py
index 5d9dda2e90d8a5aa979d5254a90c798f58e9a9ad..abd6787a6fe55d11a94dbbc752bd0fe19d93e8c9 100644
--- a/smash/web/importer/importer.py
+++ b/smash/web/importer/importer.py
@@ -46,7 +46,7 @@ class Importer(object):
             try:
                 if study_subject.study != self.reader.import_data.study or study_subject.study.id is None:
                     self.problematic_count += 1
-                    logger.warn("Empty study found. Ignoring")
+                    logger.warning("Empty study found. Ignoring")
                     continue
                 else:
                     self.import_study_subject(study_subject)
diff --git a/smash/web/models/study_subject.py b/smash/web/models/study_subject.py
index 3a438d81f07cbcc439dc591c2b938ca054ed907d..8c4a3350222780f79ec8754c8945da9757d235a4 100644
--- a/smash/web/models/study_subject.py
+++ b/smash/web/models/study_subject.py
@@ -333,7 +333,7 @@ class StudySubject(models.Model):
                     except ValueError:  # better than isdigit because isdigit fails with negative numbers and others
                         tupl = (letter, number)
                 else:
-                    logger.warn('There are {} chunks in some parts of this screening_number: |{}|.'.format(
+                    logger.warning('There are {} chunks in some parts of this screening_number: |{}|.'.format(
                         len(chunks), self.screening_number))
                     tupl = (part.strip(), None)
                 if pattern is not None and pattern in part:
diff --git a/smash/web/models/visit.py b/smash/web/models/visit.py
index 6516aab20c8adfb52643a0d14ba890460863ef1a..d2cf993b3c748f781b2ccc26b6bb2eb9e489aa9b 100644
--- a/smash/web/models/visit.py
+++ b/smash/web/models/visit.py
@@ -92,7 +92,7 @@ class Visit(models.Model):
             
             time_to_next_visit = relativedelta(**args) * (follow_up_number - 1) #calculated from first visit
 
-            logger.warn('new visit: {} {} {}'.format(args, relativedelta(**args), time_to_next_visit))
+            logger.warning('new visit: {} {} {}'.format(args, relativedelta(**args), time_to_next_visit))
 
             Visit.objects.create(
                 subject=self.subject,
diff --git a/smash/web/models/worker.py b/smash/web/models/worker.py
index 83793ffd80514f25d2df2950b0caa38a6ce95caa..e8d2270f85b74391a4886142e64c16229e14e335 100644
--- a/smash/web/models/worker.py
+++ b/smash/web/models/worker.py
@@ -177,7 +177,7 @@ class Worker(models.Model):
             logger.info("'" + self.user.username + "' account has been disabled")
             return True
         else:
-            logger.warn("Cannot disable account for user '" + self.first_name + " " + self.last_name + "'")
+            logger.warning("Cannot disable account for user '" + self.first_name + " " + self.last_name + "'")
             return False
 
     def is_active(self):
diff --git a/smash/web/redcap_connector.py b/smash/web/redcap_connector.py
index ef62c8bfabd6f7dfbc6ccca165285fcade332571..70ae1d34e475aca3d2ab02faa0a0383fa9c5e8b3 100644
--- a/smash/web/redcap_connector.py
+++ b/smash/web/redcap_connector.py
@@ -447,7 +447,7 @@ class RedcapConnector(object):
                             visit.virus_collection_date = datetime.datetime.strptime(row.get(self.sample_date_field),
                                                                                      "%Y-%m-%d")
                         except ValueError:
-                            logger.warn("Invalid date: " + row.get(self.sample_date_field))
+                            logger.warning("Invalid date: " + row.get(self.sample_date_field))
                             visit.virus_collection_date = None
 
                 if self.iga_status_field != "":
@@ -486,7 +486,7 @@ class RedcapConnector(object):
                                         visit.virus_collection_date = datetime.datetime.strptime(row.get(self.sample_date_field),
                                                                                      "%Y-%m-%d")
                                     except ValueError:
-                                        logger.warn("Invalid date: " + row.get(self.sample_date_field))
+                                        logger.warning("Invalid date: " + row.get(self.sample_date_field))
                                         visit.virus_collection_date = None
 
                             if self.iga_status_field != "":
@@ -561,7 +561,7 @@ class RedcapConnector(object):
     def get_language(self, name):
         language = self.language_by_name.get(name.lower())
         if language is None:
-            logger.warn("Unknown language: " + name)
+            logger.warning("Unknown language: " + name)
         return language
 
     def execute_query(self, query_data, is_json=True):
diff --git a/smash/web/views/kit.py b/smash/web/views/kit.py
index 3e8b5e7a4ec98b964d2c860f5ebce7e2985dc72d..7dd2a414fa5181dbd4b34808717eec2da3eccc7c 100644
--- a/smash/web/views/kit.py
+++ b/smash/web/views/kit.py
@@ -213,7 +213,7 @@ def send_mail(data):
     recipients = ConfigurationItem.objects.get(
         type=KIT_RECIPIENT_EMAIL_CONFIGURATION_TYPE).value
     cc_recipients = []
-    logger.warn('Calling to send email')
+    logger.warning('Calling to send email')
     EmailSender().send_email(title, email_body, recipients, cc_recipients)
 
 
@@ -226,7 +226,7 @@ def kit_requests_send_mail(request, start_date, end_date=None):
     except Exception as e:
         traceback.print_exc()
 
-        logger.warn('Kit Request Send Mail Failed: |{}|\n{}'.format(
+        logger.warning('Kit Request Send Mail Failed: |{}|\n{}'.format(
             e.message, e.args))
         messages.add_message(request, messages.ERROR,
                              'There was problem with sending email')
diff --git a/smash/web/views/virus_mail.py b/smash/web/views/virus_mail.py
index 193f371078890d1775c73a2734f0224ef4d61566..405004adcd174d637882de0401af2eab5d71dca8 100644
--- a/smash/web/views/virus_mail.py
+++ b/smash/web/views/virus_mail.py
@@ -108,7 +108,7 @@ def send_mail(data):
                 if worker.email is not None and worker.email != "":
                     recipients.append(worker.email)
     cc_recipients = []
-    logger.warn('Calling to send email')
+    logger.warning('Calling to send email')
     EmailSender().send_email(title, email_body, ";".join(recipients), cc_recipients)