diff --git a/src/tracker-extract/tracker-extract-pdf.c b/src/tracker-extract/tracker-extract-pdf.c
index ff2c6a6..a005aeb 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)
+ * Copyright (C) 2010, Nokia
  *
  * 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);
@@ -53,6 +62,148 @@ static TrackerExtractData data[] = {
 	{ NULL, NULL }
 };
 
+static void 
+read_index(PopplerIndexIter *index,
+           PDFIndexData *id)
+{
+    if (!index)
+        return;
+
+    PopplerIndexIter *childIter = 0;
+    PopplerAction *action = 0;
+    PopplerActionGotoDest *action_goto = 0;
+    PopplerDest *destination = 0;
+    PopplerActionLaunch *action_launch = 0;
+    PopplerActionUri *action_uri = 0;
+    PopplerActionNamed *action_named = 0;
+    PopplerActionNamed *action_movie = 0;
+
+    do
+    {
+        action = poppler_index_iter_get_action (index);
+        if (!action)
+            return;
+
+        switch (action->type) {
+        case POPPLER_ACTION_GOTO_DEST:
+            action_goto = (PopplerActionGotoDest *)action;
+            if (action_goto->title) {
+                g_string_append (id->title, action_goto->title);
+                g_string_append_c (id->title, ' ');
+            }
+
+            destination = action_goto->dest;
+            if (destination && destination->named_dest) {
+                g_string_append (id->named_dest, destination->named_dest);
+                g_string_append_c (id->named_dest, ' ');
+            }
+            break;
+
+        case POPPLER_ACTION_LAUNCH:
+            action_launch = (PopplerActionLaunch *)action;
+            if (action_launch->title) {
+                g_string_append (id->title, action_launch->title);
+                g_string_append_c (id->title, ' ');
+            }
+            if (action_launch->file_name) {
+                g_string_append (id->file_name, action_launch->file_name);
+                g_string_append_c (id->file_name, ' ');
+            }
+            if (action_launch->params) {
+                g_string_append (id->params, action_launch->params);
+                g_string_append_c (id->params, ' ');
+            }
+            break;
+
+        case POPPLER_ACTION_URI:
+            action_uri = (PopplerActionUri *)action;
+            if (action_uri->uri) {
+                g_string_append (id->uri, action_uri->uri);
+                g_string_append_c (id->uri, ' ');
+            }
+            break;
+
+        case POPPLER_ACTION_NAMED:
+            action_named = (PopplerActionNamed *)action;
+            if (action_named->title) {
+                g_string_append (id->title, action_named->title);
+                g_string_append_c (id->title, ' ');
+            }
+            if (action_named->named_dest) {
+                g_string_append (id->named_dest, action_named->named_dest);
+                g_string_append_c (id->named_dest, ' ');
+            }
+            break;
+
+        case POPPLER_ACTION_MOVIE:
+            action_movie = (PopplerActionNamed *)action;
+            if (action_movie->title) {
+                g_string_append (id->title, action_movie->title);
+                g_string_append_c (id->title, ' ');
+            }
+            break;
+        default:
+            g_warning ("read_index action type:'%d', "
+		       "not handle",
+                       action->type );
+            break;
+        }
+        childIter = poppler_index_iter_get_child (index);
+        read_index (childIter, id);
+
+    }while ( poppler_index_iter_next (index) );
+    //Free the memory we are done!!
+    poppler_index_iter_free (index);
+}
+
+static void 
+read_outline(PopplerDocument *document,
+             TrackerSparqlBuilder *metadata) 
+{
+    PopplerIndexIter *index = poppler_index_iter_new (document);
+    if (!index)
+        return;
+    
+    PDFIndexData id;
+    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)
@@ -463,6 +614,7 @@ extract_pdf (const gchar          *uri,
 		tracker_sparql_builder_object_unvalidated (metadata, content);
 		g_free (content);
 	}
+        read_outline(document, metadata);
 
 	g_object_unref (document);
 }
