diff --git a/images/images.qrc b/images/images.qrc
index aafb8dfac05..236a5fe6c53 100755
--- a/images/images.qrc
+++ b/images/images.qrc
@@ -76,6 +76,14 @@
         <file>north_arrows/gpsarrow2.svg</file>
         <file>splash/splash.png</file>
         <file>composer/missing_image.svg</file>
+        <file>themes/default/algorithms/mAlgorithmBuffer.svg</file>
+        <file>themes/default/algorithms/mAlgorithmClip.svg</file>
+        <file>themes/default/algorithms/mAlgorithmConvexHull.svg</file>
+        <file>themes/default/algorithms/mAlgorithmDifference.svg</file>
+        <file>themes/default/algorithms/mAlgorithmDissolve.svg</file>
+        <file>themes/default/algorithms/mAlgorithmIntersect.svg</file>
+        <file>themes/default/algorithms/mAlgorithmSymmetricalDifference.svg</file>
+        <file>themes/default/algorithms/mAlgorithmUnion.svg</file>
         <file>themes/default/cap_flat.svg</file>
         <file>themes/default/cap_round.svg</file>
         <file>themes/default/cap_square.svg</file>
diff --git a/images/themes/default/algorithms/mAlgorithmBuffer.svg b/images/themes/default/algorithms/mAlgorithmBuffer.svg
new file mode 100644
index 00000000000..58079794261
--- /dev/null
+++ b/images/themes/default/algorithms/mAlgorithmBuffer.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 6.35 6.35"><path d="M1.455 5.953h.794c.53 0 .794-.264.794-.794V2.78h2.116c.53 0 .794-.265.794-.795v-.529c0-.529-.264-.794-.794-.794H1.455c-.529 0-.794.265-.794.794V5.16c0 .53.265.794.794.794" fill="#7c96a8" stroke="#517083" stroke-width=".265"/><path d="M5.292 1.72H1.72v3.572" fill="none" stroke="#565a5d" stroke-width=".794"/><path d="M5.027 1.72H1.72v3.307" fill="none" stroke="#7ea57e" stroke-width=".265"/></svg>
diff --git a/images/themes/default/algorithms/mAlgorithmClip.svg b/images/themes/default/algorithms/mAlgorithmClip.svg
new file mode 100644
index 00000000000..ba712b0202a
--- /dev/null
+++ b/images/themes/default/algorithms/mAlgorithmClip.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 6.35 6.35"><path d="M.661 2.249h3.44v3.44H.661z" fill="#7ea57e" fill-opacity=".392" stroke="#565a5d" stroke-width=".265" stroke-linecap="round" stroke-dasharray=".26458334,.52916666999999995"/><path d="M5.953 2.249a1.852 1.852 0 0 1-1.852 1.852 1.852 1.852 0 0 1-1.852-1.852A1.852 1.852 0 0 1 4.101.397a1.852 1.852 0 0 1 1.852 1.852z" fill="#7ea57e" fill-opacity=".392" stroke="#565a5d" stroke-width=".265" stroke-linecap="round" stroke-dasharray=".26458334,.52916666999999995"/><path d="M2.249 2.249a1.852 1.852 0 0 0 1.852 1.852V2.249H2.249z" fill="#7c96a8" stroke="#517083" stroke-width=".26458"/></svg>
diff --git a/images/themes/default/algorithms/mAlgorithmConvexHull.svg b/images/themes/default/algorithms/mAlgorithmConvexHull.svg
new file mode 100644
index 00000000000..e6e93aca976
--- /dev/null
+++ b/images/themes/default/algorithms/mAlgorithmConvexHull.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 6.35 6.35"><path d="M5.689.397H2.315L.728 1.984v2.05l1.786 1.92h.264l.53-.596 2.38-3.903z" fill="#7c96a8" stroke="#517083" stroke-width=".265"/><path d="M5.556.926H2.514L1.19 2.249v1.587L2.977 5.69" fill="none" stroke="#565a5d" stroke-width=".794"/><path d="M5.292.926H2.514L1.19 2.249v1.587l1.587 1.588" fill="none" stroke="#7ea57e" stroke-width=".265"/></svg>
diff --git a/images/themes/default/algorithms/mAlgorithmDifference.svg b/images/themes/default/algorithms/mAlgorithmDifference.svg
new file mode 100644
index 00000000000..6b7107551d1
--- /dev/null
+++ b/images/themes/default/algorithms/mAlgorithmDifference.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 6.35 6.35"><g stroke-linecap="round"><path d="M5.953 2.249a1.852 1.852 0 0 1-1.852 1.852 1.852 1.852 0 0 1-1.852-1.852A1.852 1.852 0 0 1 4.101.397a1.852 1.852 0 0 1 1.852 1.852z" fill="#7ea57e" fill-opacity=".392" stroke="#565a5d" stroke-width=".265" stroke-dasharray=".26458334,.52916666999999995"/><path d="M.661 2.249v3.44h3.44V4.1a1.852 1.852 0 0 1-1.852-1.852H.661z" fill="#7c96a8" stroke="#517083" stroke-width=".26458"/></g></svg>
diff --git a/images/themes/default/algorithms/mAlgorithmDissolve.svg b/images/themes/default/algorithms/mAlgorithmDissolve.svg
new file mode 100644
index 00000000000..9511e1e3bc6
--- /dev/null
+++ b/images/themes/default/algorithms/mAlgorithmDissolve.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 6.35 6.35"><path d="M4.101.397a1.852 1.852 0 0 0-1.852 1.852H.661v3.44h3.44V4.1a1.852 1.852 0 0 0 1.852-1.852A1.852 1.852 0 0 0 4.101.397z" fill="#7c96a8" stroke="#517083" stroke-linecap="round" stroke-width=".26458"/></svg>
diff --git a/images/themes/default/algorithms/mAlgorithmIntersect.svg b/images/themes/default/algorithms/mAlgorithmIntersect.svg
new file mode 100644
index 00000000000..ba712b0202a
--- /dev/null
+++ b/images/themes/default/algorithms/mAlgorithmIntersect.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 6.35 6.35"><path d="M.661 2.249h3.44v3.44H.661z" fill="#7ea57e" fill-opacity=".392" stroke="#565a5d" stroke-width=".265" stroke-linecap="round" stroke-dasharray=".26458334,.52916666999999995"/><path d="M5.953 2.249a1.852 1.852 0 0 1-1.852 1.852 1.852 1.852 0 0 1-1.852-1.852A1.852 1.852 0 0 1 4.101.397a1.852 1.852 0 0 1 1.852 1.852z" fill="#7ea57e" fill-opacity=".392" stroke="#565a5d" stroke-width=".265" stroke-linecap="round" stroke-dasharray=".26458334,.52916666999999995"/><path d="M2.249 2.249a1.852 1.852 0 0 0 1.852 1.852V2.249H2.249z" fill="#7c96a8" stroke="#517083" stroke-width=".26458"/></svg>
diff --git a/images/themes/default/algorithms/mAlgorithmSymmetricalDifference.svg b/images/themes/default/algorithms/mAlgorithmSymmetricalDifference.svg
new file mode 100644
index 00000000000..7c4734d06dd
--- /dev/null
+++ b/images/themes/default/algorithms/mAlgorithmSymmetricalDifference.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 6.35 6.35"><path style="font-variant-east_asian:normal" d="M2.249 2.249a1.852 1.852 0 0 0 1.852 1.852V2.25z" fill="#7ea57e" fill-opacity=".392" stroke="#565a5d" stroke-width=".265" stroke-linecap="round" stroke-dasharray=".26458334,.52916667"/><path style="font-variant-east_asian:normal" d="M.661 2.249v3.44h3.44V4.1a1.852 1.852 0 0 1-1.852-1.852H.661z" fill="#7c96a8" stroke="#517083" stroke-width=".26458"/><path style="font-variant-east_asian:normal" d="M4.101.397a1.852 1.852 0 0 0-1.852 1.852h1.852v1.852a1.852 1.852 0 0 0 1.852-1.852A1.852 1.852 0 0 0 4.101.397zM2.249 2.249a1.852 1.852 0 0 0 .008.159 1.852 1.852 0 0 1-.008-.159zm.02.25a1.852 1.852 0 0 0 .013.089 1.852 1.852 0 0 1-.014-.089zm.035.19a1.852 1.852 0 0 0 .02.078 1.852 1.852 0 0 1-.02-.079zm.052.174a1.852 1.852 0 0 0 .03.08 1.852 1.852 0 0 1-.03-.08zm.068.166a1.852 1.852 0 0 0 .041.086 1.852 1.852 0 0 1-.041-.086zm.084.162a1.852 1.852 0 0 0 .05.08 1.852 1.852 0 0 1-.05-.08zm.107.16a1.852 1.852 0 0 0 .053.068 1.852 1.852 0 0 1-.053-.068zm.115.14a1.852 1.852 0 0 0 .062.067 1.852 1.852 0 0 1-.062-.067zm.13.13a1.852 1.852 0 0 0 .07.061 1.852 1.852 0 0 1-.07-.062zm.139.114a1.852 1.852 0 0 0 .08.058A1.852 1.852 0 0 1 3 3.735zm.16.107a1.852 1.852 0 0 0 .076.043 1.852 1.852 0 0 1-.076-.043zm.162.084a1.852 1.852 0 0 0 .086.039 1.852 1.852 0 0 1-.086-.039zm.166.068a1.852 1.852 0 0 0 .096.032 1.852 1.852 0 0 1-.096-.032zm.175.052a1.852 1.852 0 0 0 .1.022 1.852 1.852 0 0 1-.1-.022zm.189.036a1.852 1.852 0 0 0 .091.011 1.852 1.852 0 0 1-.091-.011z" fill="#7c96a8" stroke="#517083" stroke-width=".26458"/></svg>
diff --git a/images/themes/default/algorithms/mAlgorithmUnion.svg b/images/themes/default/algorithms/mAlgorithmUnion.svg
new file mode 100644
index 00000000000..44130185769
--- /dev/null
+++ b/images/themes/default/algorithms/mAlgorithmUnion.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 6.35 6.35"><g fill="#7c96a8" stroke="#517083"><path style="font-variant-east_asian:normal" d="M.661 2.249v3.44h3.44V4.1a1.852 1.852 0 0 1-1.852-1.852H.661z" stroke-width=".26458"/><path style="font-variant-east_asian:normal" d="M4.101.397a1.852 1.852 0 0 0-1.852 1.852h1.852v1.852a1.852 1.852 0 0 0 1.852-1.852A1.852 1.852 0 0 0 4.101.397zM2.249 2.249a1.852 1.852 0 0 0 .008.159 1.852 1.852 0 0 1-.008-.159zm.02.25a1.852 1.852 0 0 0 .013.089 1.852 1.852 0 0 1-.014-.089zm.035.19a1.852 1.852 0 0 0 .02.078 1.852 1.852 0 0 1-.02-.079zm.052.174a1.852 1.852 0 0 0 .03.08 1.852 1.852 0 0 1-.03-.08zm.068.166a1.852 1.852 0 0 0 .041.086 1.852 1.852 0 0 1-.041-.086zm.084.162a1.852 1.852 0 0 0 .05.08 1.852 1.852 0 0 1-.05-.08zm.107.16a1.852 1.852 0 0 0 .053.068 1.852 1.852 0 0 1-.053-.068zm.115.14a1.852 1.852 0 0 0 .062.067 1.852 1.852 0 0 1-.062-.067zm.13.13a1.852 1.852 0 0 0 .07.061 1.852 1.852 0 0 1-.07-.062zm.139.114a1.852 1.852 0 0 0 .08.058A1.852 1.852 0 0 1 3 3.735zm.16.107a1.852 1.852 0 0 0 .076.043 1.852 1.852 0 0 1-.076-.043zm.162.084a1.852 1.852 0 0 0 .086.039 1.852 1.852 0 0 1-.086-.039zm.166.068a1.852 1.852 0 0 0 .096.032 1.852 1.852 0 0 1-.096-.032zm.175.052a1.852 1.852 0 0 0 .1.022 1.852 1.852 0 0 1-.1-.022zm.189.036a1.852 1.852 0 0 0 .091.011 1.852 1.852 0 0 1-.091-.011z" stroke-width=".26458"/><path style="font-variant-east_asian:normal" d="M2.249 2.249a1.852 1.852 0 0 0 1.852 1.852V2.25z" stroke-width=".265"/></g></svg>
diff --git a/src/analysis/processing/qgsalgorithmbuffer.h b/src/analysis/processing/qgsalgorithmbuffer.h
index 5205c2c4a34..5abc47df3c1 100644
--- a/src/analysis/processing/qgsalgorithmbuffer.h
+++ b/src/analysis/processing/qgsalgorithmbuffer.h
@@ -35,6 +35,8 @@ class QgsBufferAlgorithm : public QgsProcessingAlgorithm
 
     QgsBufferAlgorithm() = default;
     void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
