diff --git a/db.sqlite3 b/db.sqlite3
index a5053360a26b39fbf554edab5285d4ea5a3b9ad6..054531336725256ae66c340ae2ea879fc2e3924c 100644
Binary files a/db.sqlite3 and b/db.sqlite3 differ
diff --git a/musicapp/__pycache__/forms.cpython-310.pyc b/musicapp/__pycache__/forms.cpython-310.pyc
index c8951a640e23a2ab3ffb3e2cada9733ca5bce3e3..4405c762352bfc121ba504c5ea9bf772713c5885 100644
Binary files a/musicapp/__pycache__/forms.cpython-310.pyc and b/musicapp/__pycache__/forms.cpython-310.pyc differ
diff --git a/musicapp/__pycache__/models.cpython-310.pyc b/musicapp/__pycache__/models.cpython-310.pyc
index e67412b13986934115330a2258aaf0a5e379a805..876b7cf7abf91de8dc9b0132891fdf633778a7b0 100644
Binary files a/musicapp/__pycache__/models.cpython-310.pyc and b/musicapp/__pycache__/models.cpython-310.pyc differ
diff --git a/musicapp/__pycache__/urls.cpython-310.pyc b/musicapp/__pycache__/urls.cpython-310.pyc
index bfdf64b773ec2bac6186dc7b8d83e92e2daa6023..445d5da11a3e00bd76a4a6d8611d92982dea2618 100644
Binary files a/musicapp/__pycache__/urls.cpython-310.pyc and b/musicapp/__pycache__/urls.cpython-310.pyc differ
diff --git a/musicapp/__pycache__/views.cpython-310.pyc b/musicapp/__pycache__/views.cpython-310.pyc
index 33dfbf0d4a9a11868e524ab82e51917a6e0c0008..f5417880a60186f9ecadce06bb4322a4863ead91 100644
Binary files a/musicapp/__pycache__/views.cpython-310.pyc and b/musicapp/__pycache__/views.cpython-310.pyc differ
diff --git a/musicapp/forms.py b/musicapp/forms.py
index cf11913cac2f7f4e0ecc1eac8602a1b39f32319c..21fc5d8ca12fe9024449f46e88e8874e2de88d66 100644
--- a/musicapp/forms.py
+++ b/musicapp/forms.py
@@ -1,5 +1,5 @@
 from django import forms
-from .models import Album, Song
+from .models import Album, Song, Note
 
 # creating a form
 class AlbumForm(forms.ModelForm):
@@ -40,4 +40,20 @@ class SongForm(forms.ModelForm):
         'placeholder': 'Song Title',
         }),
         'album': forms.HiddenInput(),
+}
+
+class NoteForm(forms.ModelForm):
+    # create meta class
+    class Meta:
+        # specify model to be used
+        model = Note
+        fields = ['description', 'album']
+        widgets = {
+        'description': forms.Textarea(attrs={
+        'class': 'formfield',
+        'placeholder': 'Note Description',
+        'rows' : 25,
+        'cols' : 60,
+        }),
+        'album': forms.HiddenInput(),
 }
\ No newline at end of file
diff --git a/musicapp/migrations/0004_note.py b/musicapp/migrations/0004_note.py
new file mode 100644
index 0000000000000000000000000000000000000000..38b0cfa11d1539d9a29515693319db50950e4cd6
--- /dev/null
+++ b/musicapp/migrations/0004_note.py
@@ -0,0 +1,22 @@
+# Generated by Django 4.1.1 on 2022-12-06 06:17
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('musicapp', '0003_song'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Note',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('description', models.TextField()),
+                ('album', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='musicapp.album')),
+            ],
+        ),
+    ]
diff --git a/musicapp/migrations/__pycache__/0004_note.cpython-310.pyc b/musicapp/migrations/__pycache__/0004_note.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..0f0bceb36e7fc473f623a17b76d9be06da703e38
Binary files /dev/null and b/musicapp/migrations/__pycache__/0004_note.cpython-310.pyc differ
diff --git a/musicapp/models.py b/musicapp/models.py
index 83d1bb14c0aad8c465dc7c986f168f2ad8ddfad4..afdcb9532991bb42f30ceffaba58d5858fee03ee 100644
--- a/musicapp/models.py
+++ b/musicapp/models.py
@@ -9,4 +9,8 @@ class Album(models.Model):
 class Song(models.Model):
     title = models.CharField(max_length = 128)
     favourite = models.BooleanField(default=False)
-    album = models.ForeignKey(Album, on_delete=models.CASCADE)
\ No newline at end of file
+    album = models.ForeignKey(Album, on_delete=models.CASCADE)
+
+class Note(models.Model):
+    description = models.TextField()
+    album = models.ForeignKey(Album, on_delete=models.CASCADE)
diff --git a/musicapp/static/js/musicapp.js b/musicapp/static/js/musicapp.js
index 879b38590ef93cac54db43da3d48a64f0416032b..c7d65dce8e015087f9965959eda7bd68e82d1e10 100644
--- a/musicapp/static/js/musicapp.js
+++ b/musicapp/static/js/musicapp.js
@@ -21,7 +21,7 @@ async function togglefavourite(song_id){
     });
 }
     
