diff --git a/src/tracker-extract/tracker-extract-pdf.c b/src/tracker-extract/tracker-extract-pdf.c
index ff2c6a6..0636e6c 100644
--- a/src/tracker-extract/tracker-extract-pdf.c
+++ b/src/tracker-extract/tracker-extract-pdf.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2006, Mr Jamie McCracken (jamiemcc@gnome.org)
+ * Copyright (C) 2010, Amit Aggarwal (amitcs06@gmail.com)
  * Copyright (C) 2008-2009, Nokia
  *
  * This program is free software; you can redistribute it and/or
@@ -44,6 +45,15 @@ 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 +63,119 @@ static TrackerExtractData data[] = {
 	{ NULL, NULL }
 };
 
+static void readOutline(PopplerDocument *document, TrackerSparqlBuilder *metadata) 
+{
+    PopplerIndexIter *index = poppler_index_iter_new (document);
+    if (index) {
+        PDFIndexData id= { 0 };
+        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 ("");
+        readIndex(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);
+    }
+}
+
+void readIndex(PopplerIndexIter *index, PDFIndexData *id)
+{
+    if ( NULL != index)
+    {
+        do
+        {
+            PopplerAction *action = poppler_index_iter_get_action (index);
+            if(action) {
+                if ( POPPLER_ACTION_GOTO_DEST == action->type )
+                {
+                    PopplerActionGotoDest *actionGoTo = (PopplerActionGotoDest *)action;
+                    if(actionGoTo && actionGoTo->title) {
+                        g_string_append (id->title, actionGoTo->title);
+         		g_string_append_c (id->title, ' ');
+                    }
+                    PopplerDest *destination = actionGoTo->dest;
+                    if(destination && destination->named_dest) {
+                        g_string_append (id->named_dest, destination->named_dest);
+                        g_string_append_c (id->named_dest, ' ');
+                    }
+                } 
+                else if (POPPLER_ACTION_LAUNCH == action->type) {
+                    PopplerActionLaunch *actionLaunch = (PopplerActionLaunch *)action;
+                    if(actionLaunch && actionLaunch->title) {
+                        g_string_append (id->title, actionLaunch->title);
+                        g_string_append_c (id->title, ' ');
+                    }
+                    if(actionLaunch && actionLaunch->file_name) {
+                        g_string_append (id->file_name, actionLaunch->file_name);
+                        g_string_append_c (id->file_name, ' ');
+                    }
+                    if(actionLaunch && actionLaunch->params) {
+                        g_string_append (id->params, actionLaunch->params);
+                        g_string_append_c (id->params, ' ');
+                    }
+                } 
+                else if (POPPLER_ACTION_URI == action->type) {
+                    PopplerActionUri *actionUri = (PopplerActionUri *)action;
+                    if(actionUri && actionUri->uri) {
+                        g_string_append (id->uri, actionUri->uri);
+                        g_string_append_c (id->uri, ' ');
+                    }
+                } 
+                else if (POPPLER_ACTION_NAMED == action->type) {
+                    PopplerActionNamed *actionNamed = (PopplerActionNamed *)action;
+                    if(actionNamed && actionNamed->title) {
+                        g_string_append (id->title, actionNamed->title);
+                        g_string_append_c (id->title, ' ');
+                    }
+                    if(actionNamed && actionNamed->named_dest) {
+                        g_string_append (id->named_dest, actionNamed->named_dest);
+                        g_string_append_c (id->named_dest, ' ');
+                    }
+                } 
+                else if (POPPLER_ACTION_MOVIE == action->type) {
+                    PopplerActionNamed *actionMovie = (PopplerActionNamed *)action;
+                    if(actionMovie && actionMovie->title) {
+                        g_string_append (id->title, actionMovie->title);
+                        g_string_append_c (id->title, ' ');
+                    }
+                }
+            }
+            PopplerIndexIter *childIter = poppler_index_iter_get_child (index);
+            readIndex (childIter, id);
+        }
+        while ( poppler_index_iter_next (index) );
+
+        poppler_index_iter_free (index);
+    }
+
+}
+
+
 static void
 insert_keywords (TrackerSparqlBuilder *metadata,
                  gchar                *keywords)
@@ -463,6 +586,7 @@ extract_pdf (const gchar          *uri,
 		tracker_sparql_builder_object_unvalidated (metadata, content);
 		g_free (content);
 	}
+        readOutline(document, metadata);
 
 	g_object_unref (document);
 }
