diff --git a/images/images.qrc b/images/images.qrc
index 662537fe45a..8807413f9cc 100644
--- a/images/images.qrc
+++ b/images/images.qrc
@@ -326,6 +326,7 @@
         <file>themes/default/mIconFirst.png</file>
         <file>themes/default/mIconGeometryLayer.png</file>
         <file>themes/default/mIconInfo.png</file>
+        <file>themes/default/mIconImport.gif</file>
         <file>themes/default/mIconLabelQuadrantCenter.svg</file>
         <file>themes/default/mIconLabelQuadrantOffset.svg</file>
         <file>themes/default/mIconLast.png</file>
diff --git a/images/themes/default/mIconImport.gif b/images/themes/default/mIconImport.gif
new file mode 100644
index 00000000000..be37ec959b1
Binary files /dev/null and b/images/themes/default/mIconImport.gif differ
diff --git a/src/providers/grass/qgsgrassprovidermodule.cpp b/src/providers/grass/qgsgrassprovidermodule.cpp
index 1574a3e2e93..48d80365cf1 100644
--- a/src/providers/grass/qgsgrassprovidermodule.cpp
+++ b/src/providers/grass/qgsgrassprovidermodule.cpp
@@ -678,7 +678,40 @@ QIcon QgsGrassRasterItem::icon()
   return QgsDataItem::icon();
 }
 
+
 //----------------------- QgsGrassImportItem ------------------------------
+QgsGrassImportItemIcon::QgsGrassImportItemIcon()
+    : QObject()
+    , mCount( 0 )
+    , mMovie( 0 )
+{
+  // QApplication as parent to ensure that it is deleted before QApplication
+  mMovie = new QMovie( QApplication::instance() );
+  mMovie->setFileName( QgsApplication::iconPath( "/mIconImport.gif" ) );
+  mMovie->setCacheMode( QMovie::CacheAll );
+  connect( mMovie, SIGNAL( frameChanged( int ) ), SLOT( onFrameChanged() ) );
+}
+
+void QgsGrassImportItemIcon::onFrameChanged()
+{
+  mIcon = QIcon( mMovie->currentPixmap() );
+}
+
+void QgsGrassImportItemIcon::addListener()
+{
+  mCount++;
+  mMovie->setPaused( mCount == 0 );
+}
+
+void QgsGrassImportItemIcon::removeListener()
+{
+  mCount++;
+  mMovie->setPaused( mCount == 0 );
+}
+
+//----------------------- QgsGrassImportItem ------------------------------
+
+QgsGrassImportItemIcon QgsGrassImportItem::mImportIcon;
 
 QgsGrassImportItem::QgsGrassImportItem( QgsDataItem* parent, const QString& name, const QString& path, QgsGrassImport* import )
     : QgsDataItem( QgsDataItem::Layer, parent, name, path )
@@ -687,6 +720,14 @@ QgsGrassImportItem::QgsGrassImportItem( QgsDataItem* parent, const QString& name
 {
   setCapabilities( QgsDataItem::NoCapabilities ); // disable fertility
   setState( Populating );
+
+  connect( &mImportIcon, SIGNAL( frameChanged( int ) ), SLOT( emitDataChanged() ) );
+  mImportIcon.addListener();
+}
+
+QgsGrassImportItem::~QgsGrassImportItem()
+{
+  mImportIcon.removeListener();
 }
 
 QList<QAction*> QgsGrassImportItem::actions()
@@ -710,6 +751,11 @@ void QgsGrassImportItem::cancel()
   mImport->cancel();
 }
 
+QIcon QgsGrassImportItem::icon()
+{
+  return mImportIcon.icon();
+}
+
 //-------------------------------------------------------------------------
 
 QGISEXTERN int dataCapabilities()
diff --git a/src/providers/grass/qgsgrassprovidermodule.h b/src/providers/grass/qgsgrassprovidermodule.h
index 836cea5de88..f52f29ee460 100644
--- a/src/providers/grass/qgsgrassprovidermodule.h
+++ b/src/providers/grass/qgsgrassprovidermodule.h
@@ -157,17 +157,42 @@ class QgsGrassRasterItem : public QgsGrassObjectItem
     bool mExternal;
 };
 
+// icon movie
+class QgsGrassImportItemIcon : public QObject
+{
+    Q_OBJECT
+  public:
+    QgsGrassImportItemIcon();
+
+    QIcon icon() { return mIcon; }
+    void addListener();
+    void removeListener();
+
+  public slots:
+    void onFrameChanged();
+
+  signals:
+    void frameChanged();
+
+  private:
+    void resetMovie();
+    int mCount;
+    QMovie * mMovie;
+    QIcon mIcon;
+};
+
 // item representing a layer being imported
 class QgsGrassImportItem : public QgsDataItem, public QgsGrassObjectItemBase
 {
     Q_OBJECT
   public:
     QgsGrassImportItem( QgsDataItem* parent, const QString& name, const QString& path, QgsGrassImport* import );
-
+    ~QgsGrassImportItem();
     //virtual void setState( State state ) override {
     //  QgsDataItem::setState(state);
     //} // do nothing to keep Populating
     virtual QList<QAction*> actions() override;
+    virtual QIcon icon() override;
 
   public slots:
     virtual void refresh() override {}
@@ -178,6 +203,9 @@ class QgsGrassImportItem : public QgsDataItem, public QgsGrassObjectItemBase
     virtual void refresh( QVector<QgsDataItem*> children ) override { Q_UNUSED( children )};
     //bool mDeleteAction;
     QgsGrassImport* mImport;
+
+  private:
+    static QgsGrassImportItemIcon mImportIcon;
 };
 
 #endif // QGSGRASSPROVIDERMODULE_H