diff --git a/program/admin.py b/program/admin.py
index df279ff9c652fa2c470551d2c04f1d58228c112a..251eff1c650682854e524b51e7eed2438bd5d176 100644
--- a/program/admin.py
+++ b/program/admin.py
@@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _
 from django.shortcuts import render
 from django.conf import settings
 
-from .models import Type, MusicFocus, Category, Topic, RTRCategory, Host, Note, RRule, Schedule, Show, TimeSlot
+from .models import Language, Type, MusicFocus, Category, Topic, RTRCategory, Host, Note, RRule, Schedule, Show, TimeSlot
 from .forms import MusicFocusForm, CollisionForm
 
 from datetime import date, datetime, time, timedelta
@@ -67,14 +67,20 @@ class CategoryAdmin(admin.ModelAdmin):
     prepopulated_fields = {'slug': ('category',)}
 
 
+class LanguageAdmin(admin.ModelAdmin):
+    list_display = ('name',)
+
+
 class TopicAdmin(admin.ModelAdmin):
     list_display = ('topic', 'abbrev', 'admin_buttons')
     prepopulated_fields = {'slug': ('topic',)}
 
+
 class RTRCategoryAdmin(admin.ModelAdmin):
     list_display = ('rtrcategory', 'abbrev', )
     prepopulated_fields = {'slug': ('rtrcategory',)}
 
+
 class HostAdmin(admin.ModelAdmin):
     list_display = ('name',)
     list_filter = (ActiveHostsFilter, 'is_always_visible',)
@@ -101,8 +107,8 @@ class NoteAdmin(admin.ModelAdmin):
                 timeslot_id = int(request.get_full_path().split('/')[-2])
             except ValueError:
                 shows = request.user.shows.all()
-                kwargs['queryset'] = TimeSlot.objects.filter(show__in=shows, note__isnull=True, start__gt=four_weeks_ago,
-                                                             start__lt=in_twelf_weeks)
+                kwargs['queryset'] = TimeSlot.objects.filter(show__in=shows, start__gt=four_weeks_ago,
+                                                             start__lt=in_twelf_weeks) # note__isnull=True
             else:
                 kwargs['queryset'] = TimeSlot.objects.filter(note=timeslot_id)
 
@@ -152,24 +158,22 @@ class ScheduleInline(admin.TabularInline):
 
 
 class ShowAdmin(admin.ModelAdmin):
-    filter_horizontal = ('hosts', 'owners', 'musicfocus', 'category', 'topic')
+    filter_horizontal = ('hosts', 'owners', 'musicfocus', 'category', 'topic', 'language')
     inlines = (ScheduleInline,)
     list_display = ('name', 'short_description')
-    list_filter = (ActiveShowsFilter, 'type', 'category', 'topic', 'musicfocus', 'rtrcategory')
+    list_filter = (ActiveShowsFilter, 'type', 'category', 'topic', 'musicfocus', 'rtrcategory', 'language')
     ordering = ('slug',)
     prepopulated_fields = {'slug': ('name',)}
     search_fields = ('name', 'short_description', 'description')
     fields = (
         'predecessor', 'type', 'name', 'slug', 'image', 'logo', 'short_description', 'description',
-        'email', 'website', 'hosts', 'owners', 'category', 'rtrcategory', 'topic',
+        'email', 'website', 'hosts', 'owners', 'language', 'category', 'rtrcategory', 'topic',
         'musicfocus', 'fallback_pool', 'cba_series_id',
     )
 
     class Media:
-        from django.conf import settings
-        media_url = getattr(settings, 'MEDIA_URL')
-        js = [ media_url + 'js/show_change.js',
-               media_url + 'js/calendar/lib/moment.min.js',
+        js = [ settings.MEDIA_URL + 'js/show_change.js',
+               settings.MEDIA_URL + 'js/calendar/lib/moment.min.js',
              ]
 
         css = { 'all': ('/program/styles.css',) }
@@ -465,6 +469,7 @@ class ShowAdmin(admin.ModelAdmin):
                                                    'num_collisions': self.num_collisions})
 
 
+admin.site.register(Language, LanguageAdmin)
 admin.site.register(Type, TypeAdmin)
 admin.site.register(MusicFocus, MusicFocusAdmin)
 admin.site.register(Category, CategoryAdmin)
diff --git a/program/fixtures/languages.yaml b/program/fixtures/languages.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e34961fb4c2eebab45621ceb3d8b8f073ef961d9
--- /dev/null
+++ b/program/fixtures/languages.yaml
@@ -0,0 +1,192 @@
+- model: program.language
+  pk: 1
+  fields:
+    name: Deutsch
+- model: program.language
+  pk: 2
+  fields:
+    name: Englisch
+- model: program.language
+  pk: 3
+  fields:
+    name: Spanisch
+- model: program.language
+  pk: 4
+  fields:
+    name: Polnisch
+- model: program.language
+  pk: 5
+  fields:
+    name: Farsi
+- model: program.language
+  pk: 6
+  fields:
+    name: Französisch
+- model: program.language
+  pk: 7
+  fields:
+    name: Slowenisch
+- model: program.language
+  pk: 8
+  fields:
+    name: Persisch
+- model: program.language
+  pk: 9
+  fields:
+    name: Arabisch
+- model: program.language
+  pk: 10
+  fields:
+    name: Türkisch
+- model: program.language
+  pk: 11
+  fields:
+    name: Japanisch
+- model: program.language
+  pk: 12
+  fields:
+    name: Italienisch
+- model: program.language
+  pk: 13
+  fields:
+    name: Tschechisch
+- model: program.language
+  pk: 14
+  fields:
+    name: Russisch
+- model: program.language
+  pk: 15
+  fields:
+    name: Chinesisch
+- model: program.language
+  pk: 16
+  fields:
+    name: Ungarisch
+- model: program.language
+  pk: 17
+  fields:
+    name: Serbisch
+- model: program.language
+  pk: 18
+  fields:
+    name: Portugiesisch
+- model: program.language
+  pk: 19
+  fields:
+    name: Kroatisch
+- model: program.language
+  pk: 20
+  fields:
+    name: Albanisch
+- model: program.language
+  pk: 21
+  fields:
+    name: Dari
+- model: program.language
+  pk: 22
+  fields:
+    name: Bosnisch
+- model: program.language
+  pk: 23
+  fields:
+    name: Kurdisch
+- model: program.language
+  pk: 24
+  fields:
+    name: Aserbaidschanisch
+- model: program.language
+  pk: 25
+  fields:
+    name: Slowakisch
+- model: program.language
+  pk: 26
+  fields:
+    name: Niederländisch
+- model: program.language
+  pk: 27
+  fields:
+    name: Bulgarisch
+- model: program.language
+  pk: 28
+  fields:
+    name: Somali
+- model: program.language
+  pk: 29
+  fields:
+    name: Tschetschenisch
+- model: program.language
+  pk: 30
+  fields:
+    name: Dänisch
+- model: program.language
+  pk: 31
+  fields:
+    name: Rumänisch
+- model: program.language
+  pk: 32
+  fields:
+    name: Thai
+- model: program.language
+  pk: 33
+  fields:
+    name: Finnisch
+- model: program.language
+  pk: 34
+  fields:
+    name: Romanes
+- model: program.language
+  pk: 35
+  fields:
+    name: Griechisch
+- model: program.language
+  pk: 36
+  fields:
+    name: Singhalesisch
+- model: program.language
+  pk: 37
+  fields:
+    name: Urdu
+- model: program.language
+  pk: 38
+  fields:
+    name: Estnisch
+- model: program.language
+  pk: 39
+  fields:
+    name: Mazedonisch
+- model: program.language
+  pk: 40
+  fields:
+    name: Hebräisch
+- model: program.language
+  pk: 41
+  fields:
+    name: Schwedisch
+- model: program.language
+  pk: 42
+  fields:
+    name: Lithauisch
+- model: program.language
+  pk: 43
+  fields:
+    name: Jiddisch
+- model: program.language
+  pk: 44
+  fields:
+    name: Isländisch
+- model: program.language
+  pk: 45
+  fields:
+    name: Litauisch
+- model: program.language
+  pk: 46
+  fields:
+    name: Amharisch
+- model: program.language
+  pk: 47
+  fields:
+    name: Norwegisch
+- model: program.language
+  pk: 48
+  fields:
+    name: Koreanisch
\ No newline at end of file
diff --git a/program/migrations/0013_auto_20171109_1942.py b/program/migrations/0013_auto_20171109_1942.py
new file mode 100644
index 0000000000000000000000000000000000000000..9e6723c42415478eab5586d1bc366423c65e02b7
--- /dev/null
+++ b/program/migrations/0013_auto_20171109_1942.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.3 on 2017-11-09 19:42
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('program', '0012_auto_20171109_1843'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Language',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=32, verbose_name='Language')),
+            ],
+            options={
+                'verbose_name': 'Language',
+                'verbose_name_plural': 'Languages',
+                'ordering': ('language',),
+            },
+        ),
+        migrations.AlterModelOptions(
+            name='schedule',
+            options={'ordering': ('dstart', 'tstart'), 'verbose_name': 'Schedule', 'verbose_name_plural': 'Schedules'},
+        ),
+        migrations.AddField(
+            model_name='show',
+            name='language',
+            field=models.ManyToManyField(blank=True, related_name='language', to='program.Language', verbose_name='Language'),
+        ),
+    ]
diff --git a/program/models.py b/program/models.py
index 5835db6fb728dbe3de63111536cdcd0f007c4f30..c24cde20251d6e18e0c20df01fd142450954c929 100644
--- a/program/models.py
+++ b/program/models.py
@@ -225,6 +225,18 @@ class RTRCategory(models.Model):
         return '%s' % self.rtrcategory
 
 
+class Language(models.Model):
+    name = models.CharField(_("Language"), max_length=32)
+
+    class Meta:
+        ordering = ('language',)
+        verbose_name = _("Language")
+        verbose_name_plural = _("Languages")
+
+    def __str__(self):
+        return '%s' % self.name
+
+
 class Host(models.Model):
     name = models.CharField(_("Name"), max_length=128)
     is_always_visible = models.BooleanField(_("Is always visible"), default=False)
@@ -250,6 +262,7 @@ class Show(models.Model):
     predecessor = models.ForeignKey('self', blank=True, null=True, related_name='successors', verbose_name=_("Predecessor"))
     hosts = models.ManyToManyField(Host, blank=True, related_name='shows', verbose_name=_("Hosts"))
     owners = models.ManyToManyField(User, blank=True, related_name='shows', verbose_name=_("Owners"))
+    language = models.ManyToManyField(Language, blank=True, related_name='language', verbose_name=_("Language"))
     type = models.ForeignKey(Type, related_name='shows', verbose_name=_("Type"))
     category = models.ManyToManyField(Category, blank=True, related_name='shows', verbose_name=_("Category"))
     rtrcategory = models.ForeignKey(RTRCategory, related_name='shows', verbose_name=_("RTR Category"))
@@ -348,8 +361,8 @@ class Schedule(models.Model):
         # Produces error when adding several schedules at the same time.
         # Do this test in another way, since it is quite unspecific anyway
         #unique_together = ('rrule', 'byweekday', 'dstart', 'tstart')
-        verbose_name = _("Program slot")
-        verbose_name_plural = _("Program slots")
+        verbose_name = _("Schedule")
+        verbose_name_plural = _("Schedules")
 
     def __str__(self):
         weekday = self.BYWEEKDAY_CHOICES[self.byweekday][1]