diff --git a/Manatee/Extension/PdfViewer/PdfView.hs b/Manatee/Extension/PdfViewer/PdfView.hs
--- a/Manatee/Extension/PdfViewer/PdfView.hs
+++ b/Manatee/Extension/PdfViewer/PdfView.hs
@@ -177,6 +177,7 @@
              ,("p",        pdfViewPrevPage)
              ,("N",        pdfViewLastPage)
              ,("P",        pdfViewFirstPage)
+             ,("g",        pdfViewGotoPage)
              ]
 
 -- | Get index range to render visible are.
@@ -202,53 +203,55 @@
       currIndex   = truncate $ (vAdjTop + vAdjSize / 2) / height
   return ([startIndex..endIndex], currIndex)
 
--- | View next page.
-pdfViewNextPage :: PdfView -> IO ()
-pdfViewNextPage PdfView {pdfViewBuffer          = buffer
-                        ,pdfViewPageIndex       = pageIndex
-                        ,pdfViewScale           = viewScale
-                        ,pdfViewScrolledWindow  = scrolledWindow} = do
-  currentIndex <- readTVarIO pageIndex 
+-- | Set page.
+pdfViewSetPage :: PdfView -> Int -> IO ()
+pdfViewSetPage view@(PdfView {pdfViewBuffer          = buffer
+                             ,pdfViewScale           = viewScale
+                             ,pdfViewScrolledWindow  = scrolledWindow}) page = do
   scaleValue   <- readTVarIO viewScale
   let (_, height) = pdfBufferPageSize buffer
-      maxIndex   = pdfBufferNPages buffer - 1
-      nextIndex 
-        | currentIndex >= maxIndex 
-            = maxIndex
-        | otherwise 
-            = currentIndex + 1
+      minIndex    = 0
+      maxIndex    = pdfBufferNPages buffer - 1
+  destIndex <-
+    if page < minIndex
+       then do
+         pageViewUpdateOutputStatus view "Out of bound, goto first page." Nothing 
+         return minIndex
+    else if page > maxIndex
+       then do
+         pageViewUpdateOutputStatus view "Out of bound, goto last page." Nothing
+         return maxIndex
+       else return page
   vAdj <- scrolledWindowGetVAdjustment scrolledWindow
-  adjustmentSetValue vAdj (i2d nextIndex * height * scaleValue)
+  adjustmentSetValue vAdj (i2d destIndex * height * scaleValue)
 
+-- | View next page.
+pdfViewNextPage :: PdfView -> IO ()
+pdfViewNextPage view@(PdfView {pdfViewPageIndex = pageIndex}) = do
+  currentIndex <- readTVarIO pageIndex 
+  pdfViewSetPage view (currentIndex + 1)
+
 -- | View prev page.
 pdfViewPrevPage :: PdfView -> IO ()
-pdfViewPrevPage PdfView {pdfViewBuffer          = buffer
-                        ,pdfViewPageIndex       = pageIndex
-                        ,pdfViewScale           = viewScale
-                        ,pdfViewScrolledWindow  = scrolledWindow} = do
+pdfViewPrevPage view@(PdfView {pdfViewPageIndex = pageIndex}) = do
   currentIndex <- readTVarIO pageIndex 
-  scaleValue   <- readTVarIO viewScale
-  let (_, height) = pdfBufferPageSize buffer
-      prevIndex 
-        | currentIndex <= 0
-            = 0
-        | otherwise 
-            = currentIndex - 1
-  vAdj <- scrolledWindowGetVAdjustment scrolledWindow
-  adjustmentSetValue vAdj (i2d prevIndex * height * scaleValue)
+  pdfViewSetPage view (currentIndex - 1)
 
 -- | First page.
 pdfViewFirstPage :: PdfView -> IO ()
-pdfViewFirstPage = pageViewScrollToTop
+pdfViewFirstPage view = 
+  pdfViewSetPage view 0
 
 -- | Last page.
 pdfViewLastPage :: PdfView -> IO ()
-pdfViewLastPage PdfView {pdfViewBuffer          = buffer
-                        ,pdfViewScale           = viewScale
-                        ,pdfViewScrolledWindow  = scrolledWindow} = do
-  let (_, height) = pdfBufferPageSize buffer
-      maxIndex   = pdfBufferNPages buffer - 1
-  scaleValue <- readTVarIO viewScale
-  vAdj <- scrolledWindowGetVAdjustment scrolledWindow
-  adjustmentSetValue vAdj (i2d maxIndex * height * scaleValue)
+pdfViewLastPage view@(PdfView {pdfViewBuffer = buffer}) = do
+  let maxIndex = pdfBufferNPages buffer - 1
+  pdfViewSetPage view maxIndex
 
+-- | Goto page.
+pdfViewGotoPage :: PdfView -> IO ()
+pdfViewGotoPage view@(PdfView {pdfViewBuffer = buffer}) = do
+  let maxPage = pdfBufferNPages buffer
+  localInteractive view ("nGoto page (1 - " ++ show maxPage ++ ") : ") $ \ [page] -> do
+    let pageNumber = read page :: Int
+    pdfViewSetPage view (pageNumber - 1)
diff --git a/manatee-pdfviewer.cabal b/manatee-pdfviewer.cabal
--- a/manatee-pdfviewer.cabal
+++ b/manatee-pdfviewer.cabal
@@ -1,5 +1,5 @@
 name:			manatee-pdfviewer
-version:		0.0.5
+version:		0.0.6
 Cabal-Version:	>= 1.6
 license:		GPL-3
 license-file:	LICENSE
@@ -15,6 +15,8 @@
  .
  And replace Chinese font string in file `/etc/fonts/conf.d/49-sansserif.conf'
  .
+ Video at (Select 720p HD) at : <http://www.youtube.com/watch?v=weS6zys3U8k> <http://v.youku.com/v_show/id_XMjI2MDMzODI4.html>
+ .
  Screenshots at : <http://goo.gl/MkVw>
  .
  Manual at : <http://haskell.org/haskellwiki/Manatee>
@@ -36,7 +38,7 @@
   location:     http://patch-tag.com/r/AndyStewart/manatee-pdfviewer
   
 Library
-     build-depends: base >= 4 && < 5, manatee-core >= 0.0.5, dbus-client >= 0.3 && < 0.4, stm >= 2.1.2.0,
+     build-depends: base >= 4 && < 5, manatee-core >= 0.0.6, dbus-client >= 0.3 && < 0.4, stm >= 2.1.2.0,
                     containers >= 0.3.0.0, gtk-serialized-event >= 0.12.0, poppler >= 0.12.1, gtk >= 0.12.0,
                     cairo >= 0.12.0, text >= 0.7.1.0, mtl >= 1.1.0.2, utf8-string
      exposed-modules:
