diff --git a/src/tracker-extract/tracker-extract-pdf.c b/src/tracker-extract/tracker-extract-pdf.c
index ff2c6a6..488c4af 100644
--- a/src/tracker-extract/tracker-extract-pdf.c
+++ b/src/tracker-extract/tracker-extract-pdf.c
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2006, Mr Jamie McCracken (jamiemcc@gnome.org)
  * Copyright (C) 2008-2009, Nokia
+ * Copyright (C) 2010, Amit Aggarwal (amitcs06@gmail.com)
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public
@@ -44,6 +45,14 @@ typedef struct {
 	gchar *keywords;
 } PDFData;
 
+typedef struct {
+        GString *title;
+        GString *uri;
+        GString *file_name;
+        GString *params;
+        GString *named_dest;
+} PDFIndexData;
+
 static void extract_pdf (const gchar          *uri,
                          TrackerSparqlBuilder *preupdate,
                          TrackerSparqlBuilder *metadata);
@@ -54,6 +63,169 @@ static TrackerExtractData data[] = {
 };
 
 static void
+read_index (PopplerIndexIter *index,
+            PDFIndexData     *id)
+{
+        if (!index) {
+                return;
+        }
+
+        do {
+                PopplerAction *action;
+                PopplerIndexIter *iter;
+
+                action = poppler_index_iter_get_action (index);
+
+                if (!action) {
+                        continue;
+                }
+
+                switch (action->type) {
+                case POPPLER_ACTION_GOTO_DEST: {
+                        PopplerActionGotoDest *ag = (PopplerActionGotoDest*) action;
+                        PopplerDest *agd = ag->dest;
+
+                        if (ag->title) {
+                                g_string_append (id->title, ag->title);
+                                g_string_append_c (id->title, ' ');
+                        }
+
+                        if (agd->named_dest) {
+                                g_string_append (id->named_dest, agd->named_dest);
+                                g_string_append_c (id->named_dest, ' ');
+                        }
+
+                        break;
+                }
+
+                case POPPLER_ACTION_LAUNCH: {
+                        PopplerActionLaunch *al = (PopplerActionLaunch*) action;
+
+                        if (al->title) {
+                                g_string_append (id->title, al->title);
+                                g_string_append_c (id->title, ' ');
+                        }
+
+                        if (al->file_name) {
+                                g_string_append (id->file_name, al->file_name);
+                                g_string_append_c (id->file_name, ' ');
+                        }
+
+                        if (al->params) {
+                                g_string_append (id->params, al->params);
+                                g_string_append_c (id->params, ' ');
+                        }
+
+                        break;
+                }
+
+                case POPPLER_ACTION_URI: {
+                        PopplerActionUri *au = (PopplerActionUri*) action;
+
+                        if (au->uri) {
+                                g_string_append (id->uri, au->uri);
+                                g_string_append_c (id->uri, ' ');
+                        }
+
+                        break;
+                }
+
+                case POPPLER_ACTION_NAMED: {
+                        PopplerActionNamed *an = (PopplerActionNamed*) action;
+
+                        if (an->title) {
+                                g_string_append (id->title, an->title);
+                                g_string_append_c (id->title, ' ');
+                        }
+
+                        if (an->named_dest) {
+                                g_string_append (id->named_dest, an->named_dest);
+                                g_string_append_c (id->named_dest, ' ');
+                        }
+
+                        break;
+                }
+
+                case POPPLER_ACTION_MOVIE: {
+                        PopplerActionNamed *am = (PopplerActionNamed*) action;
+
+                        if (am->title) {
+                                g_string_append (id->title, am->title);
+                                g_string_append_c (id->title, ' ');
+                        }
+
+                        break;
+                }
+
+                case POPPLER_ACTION_NONE:
+                case POPPLER_ACTION_UNKNOWN:
+                case POPPLER_ACTION_GOTO_REMOTE:
+                        /* Do nothing */
+                        break;
+                }
+
+                iter = poppler_index_iter_get_child (index);
+                read_index (iter, id);
+
+        } while (poppler_index_iter_next (index));
+
+        poppler_index_iter_free (index);
+}
+
+static void
+read_outline (PopplerDocument      *document,
+              TrackerSparqlBuilder *metadata)
+{
+        PopplerIndexIter *index;
+        PDFIndexData id;
+
+        index = poppler_index_iter_new (document);
+
+        if (!index) {
+                return;
+        }
+
+        id.title = g_string_new ("");
+        id.uri = g_string_new ("");
+        id.file_name = g_string_new ("");
+        id.params = g_string_new ("");
+        id.named_dest = g_string_new ("");
+
+        read_index (index, &id);
+
+        if (id.title->len != 0){
+                tracker_sparql_builder_predicate (metadata, "nie:plainTextContent");
+                tracker_sparql_builder_object_unvalidated (metadata, id.title->str);
+        }
+
+        if (id.uri->len != 0){
+                tracker_sparql_builder_predicate (metadata, "nie:plainTextContent");
+                tracker_sparql_builder_object_unvalidated (metadata, id.uri->str);
+        }
+
+        if (id.file_name->len != 0){
+                tracker_sparql_builder_predicate (metadata, "nie:plainTextContent");
+                tracker_sparql_builder_object_unvalidated (metadata, id.file_name->str);
+        }
+
+        if (id.params->len != 0){
+                tracker_sparql_builder_predicate (metadata, "nie:plainTextContent");
+                tracker_sparql_builder_object_unvalidated (metadata, id.params->str);
+        }
+
+        if (id.named_dest->len != 0){
+                tracker_sparql_builder_predicate (metadata, "nie:plainTextContent");
+                tracker_sparql_builder_object_unvalidated (metadata, id.named_dest->str);
+        }
+
+        g_string_free (id.title, TRUE);
+        g_string_free (id.uri, TRUE);
+        g_string_free (id.file_name, TRUE);
+        g_string_free (id.params, TRUE);
+        g_string_free (id.named_dest, TRUE);
+}
+
+static void
 insert_keywords (TrackerSparqlBuilder *metadata,
                  gchar                *keywords)
 {
@@ -464,6 +636,8 @@ extract_pdf (const gchar          *uri,
 		g_free (content);
 	}
 
+        read_outline (document, metadata);
+
 	g_object_unref (document);
 }
 
