diff --git a/qt4/src/CMakeLists.txt b/qt4/src/CMakeLists.txt
index 99dce58..8dc611a 100644
--- a/qt4/src/CMakeLists.txt
+++ b/qt4/src/CMakeLists.txt
@@ -15,6 +15,7 @@ set(poppler_qt4_SRCS
   poppler-link.cc
   poppler-link-extractor.cc
   poppler-movie.cc
+  poppler-objectreference.cc
   poppler-optcontent.cc
   poppler-page.cc
   poppler-base-converter.cc
@@ -41,6 +42,7 @@ install(FILES
   poppler-link.h
   poppler-annotation.h
   poppler-form.h
+  poppler-objectreference.h
   poppler-optcontent.h
   poppler-export.h
   poppler-page-transition.h
diff --git a/qt4/src/poppler-annotation-private.h b/qt4/src/poppler-annotation-private.h
index b428347..b49ef4d 100644
--- a/qt4/src/poppler-annotation-private.h
+++ b/qt4/src/poppler-annotation-private.h
@@ -42,6 +42,7 @@ class AnnotationPrivate
         QRectF boundary;
 
         QLinkedList< Annotation::Revision > revisions;
+        ObjectReference pdfObjectReference;
 };
 
 }
diff --git a/qt4/src/poppler-annotation.cc b/qt4/src/poppler-annotation.cc
index 0905ee3..9bdcd75 100644
--- a/qt4/src/poppler-annotation.cc
+++ b/qt4/src/poppler-annotation.cc
@@ -439,6 +439,18 @@ const QLinkedList< Annotation::Revision >& Annotation::revisions() const
     return d->revisions;
 }
 
+void Annotation::setPdfObjectReference( const ObjectReference &reference )
+{
+    Q_D( Annotation );
+    d->pdfObjectReference = reference;
+}
+
+ObjectReference Annotation::pdfObjectReference() const
+{
+    Q_D( const Annotation );
+    return d->pdfObjectReference;
+}
+
 //END AnnotationUtils implementation
 
 
diff --git a/qt4/src/poppler-annotation.h b/qt4/src/poppler-annotation.h
index ae90d71..2180fd4 100644
--- a/qt4/src/poppler-annotation.h
+++ b/qt4/src/poppler-annotation.h
@@ -33,6 +33,7 @@
 #include <QtGui/QFont>
 #include <QtXml/QDomDocument>
 #include "poppler-export.h"
+#include "poppler-objectreference.h"
 
 namespace Poppler {
 
@@ -208,6 +209,18 @@ class POPPLER_QT4_EXPORT Annotation
      */
     virtual ~Annotation();
 
+    /**
+     * Sets the PDF object @p reference.
+     */
+    void setPdfObjectReference(const ObjectReference &reference);
+
+    /**
+     * Returns the PDF object reference of this annotation.
+     *
+     * This one is needed to resolve references from other objects (e.g. Movie Actions).
+     */
+    ObjectReference pdfObjectReference() const;
+
   protected:
     /// \cond PRIVATE
     Annotation( AnnotationPrivate &dd );
diff --git a/qt4/src/poppler-link.cc b/qt4/src/poppler-link.cc
index 68c607a..f02188f 100644
--- a/qt4/src/poppler-link.cc
+++ b/qt4/src/poppler-link.cc
@@ -167,18 +167,20 @@ class LinkJavaScriptPrivate : public LinkPrivate
 	{
 	}
 
-#if 0
 class LinkMoviePrivate : public LinkPrivate
 {
 	public:
 		LinkMoviePrivate( const QRectF &area );
+
+		LinkMovie::Operation operation;
+		QString annotationTitle;
+		ObjectReference annotationReference;
 };
 
 	LinkMoviePrivate::LinkMoviePrivate( const QRectF &area )
-		: LinkPrivate( area )
+		: LinkPrivate( area ), operation( LinkMovie::Play )
 	{
 	}
-#endif
 
 	static void cvtUserToDev(::Page *page, double xu, double yu, int *xd, int *yd) {
 		double ctm[6];
@@ -567,11 +569,14 @@ class LinkMoviePrivate : public LinkPrivate
 		return d->js;
 	}
 
-#if 0
 	// LinkMovie
-	LinkMovie::LinkMovie( const QRectF &linkArea )
+	LinkMovie::LinkMovie( const QRectF &linkArea, Operation operation, const QString &annotationTitle, const ObjectReference &annotationReference )
 		: Link( *new LinkMoviePrivate( linkArea ) )
 	{
+		Q_D( LinkMovie );
+		d->operation = operation;
+		d->annotationTitle = annotationTitle;
+		d->annotationReference = annotationReference;
 	}
 	
 	LinkMovie::~LinkMovie()
@@ -582,6 +587,25 @@ class LinkMoviePrivate : public LinkPrivate
 	{
 		return Movie;
 	}
-#endif
+	
+	LinkMovie::Operation LinkMovie::operation() const
+	{
+		Q_D( const LinkMovie );
+		return d->operation;
+	}
+
+	bool LinkMovie::isReferencedAnnotation( const MovieAnnotation *annotation ) const
+	{
+		Q_D( const LinkMovie );
+		if ( d->annotationReference == annotation->pdfObjectReference() )
+		{
+			return true;
+		}
+		else if ( !d->annotationTitle.isNull() )
+		{
+			return ( annotation->movieTitle() == d->annotationTitle );
+		}
 
+		return false;
+	}
 }
diff --git a/qt4/src/poppler-link.h b/qt4/src/poppler-link.h
index 1aa6d78..f0047a7 100644
--- a/qt4/src/poppler-link.h
+++ b/qt4/src/poppler-link.h
@@ -27,6 +27,7 @@
 #include <QtCore/QRectF>
 #include <QtCore/QSharedDataPointer>
 #include "poppler-export.h"
+#include "poppler-objectreference.h"
 
 namespace Poppler {
 
@@ -471,21 +472,39 @@ class POPPLER_QT4_EXPORT LinkJavaScript : public Link
 		Q_DISABLE_COPY( LinkJavaScript )
 };	
 
-#if 0
-/** Movie: Not yet defined -> think renaming to 'Media' link **/
 class POPPLER_QT4_EXPORT LinkMovie : public Link
-// TODO this (Movie link)
 {
 	public:
-		LinkMovie( const QRectF &linkArea );
+		/**
+		 * Describes the operation to be performed on the movie.
+		 */
+		enum Operation { Play,
+		                 Stop,
+		                 Pause,
+		                 Resume
+		};
+
+		/**
+		 * Create a new Movie link.
+		 *
+		 * \param linkArea the active area of the link
+		 * \param operation the operation to be performed on the movie
+		 * \param annotationTitle the title of the movie annotation identifying the movie to be played
+		 * \param annotationReference the object reference of the movie annotation identifying the movie to be played
+		 */
+		LinkMovie( const QRectF &linkArea, Operation operation, const QString &annotationTitle, const ObjectReference &annotationReference );
 		~LinkMovie();
 		LinkType linkType() const;
+		Operation operation() const;
+		/**
+		 * Returns whether the given @p annotation is the referenced movie annotation for this movie @p link.
+		 */
+		bool isReferencedAnnotation( const MovieAnnotation *annotation ) const;
 
 	private:
 		Q_DECLARE_PRIVATE( LinkMovie )
 		Q_DISABLE_COPY( LinkMovie )
 };
-#endif
 
 }
 
diff --git a/qt4/src/poppler-objectreference.cc b/qt4/src/poppler-objectreference.cc
new file mode 100644
index 0000000..3124fb7
--- /dev/null
+++ b/qt4/src/poppler-objectreference.cc
@@ -0,0 +1,92 @@
+/* poppler-objectreference.h: qt interface to poppler
+ *
+ * Copyright (C) 2012, Tobias Koenig <tokoe@kdab.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "poppler-objectreference.h"
+
+namespace Poppler {
+
+  class ObjectReferencePrivate
+  {
+    public:
+      ObjectReferencePrivate()
+        : m_number( -1 ), m_generation( -1 )
+      {
+      }
+
+      ObjectReferencePrivate( int number, int generation )
+        : m_number( number ), m_generation( generation )
+      {
+      }
+
+      int m_number;
+      int m_generation;
+  };
+
+}
+
+using namespace Poppler;
+
+ObjectReference::ObjectReference()
+  : d( new ObjectReferencePrivate() )
+{
+}
+
+ObjectReference::ObjectReference( int number, int generation )
+  : d( new ObjectReferencePrivate( number, generation ) )
+{
+}
+
+ObjectReference::ObjectReference( const ObjectReference &other )
+  : d( new ObjectReferencePrivate( other.d->m_number, other.d->m_generation ) )
+{
+}
+
+ObjectReference::~ObjectReference()
+{
+  delete d;
+}
+
+ObjectReference& ObjectReference::operator=( const ObjectReference &other )
+{
+  if ( this != &other )
+  {
+    d->m_number = other.d->m_number;
+    d->m_generation = other.d->m_generation;
+  }
+
+  return *this;
+}
+
+bool ObjectReference::isValid() const
+{
+  return ( d->m_number != -1 );
+}
+
+bool ObjectReference::operator==( const ObjectReference &other ) const
+{
+  if ( !isValid() || !other.isValid() )
+    return false;
+
+  return ( ( d->m_number == other.d->m_number ) && ( d->m_generation == other.d->m_generation ) );
+}
+
+bool ObjectReference::operator!=( const ObjectReference &other ) const
+{
+  return !operator==( other );
+}
diff --git a/qt4/src/poppler-objectreference.h b/qt4/src/poppler-objectreference.h
new file mode 100644
index 0000000..9b9e990
--- /dev/null
+++ b/qt4/src/poppler-objectreference.h
@@ -0,0 +1,79 @@
+/* poppler-objectreference.h: qt interface to poppler
+ *
+ * Copyright (C) 2012, Tobias Koenig <tokoe@kdab.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef POPPLER_OBJECTREFERENCE_H
+#define POPPLER_OBJECTREFERENCE_H
+
+#include "poppler-export.h"
+
+namespace Poppler
+{
+  class ObjectReferencePrivate;
+
+  /**
+   * \brief Reference of a PDF object
+   *
+   * ObjectReference is a class that encapsulates a reference to a PDF object.
+   * It is needed to store (and later on resolve) references between various PDF entities.
+   *
+   * \since 0.8
+   */
+  class POPPLER_QT4_EXPORT ObjectReference
+  {
+    public:
+      /**
+       * Creates a new, invalid ObjectReference.
+       */
+      ObjectReference();
+
+      /**
+       * Creates a new ObjectReference.
+       *
+       * @param number The number of the PDF object.
+       * @param generation The generation of the PDF object.
+       */
+      ObjectReference( int number, int generation );
+
+      /**
+       * Creates a new ObjectReference from an @p other one.
+       */
+      ObjectReference( const ObjectReference &other );
+
+      /**
+       * Destroys the ObjectReference.
+       */
+      ~ObjectReference();
+
+      ObjectReference& operator=( const ObjectReference &other );
+
+      /**
+       * Returns whether the object reference is valid.
+       */
+      bool isValid() const;
+
+      bool operator==( const ObjectReference &other ) const;
+
+      bool operator!=( const ObjectReference &other ) const;
+
+    private:
+      ObjectReferencePrivate * const d;
+  };
+}
+
+#endif
diff --git a/qt4/src/poppler-page.cc b/qt4/src/poppler-page.cc
index 398a69b..e47743a 100644
--- a/qt4/src/poppler-page.cc
+++ b/qt4/src/poppler-page.cc
@@ -171,15 +171,33 @@ Link* PageData::convertLinkActionToLink(::LinkAction * a, DocumentData *parentDo
     break;
 
     case actionMovie:
-/*      TODO this (Movie link)
-          m_type = Movie;
-          LinkMovie * m = (LinkMovie *) a;
-          // copy Movie parameters (2 IDs and a const char *)
-          Ref * r = m->getAnnotRef();
-          m_refNum = r->num;
-          m_refGen = r->gen;
-          copyString( m_uri, m->getTitle()->getCString() );
-*/  break;
+    {
+      ::LinkMovie *lm = (::LinkMovie *)a;
+
+      const QString title = ( lm->hasAnnotTitle() ? UnicodeParsedString( lm->getAnnotTitle() ) : QString() );
+
+      const ObjectReference reference = ( lm->hasAnnotRef() ? ObjectReference( lm->getAnnotRef()->num, lm->getAnnotRef()->gen ) : ObjectReference() );
+
+      LinkMovie::Operation operation = LinkMovie::Play;
+      switch ( lm->getOperation() )
+      {
+        case ::LinkMovie::operationTypePlay:
+          operation = LinkMovie::Play;
+          break;
+        case ::LinkMovie::operationTypePause:
+          operation = LinkMovie::Pause;
+          break;
+        case ::LinkMovie::operationTypeResume:
+          operation = LinkMovie::Resume;
+          break;
+        case ::LinkMovie::operationTypeStop:
+          operation = LinkMovie::Stop;
+          break;
+      };
+
+      popplerLink = new LinkMovie( linkArea, operation, title, reference );
+    }
+    break;
 
     case actionUnknown:
     break;
@@ -1029,6 +1047,8 @@ QList<Annotation*> Page::annotations() const
            //annotation->rUnscaledHeight = (r[3] > r[1]) ? r[3] - r[1] : r[1] - r[3];
         }
         annotation->setBoundary( boundaryRect );
+        // -> PDF object reference
+        annotation->setPdfObjectReference( ObjectReference( ann->getRef().num, ann->getRef().gen ) );
         // -> contents
         annotation->setContents( UnicodeParsedString( ann->getContents() ) );
         // -> uniqueName