+    QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmBuffer.svg" ) ); }
+    QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmBuffer.svg" ) ); }
     QString name() const override;
     QString displayName() const override;
     QStringList tags() const override;
diff --git a/src/analysis/processing/qgsalgorithmclip.h b/src/analysis/processing/qgsalgorithmclip.h
index 38a10c0f91b..f36f4308a70 100644
--- a/src/analysis/processing/qgsalgorithmclip.h
+++ b/src/analysis/processing/qgsalgorithmclip.h
@@ -35,6 +35,8 @@ class QgsClipAlgorithm : public QgsProcessingAlgorithm
 
     QgsClipAlgorithm() = default;
     void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
+    QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmClip.svg" ) ); }
+    QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmClip.svg" ) ); }
     QString name() const override;
     QString displayName() const override;
     QStringList tags() const override;
diff --git a/src/analysis/processing/qgsalgorithmconvexhull.h b/src/analysis/processing/qgsalgorithmconvexhull.h
index a24f460c252..3375c189ec5 100644
--- a/src/analysis/processing/qgsalgorithmconvexhull.h
+++ b/src/analysis/processing/qgsalgorithmconvexhull.h
@@ -35,6 +35,8 @@ class QgsConvexHullAlgorithm : public QgsProcessingFeatureBasedAlgorithm
   public:
 
     QgsConvexHullAlgorithm() = default;
+    QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmConvexHull.svg" ) ); }
+    QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmConvexHull.svg" ) ); }
     QString name() const override;
     QString displayName() const override;
     QStringList tags() const override;
diff --git a/src/analysis/processing/qgsalgorithmdifference.h b/src/analysis/processing/qgsalgorithmdifference.h
index b8e7da826a6..470eb8d2b32 100644
--- a/src/analysis/processing/qgsalgorithmdifference.h
+++ b/src/analysis/processing/qgsalgorithmdifference.h
@@ -26,7 +26,8 @@ class QgsDifferenceAlgorithm : public QgsProcessingAlgorithm
 {
   public:
     QgsDifferenceAlgorithm() = default;
-
+    QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmDifference.svg" ) ); }
+    QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmDifference.svg" ) ); }
     virtual QString name() const override;
     virtual QString displayName() const override;
     virtual QString group() const override;
diff --git a/src/analysis/processing/qgsalgorithmdissolve.h b/src/analysis/processing/qgsalgorithmdissolve.h
index 2c98fc5f066..fe4cc3abf3a 100644
--- a/src/analysis/processing/qgsalgorithmdissolve.h
+++ b/src/analysis/processing/qgsalgorithmdissolve.h
@@ -46,6 +46,8 @@ class QgsDissolveAlgorithm : public QgsCollectorAlgorithm
 
     QgsDissolveAlgorithm() = default;
     void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
+    QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmDissolve.svg" ) ); }
+    QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmDissolve.svg" ) ); }
     QString name() const override;
     QString displayName() const override;
     QStringList tags() const override;
diff --git a/src/analysis/processing/qgsalgorithmintersection.h b/src/analysis/processing/qgsalgorithmintersection.h
index 14277c84544..259d9a1e47f 100644
--- a/src/analysis/processing/qgsalgorithmintersection.h
+++ b/src/analysis/processing/qgsalgorithmintersection.h
@@ -26,7 +26,8 @@ class QgsIntersectionAlgorithm : public QgsProcessingAlgorithm
 {
   public:
     QgsIntersectionAlgorithm() = default;
-
+    QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmIntersect.svg" ) ); }
+    QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmIntersect.svg" ) ); }
     virtual QString name() const override;
     virtual QString displayName() const override;
     virtual QString group() const override;
diff --git a/src/analysis/processing/qgsalgorithmsymmetricaldifference.h b/src/analysis/processing/qgsalgorithmsymmetricaldifference.h
index 6675bfbc856..af32786eda2 100644
--- a/src/analysis/processing/qgsalgorithmsymmetricaldifference.h
+++ b/src/analysis/processing/qgsalgorithmsymmetricaldifference.h
@@ -26,7 +26,8 @@ class QgsSymmetricalDifferenceAlgorithm : public QgsProcessingAlgorithm
 {
   public:
     QgsSymmetricalDifferenceAlgorithm() = default;
-
+    QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmSymmetricalDifference.svg" ) ); }
+    QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmSymmetricalDifference.svg" ) ); }
     virtual QString name() const override;
     virtual QString displayName() const override;
     virtual QString group() const override;
diff --git a/src/analysis/processing/qgsalgorithmunion.h b/src/analysis/processing/qgsalgorithmunion.h
index 35e4d0fc5b3..39cce5a6f1b 100644
--- a/src/analysis/processing/qgsalgorithmunion.h
+++ b/src/analysis/processing/qgsalgorithmunion.h
@@ -27,7 +27,8 @@ class QgsUnionAlgorithm : public QgsProcessingAlgorithm
 {
   public:
     QgsUnionAlgorithm() = default;
-
+    QIcon icon() const override { return QgsApplication::getThemeIcon( QStringLiteral( "/algorithms/mAlgorithmUnion.svg" ) ); }
+    QString svgIconPath() const override { return QgsApplication::iconPath( QStringLiteral( "/algorithms/mAlgorithmUnion.svg" ) ); }
     virtual QString name() const override;
     virtual QString displayName() const override;
     virtual QString group() const override;