diff --git a/src/plugins/poshuku/CMakeLists.txt b/src/plugins/poshuku/CMakeLists.txt
index 23c57e6..638b6ee 100644
--- a/src/plugins/poshuku/CMakeLists.txt
+++ b/src/plugins/poshuku/CMakeLists.txt
@@ -70,6 +70,7 @@ SET (SRCS
 	hideabletabwidget.cpp
 	bookmarkswidget.cpp
 	historywidget.cpp
+	smoothscroll.cpp
 	)
 SET (HEADERS
 	poshuku.h
@@ -116,6 +117,7 @@ SET (HEADERS
 	hideabletabwidget.h
 	bookmarkswidget.h
 	historywidget.h
+	smoothscroll.h
 	interfaces/pluginbase.h
 	interfaces/iwebplugin.h
 	interfaces/iflashoverrider.h
diff --git a/src/plugins/poshuku/customwebview.cpp b/src/plugins/poshuku/customwebview.cpp
index cc66d3f..d1f0581 100644
--- a/src/plugins/poshuku/customwebview.cpp
+++ b/src/plugins/poshuku/customwebview.cpp
@@ -23,6 +23,7 @@
 #include <QApplication>
 #include <QClipboard>
 #include <QFile>
+#include <QWebElement>
 #include <QtDebug>
 #include <plugininterface/util.h>
 #include "core.h"
@@ -30,6 +31,7 @@
 #include "browserwidget.h"
 #include "searchtext.h"
 #include "xmlsettingsmanager.h"
+#include "smoothscroll.h"
 
 namespace LeechCraft
 {
@@ -39,6 +41,7 @@ namespace LeechCraft
 		{
 			CustomWebView::CustomWebView (QWidget *parent)
 			: QWebView (parent)
+			, Scroll_ (new SmoothScroll)
 			{
 				Zooms_ << 0.3
 					<< 0.5
@@ -57,6 +60,8 @@ namespace LeechCraft
 			
 				CustomWebPage *page = new CustomWebPage (this);
 				setPage (page);
+
+				Scroll_->SetTarget (page->mainFrame ());
 			
 				connect (this,
 						SIGNAL (urlChanged (const QUrl&)),
@@ -100,6 +105,7 @@ namespace LeechCraft
 			
 			CustomWebView::~CustomWebView ()
 			{
+				delete Scroll_;
 			}
 			
 			void CustomWebView::SetBrowserWidget (BrowserWidget *widget)
@@ -181,10 +187,38 @@ namespace LeechCraft
 			
 			void CustomWebView::mousePressEvent (QMouseEvent *e)
 			{
+				QWebHitTestResult r = page ()->
+					mainFrame ()->hitTestContent (e->pos ());
+				if (r.linkUrl ().isEmpty () &&
+						r.imageUrl ().isEmpty ())
+				{
+					Scroll_->HandleMousePress (e);
+					if (e->isAccepted ())
+						return;
+				}
+
 				qobject_cast<CustomWebPage*> (page ())->SetButtons (e->buttons ());
 				qobject_cast<CustomWebPage*> (page ())->SetModifiers (e->modifiers ());
 				QWebView::mousePressEvent (e);
 			}
+
+			void CustomWebView::mouseReleaseEvent (QMouseEvent *e)
+			{
+				Scroll_->HandleMouseRelease (e);
+				if (e->isAccepted ())
+					return;
+
+				QWebView::mouseReleaseEvent (e);
+			}
+			
+			void CustomWebView::mouseMoveEvent (QMouseEvent *e)
+			{
+				Scroll_->HandleMouseMove (e);
+				if (e->isAccepted ())
+					return;
+
+				QWebView::mouseMoveEvent (e);
+			}
 			
 			void CustomWebView::wheelEvent (QWheelEvent *e)
 			{
diff --git a/src/plugins/poshuku/customwebview.h b/src/plugins/poshuku/customwebview.h
index 0f79450..43460a9 100644
--- a/src/plugins/poshuku/customwebview.h
+++ b/src/plugins/poshuku/customwebview.h
@@ -29,6 +29,7 @@ namespace LeechCraft
 		namespace Poshuku
 		{
 			class BrowserWidget;
+			class SmoothScroll;
 
 			class CustomWebView : public QWebView
 			{
@@ -36,6 +37,7 @@ namespace LeechCraft
 
 				QList<qreal> Zooms_;
 				BrowserWidget *Browser_;
+				SmoothScroll *Scroll_;
 			public:
 				CustomWebView (QWidget* = 0);
 				virtual ~CustomWebView ();
@@ -49,6 +51,8 @@ namespace LeechCraft
 			protected:
 				virtual QWebView* createWindow (QWebPage::WebWindowType);
 				virtual void mousePressEvent (QMouseEvent*);
+				virtual void mouseReleaseEvent (QMouseEvent*);
+				virtual void mouseMoveEvent (QMouseEvent*);
 				virtual void wheelEvent (QWheelEvent*);
 				virtual void contextMenuEvent (QContextMenuEvent*);
 			private:
diff --git a/src/plugins/poshuku/smoothscroll.cpp b/src/plugins/poshuku/smoothscroll.cpp
index 8ad74f9..def28e6 100644
--- a/src/plugins/poshuku/smoothscroll.cpp
+++ b/src/plugins/poshuku/smoothscroll.cpp
@@ -167,7 +167,7 @@ namespace LeechCraft
 						{
 							Speed_ /= 4;
 							State_ = SAutoScroll;
-							Ticker_->Start (10);
+							Ticker_->Start (3);
 						}
 						break;
 					case SStop:
