diff --git a/src/backend/common/interfaces/IBackend.h b/src/backend/common/interfaces/IBackend.h
index e19e00baf..2ec8bf045 100644
--- a/src/backend/common/interfaces/IBackend.h
+++ b/src/backend/common/interfaces/IBackend.h
@@ -52,6 +52,7 @@ public:
     virtual const Hashrate *hashrate() const                            = 0;
     virtual const String &profileName() const                           = 0;
     virtual const String &type() const                                  = 0;
+    virtual void prepare(const Job &nextJob)                            = 0;
     virtual void printHashrate(bool details)                            = 0;
     virtual void setJob(const Job &job)                                 = 0;
     virtual void start(IWorker *worker)                                 = 0;
diff --git a/src/backend/cpu/CpuBackend.cpp b/src/backend/cpu/CpuBackend.cpp
index 3ab06b464..005ff1dee 100644
--- a/src/backend/cpu/CpuBackend.cpp
+++ b/src/backend/cpu/CpuBackend.cpp
@@ -170,6 +170,15 @@ const xmrig::String &xmrig::CpuBackend::type() const
 }
 
 
+void xmrig::CpuBackend::prepare(const Job &nextJob)
+{
+    if (nextJob.algorithm().family() == Algorithm::RANDOM_X && nextJob.algorithm() != d_ptr->algo) {
+        d_ptr->workers.stop();
+        d_ptr->threads.clear();
+    }
+}
+
+
 void xmrig::CpuBackend::printHashrate(bool details)
 {
     if (!details || !hashrate()) {
diff --git a/src/backend/cpu/CpuBackend.h b/src/backend/cpu/CpuBackend.h
index 613e7cb63..9e71c2470 100644
--- a/src/backend/cpu/CpuBackend.h
+++ b/src/backend/cpu/CpuBackend.h
@@ -49,6 +49,7 @@ protected:
     const Hashrate *hashrate() const override;
     const String &profileName() const override;
     const String &type() const override;
+    void prepare(const Job &nextJob) override;
     void printHashrate(bool details) override;
     void setJob(const Job &job) override;
     void start(IWorker *worker) override;
diff --git a/src/core/Miner.cpp b/src/core/Miner.cpp
index 9d977d120..e93036c1c 100644
--- a/src/core/Miner.cpp
+++ b/src/core/Miner.cpp
@@ -352,6 +352,10 @@ void xmrig::Miner::setEnabled(bool enabled)
 
 void xmrig::Miner::setJob(const Job &job, bool donate)
 {
+    for (IBackend *backend : d_ptr->backends) {
+        backend->prepare(job);
+    }
+
     uv_rwlock_wrlock(&d_ptr->rwlock);
 
     const uint8_t index = donate ? 1 : 0;