-async function delete_t(song_id){
+async function delete_s(song_id){
     $.ajax({
     url: '/albums/deletesong',
     type: 'get',
diff --git a/musicapp/templates/musicapp/detail_view.html b/musicapp/templates/musicapp/detail_view.html
index a88a786df73f174ae2abab305d96b03ba77c4e5f..4c1768d777253e45c38f26228a75985bcb38eca1 100644
--- a/musicapp/templates/musicapp/detail_view.html
+++ b/musicapp/templates/musicapp/detail_view.html
@@ -12,7 +12,10 @@
     </hr>
 
     {% include 'musicapp/song_list.html' with nid=album.id %}
-    <input type="button" onclick="location.href='{% url 'create_song' album.id %}';" value="New Song" />
+    <input type="button" onclick="location.href='{% url 'create_song' album.id %}';" value="New Song" /><br><br><br>
+
+    {% include 'musicapp/note_list.html' with nid=album.id %}
+    <input type="button" onclick="location.href='{% url 'create_note' album.id %}';" value="New Note" />
 
 </body>
 {% endblock content %}
diff --git a/musicapp/templates/musicapp/note_list.html b/musicapp/templates/musicapp/note_list.html
new file mode 100644
index 0000000000000000000000000000000000000000..b92f1ea65180131d10f847d3996c4c1dd4f6390e
--- /dev/null
+++ b/musicapp/templates/musicapp/note_list.html
@@ -0,0 +1,7 @@
+<h3>Notes</h3>
+
+{% for note in note_list %}
+
+    <p> {{note.description}} </p>
+
+{% endfor %}
diff --git a/musicapp/templates/musicapp/song_list.html b/musicapp/templates/musicapp/song_list.html
index c37698f65ecd9052b462fc1a329284a95e3fa77e..747f889e54d2d346b650355d7f68174afe0afc87 100644
--- a/musicapp/templates/musicapp/song_list.html
+++ b/musicapp/templates/musicapp/song_list.html
@@ -9,7 +9,7 @@
     {% else %}
         <div class="song_prompt not_favourite" id="sid_{{song.id}}" onClick='togglefavourite({{ song.id }})'>{{song.title}}    
     {% endif %}
-    <button class="song_button" onClick='event.stopPropagation();delete_t({{ song.id }});' type='button'>X</button>
+    <button class="song_button" onClick='event.stopPropagation();delete_s({{ song.id }});' type='button'>X</button>
     </div>
     <hr/>
 {% endfor %}
diff --git a/musicapp/urls.py b/musicapp/urls.py
index eb823e32dfda309deb75478877c2de2d42a99dd7..2c52217caac45f2e344f765702fd9ce5573531f0 100644
--- a/musicapp/urls.py
+++ b/musicapp/urls.py
@@ -20,4 +20,10 @@ urlpatterns = [
     path('togglefavourite', views.FavouriteSongView.as_view(), name='favourite_song'),
     #/albums/deletesong
     path('deletesong', views.DeleteSongView.as_view(), name='delete_song'),
+    #albums/id/notes/
+    path('<int:nid>/notes', views.NoteListView.as_view(), name='note_list'),
+    #albums/id/note/new
+    path('<int:nid>/note/new', views.CreateNoteView.as_view(), name='create_note'),
+    #/albums/deletenote
+    path('deletenote', views.DeleteNoteView.as_view(), name='delete_note'),
 ]
diff --git a/musicapp/views.py b/musicapp/views.py
index 177e2651bdadf7f64aaa078123325b177470f916..250bca0d9326153217142093e25725a7af84cfa2 100644
--- a/musicapp/views.py
+++ b/musicapp/views.py
@@ -1,10 +1,10 @@
 from django.views.generic import ListView, CreateView, DetailView, View
 from django.shortcuts import (get_object_or_404, render, redirect)
 from django.http import HttpResponse, JsonResponse
-from .forms import AlbumForm, SongForm
+from .forms import AlbumForm, SongForm, NoteForm
+from .models import Album, Song, Note
 from django.urls import reverse_lazy
 from django.contrib import messages
-from .models import Album, Song
 
 def index_view(request):
     # dictionary for initial data with
@@ -25,6 +25,7 @@ class AlbumDetailView(DetailView):
         context = {}
         context['album'] = Album.objects.get(id=self.kwargs['pk'])
         context['song_list'] = Song.objects.filter(album__id=self.kwargs['pk'])
+        context['note_list'] = Note.objects.filter(album__id=self.kwargs['pk'])
         
         return context
 
@@ -113,3 +114,35 @@ class DeleteSongView(View):
             return JsonResponse({'delete_success': False, 'sid': sid}, status=200)
         song.delete()
         return JsonResponse({'delete_success': True, 'sid': sid}, status=200)
+
+
+class NoteListView(ListView):
+    model = Note
+    template_name = 'musicapp/note_list.html'
+    context_object_name = 'note_list'
+
+    def get_queryset(self):
+        return Note.objects.filter(album__id=self.kwargs['nid']) 
+
+class CreateNoteView(CreateView):
+    model = Note
+    form_class = NoteForm
+    template_name = "musicapp/create_view.html"
+    
+    def get_initial(self): # set the initial value of our album field
+        album = Album.objects.get(id=self.kwargs['nid'])
+        return {'album': album}
+        
+    def get_success_url(self): # redirect to the album detail view on success
+        return reverse_lazy('albums_detail', kwargs={'pk':self.kwargs['nid']})
+
+
+class DeleteNoteView(View):
+    def get(self, request):
+        nid = request.GET.get('note_id')
+        try:
+            note = Note.objects.get(pk=nid)
+        except Song.DoesNotExist:
+            return JsonResponse({'delete_success': False, 'nid': nid}, status=200)
+        note.delete()
+        return JsonResponse({'delete_success': True, 'nid': nid}, status=200)