diff --git a/data/AlbumWidget.ui b/data/AlbumWidget.ui
index d077613..8db5bb5 100644
--- a/data/AlbumWidget.ui
+++ b/data/AlbumWidget.ui
@@ -174,6 +174,35 @@
                     <property name="height">1</property>
                   </packing>
                 </child>
+                <child>
+                  <object class="GtkLabel" id="composer_label">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="halign">end</property>
+                    <property name="label" translatable="yes">Composer</property>
+                    <property name="use_markup">True</property>
+                    <property name="xalign">1</property>
+                    <style>
+                      <class name="dim-label"/>
+                    </style>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="composer_label_info">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="halign">start</property>
+                    <property name="xalign">0</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">2</property>
+                  </packing>
+                </child>
               </object>
               <packing>
                 <property name="expand">True</property>
diff --git a/gnomemusic/grilo.py b/gnomemusic/grilo.py
index 0d1bc31..41f4b78 100644
--- a/gnomemusic/grilo.py
+++ b/gnomemusic/grilo.py
@@ -52,7 +52,8 @@ class Grilo(GObject.GObject):
         Grl.METADATA_KEY_CREATION_DATE,
         Grl.METADATA_KEY_URL,
         Grl.METADATA_KEY_LYRICS,
-        Grl.METADATA_KEY_THUMBNAIL]
+        Grl.METADATA_KEY_THUMBNAIL,
+        Grl.METADATA_KEY_AUTHOR]
 
     METADATA_THUMBNAIL_KEYS = [
         Grl.METADATA_KEY_ID,
diff --git a/gnomemusic/query.py b/gnomemusic/query.py
index d2d47bc..d8ed5a9 100644
--- a/gnomemusic/query.py
+++ b/gnomemusic/query.py
@@ -85,11 +85,11 @@ class Query():
 
     @staticmethod
     def all_albums():
-        return Query.albums('?album a nmm:MusicAlbum .')
+        return Query.albums('?album a nmm:MusicAlbum . ?song a nmm:MusicPiece .')
 
     @staticmethod
     def all_artists():
-        return Query.artists('?album a nmm:MusicAlbum .')
+        return Query.artists('?album a nmm:MusicAlbum . ?song a nmm:MusicPiece .')
 
     @staticmethod
     def all_songs():
@@ -126,15 +126,18 @@ class Query():
         ?title
         tracker:coalesce((SELECT GROUP_CONCAT(nmm:artistName(?albumArtist), ',') { ?album nmm:albumArtist ?albumArtist }),
                          (SELECT GROUP_CONCAT(nmm:artistName(?performer), ',') { ?song nmm:performer ?performer })) AS ?performer
+        nmm:artistName(?composer) AS ?author
         COUNT(?song) AS ?childcount
         YEAR(MAX(nie:contentCreated(?song))) AS ?creation_date
     {
         %(where_clause)s
+        OPTIONAL { ?song nmm:composer ?composer . }
         ?song a nmm:MusicPiece ;
             nmm:musicAlbum ?album ;
             nmm:performer ?performer .
         ?album nmm:albumArtist ?albumArtist ;
             nie:title ?title .
+
         BIND(LCASE(?title) AS ?title_lower) .
         BIND(LCASE(nmm:artistName(?albumArtist)) AS ?artist_lower) .
         BIND((%(album_order)s) AS ?album_collation) .
@@ -158,6 +161,7 @@ class Query():
     SELECT
         rdf:type(?album)
         tracker:id(?album) AS ?id
+        nmm:artistName(?composer) AS ?author
         nmm:artistName(?albumArtist) AS ?artist
         ?title
         tracker:coalesce((SELECT GROUP_CONCAT(nmm:artistName(?albumArtist), ',') { ?album nmm:albumArtist ?albumArtist }),
@@ -166,6 +170,7 @@ class Query():
         YEAR(MAX(nie:contentCreated(?song))) AS ?creation_date
     {
         %(where_clause)s
+        OPTIONAL { ?song nmm:composer ?composer . }
         ?album a nmm:MusicAlbum ;
                nmm:albumArtist ?albumArtist ;
                nie:title ?title .
@@ -199,11 +204,13 @@ class Query():
         ?url
         nie:title(?song) AS ?title
         nmm:artistName (nmm:performer(?song)) AS ?artist
+        nmm:artistName (?composer) AS ?author
         nie:title (nmm:musicAlbum (?song)) AS ?album
         nfo:duration (?song) AS ?duration
         IF (BOUND (?tag), 'b', '') AS ?lyrics
     {
         %(where_clause)s
+        OPTIONAL { ?song nmm:composer ?composer . }
         ?song a nmm:MusicPiece ;
             nmm:musicAlbumDisc ?disc ;
             nmm:musicAlbum ?album ;
@@ -264,6 +271,7 @@ class Query():
         ?song a nmm:MusicPiece ;
               a nfo:FileDataObject ;
               nmm:musicAlbum ?album .
+        OPTIONAL { ?song nmm:composer ?composer . }
         OPTIONAL { ?song nao:hasTag ?tag .
                    FILTER( ?tag = nao:predefined-tag-favorite ) } .
         FILTER (tracker:id(?album) = %(album_id)s &&
@@ -851,7 +859,6 @@ class Query():
                 }
             }
             '''.replace('\n', ' ').strip() % {'name': name}
-
         return Query.albums(query)
 
     @staticmethod
@@ -862,6 +869,13 @@ class Query():
         return Query.albums(query)
 
     @staticmethod
+    def get_albums_with_composer_match(name):
+        name = Tracker.sparql_escape_string(name)
+        query = '?composer fts:match "nmm:artistName: %(name)s*" . '.replace('\n', ' ').strip() % {'name': name}
+
+        return Query.albums(query)
+
+    @staticmethod
     def get_albums_with_album_match(name):
         name = Tracker.sparql_escape_string(name)
         query = '?album fts:match "nie:title: %(name)s*" . '.replace('\n', ' ').strip() % {'name': name}
@@ -909,6 +923,13 @@ class Query():
         return Query.artists(query)
 
     @staticmethod
+    def get_artists_with_composer_match(name):
+        name = Tracker.sparql_escape_string(name)
+        query = '?composer fts:match "nmm:artistName: %(name)s*" . '.replace('\n', ' ').strip() % {'name': name}
+
+        return Query.artists(query)
+
+    @staticmethod
     def get_artists_with_album_match(name):
         name = Tracker.sparql_escape_string(name)
         query = '?album fts:match "nie:title: %(name)s*" . '.replace('\n', ' ').strip() % {'name': name}
@@ -956,6 +977,13 @@ class Query():
         return Query.songs(query)
 
     @staticmethod
+    def get_songs_with_composer_match(name):
+        name = Tracker.sparql_escape_string(name)
+        query = '?composer fts:match "nmm:artistName: %(name)s*" . '.replace('\n', ' ').strip() % {'name': name}
+
+        return Query.songs(query)
+
+    @staticmethod
     def get_songs_with_album_match(name):
         name = Tracker.sparql_escape_string(name)
         query = '?album fts:match "nie:title: %(name)s*" . '.replace('\n', ' ').strip() % {'name': name}
diff --git a/gnomemusic/searchbar.py b/gnomemusic/searchbar.py
index c3ab3ce..abeacae 100644
--- a/gnomemusic/searchbar.py
+++ b/gnomemusic/searchbar.py
@@ -61,6 +61,7 @@ class BaseManager:
                 ['', '', self.label],
                 ['search_all', _("All"), ''],
                 ['search_artist', _("Artist"), ''],
+                ['search_composer', _("Composer"), ''],
                 ['search_album', _("Album"), ''],
                 ['search_track', _("Track Title"), ''],
             ]
diff --git a/gnomemusic/view.py b/gnomemusic/view.py
index 57328a0..a85236a 100644
--- a/gnomemusic/view.py
+++ b/gnomemusic/view.py
@@ -86,7 +86,8 @@ class ViewContainer(Gtk.Stack):
             GObject.TYPE_STRING,
             GObject.TYPE_INT,
             GObject.TYPE_BOOLEAN,
-            GObject.TYPE_INT
+            GObject.TYPE_INT,
+            GObject.TYPE_STRING
         )
         self.view = Gd.MainView(
             shadow_type=Gtk.ShadowType.NONE
@@ -217,15 +218,19 @@ class ViewContainer(Gtk.Stack):
         artist = item.get_string(Grl.METADATA_KEY_ARTIST)\
             or item.get_artist() \
             or _("Unknown Artist")
+        composer = item.get_string(Grl.METADATA_KEY_AUTHOR)\
+            or item.get_author()\
+            or _("Unknown Composer")
+
         title = albumArtCache.get_media_title(item)
         # item.set_title(title)
 
         _iter = self.model.append(None)
         self.model.set(_iter,
-                       [0, 1, 2, 3, 4, 5, 7, 9],
+                       [0, 1, 2, 3, 4, 5, 7, 9, 12],
                        [str(item.get_id()), '', title,
                         artist, self._loadingIcon, item,
-                        0, False])
+                        0, False, composer])
         self.cache.lookup(item, self._iconWidth, self._iconHeight, self._on_lookup_ready,
                           _iter, artist, title)
 
@@ -348,7 +353,9 @@ class Albums(ViewContainer):
         title = self.model.get_value(_iter, 2)
         self._artist = self.model.get_value(_iter, 3)
         item = self.model.get_value(_iter, 5)
-        self._albumWidget.update(self._artist, title, item,
+        self._composer = self.model.get_value(_iter,12)
+
+        self._albumWidget.update(self._artist, self._composer, title, item,
                                  self.header_bar, self.selection_toolbar)
         self.header_bar.set_state(ToolbarState.CHILD_VIEW)
         self._escaped_title = albumArtCache.get_media_title(item)
@@ -477,6 +484,7 @@ class Songs(ViewContainer):
         artist = item.get_string(Grl.METADATA_KEY_ARTIST)\
             or item.get_artist() \
             or _("Unknown Artist")
+
         if item.get_url() is None:
             return
         self.model.insert_with_valuesv(
@@ -1456,6 +1464,9 @@ class Search(ViewContainer):
             or _("Unknown Artist")
         album = item.get_string(Grl.METADATA_KEY_ALBUM) \
             or _("Unknown Album")
+        composer = item.get_string(Grl.METADATA_KEY_AUTHOR) \
+            or item.get_author() \
+            or _("Unknown Composer")
 
         key = '%s-%s' % (artist, album)
         if key not in self._albums:
@@ -1463,10 +1474,10 @@ class Search(ViewContainer):
             self._albums[key].set_title(album)
             self._albums[key].add_artist(artist)
             self._albums[key].set_source(source.get_id())
+            self._albums[key].set_author(composer)
             self._albums[key].tracks = []
             self._add_item(source, None, self._albums[key], 0, [self.model, 'album'])
             self._add_item(source, None, self._albums[key], 0, [self.model, 'artist'])
-
         self._albums[key].tracks.append(item)
         self._add_item(source, None, item, 0, [self.model, 'song'])
 
@@ -1506,6 +1517,9 @@ class Search(ViewContainer):
         artist = item.get_string(Grl.METADATA_KEY_ARTIST) \
             or item.get_artist() \
             or _("Unknown Artist")
+        composer = item.get_string(Grl.METADATA_KEY_AUTHOR) \
+            or item.get_author() \
+            or _("Unknown Composer")
 
         group = 3
         try:
@@ -1517,26 +1531,27 @@ class Search(ViewContainer):
         if category == 'album':
             _iter = self.model.insert_with_values(
                 self.head_iters[group], -1,
-                [0, 2, 3, 4, 5, 9, 11],
+                [0, 2, 3, 4, 5, 9, 11, 13],
                 [str(item.get_id()), title, artist,
-                 self._loadingIcon, item, 2, category])
+                 self._loadingIcon, item, 2, category, composer])
             self.cache.lookup(item, self._iconWidth, self._iconHeight, self._on_lookup_ready,
                               _iter, artist, title)
         elif category == 'song':
             _iter = self.model.insert_with_values(
                 self.head_iters[group], -1,
-                [0, 2, 3, 4, 5, 9, 11],
-                [str(item.get_id()), title, artist,
-                 self._noAlbumArtIcon, item, 2 if source.get_id() != 'grl-tracker-source' else bool(item.get_lyrics()), category])
+                [0, 2, 3, 4, 5, 9, 11, 13],
+                [str(item.get_id()), title, artist, self._noAlbumArtIcon, item,
+                 2 if source.get_id() != 'grl-tracker-source' else bool(item.get_lyrics()),
+                 category, composer])
         else:
             if not artist.casefold() in self._artists:
                 _iter = self.model.insert_with_values(
                     self.head_iters[group], -1,
-                    [0, 2, 4, 5, 9, 11],
+                    [0, 2, 4, 5, 9, 11, 13],
                     [str(item.get_id()), artist,
                      self._loadingIcon, item, 2, category])
                 self.cache.lookup(item, self._iconWidth, self._iconHeight, self._on_lookup_ready,
-                                  _iter, artist, title)
+                                  _iter, artist, title, composer)
                 self._artists[artist.casefold()] = {'iter': _iter, 'albums': []}
 
             self._artists[artist.casefold()]['albums'].append(item)
@@ -1690,18 +1705,21 @@ class Search(ViewContainer):
             'album': {
                 'search_all': Query.get_albums_with_any_match,
                 'search_artist': Query.get_albums_with_artist_match,
+                'search_composer': Query.get_albums_with_composer_match,
                 'search_album': Query.get_albums_with_album_match,
                 'search_track': Query.get_albums_with_track_match,
             },
             'artist': {
                 'search_all': Query.get_artists_with_any_match,
                 'search_artist': Query.get_artists_with_artist_match,
+                'search_composer': Query.get_artists_with_composer_match,
                 'search_album': Query.get_artists_with_album_match,
                 'search_track': Query.get_artists_with_track_match,
             },
             'song': {
                 'search_all': Query.get_songs_with_any_match,
                 'search_artist': Query.get_songs_with_artist_match,
+                'search_composer': Query.get_songs_with_composer_match,
                 'search_album': Query.get_songs_with_album_match,
                 'search_track': Query.get_songs_with_track_match,
             },
@@ -1720,7 +1738,8 @@ class Search(ViewContainer):
             GObject.TYPE_INT,
             GObject.TYPE_BOOLEAN,
             GObject.TYPE_STRING,    # type
-            GObject.TYPE_INT
+            GObject.TYPE_INT,
+            GObject.TYPE_STRING,
         )
         self.filter_model = self.model.filter_new(None)
         self.filter_model.set_visible_func(self._filter_visible_func)
diff --git a/gnomemusic/widgets.py b/gnomemusic/widgets.py
index 284ce47..329a64f 100644
--- a/gnomemusic/widgets.py
+++ b/gnomemusic/widgets.py
@@ -240,7 +240,7 @@ class AlbumWidget(Gtk.EventBox):
         )
 
     @log
-    def update(self, artist, album, item, header_bar, selection_toolbar):
+    def update(self, artist, composer, album, item, header_bar, selection_toolbar):
         self.selection_toolbar = selection_toolbar
         self.header_bar = header_bar
         self.album = album
@@ -264,6 +264,9 @@ class AlbumWidget(Gtk.EventBox):
         escaped_album = GLib.markup_escape_text(album)
         self.ui.get_object('artist_label').set_markup(escaped_artist)
         self.ui.get_object('title_label').set_markup(escaped_album)
+        if(composer):
+            escaped_composer = GLib.markup_escape_text(composer)
+            self.ui.get_object('composer_label_info').set_markup(escaped_composer)
         if (item.get_creation_date()):
             self.ui.get_object('released_label_info').set_text(
                 str(item.get_creation_date().get_year()))
diff --git a/libgd b/libgd
--- a/libgd
+++ b/libgd
@@ -1 +1 @@
-Subproject commit a0717ad8c078c07ea9d10aed385d30198fd24b03
+Subproject commit a0717ad8c078c07ea9d10aed385d30198fd24b03-dirty
