diff --git a/meta/lib/oeqa/core/loader.py b/meta/lib/oeqa/core/loader.py
index 90b9366754d..28b4fd20166 100644
--- a/meta/lib/oeqa/core/loader.py
+++ b/meta/lib/oeqa/core/loader.py
@@ -4,6 +4,7 @@
 # SPDX-License-Identifier: MIT
 #
 
+import copy
 import re
 import sys
 import unittest
@@ -106,8 +107,10 @@ class OETestLoader(unittest.TestLoader):
             if isinstance(obj, OETestDecorator):
                 if not obj.__class__ in decoratorClasses:
                     raise Exception("Decorator %s isn't registered" \
-                            " in decoratorClasses." % obj.__name__)
-                obj.bind(self.tc._registry, case)
+                            " in decoratorClasses." % obj.__class__.__name__)
+                # The decorator instance is shared by every class that has
+                # the method so bind a copy for this test case
+                copy.copy(obj).bind(self.tc._registry, case)
 
         def _walk_closure(obj):
             if hasattr(obj, '__closure__') and obj.__closure__:
diff --git a/meta/lib/oeqa/core/tests/cases/inherit.py b/meta/lib/oeqa/core/tests/cases/inherit.py
new file mode 100644
index 00000000000..8600c8005b5
--- /dev/null
+++ b/meta/lib/oeqa/core/tests/cases/inherit.py
@@ -0,0 +1,20 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+from oeqa.core.case import OETestCase
+from oeqa.core.decorator.depends import OETestDepends
+
+class InheritBaseTest(OETestCase):
+
+    def testInheritFirst(self):
+        self.assertTrue(True, msg='How is this possible?')
+
+    @OETestDepends(['testInheritFirst'])
+    def testInheritSecond(self):
+        self.assertTrue(True, msg='How is this possible?')
+
+class InheritSubTest(InheritBaseTest):
+    pass
diff --git a/meta/lib/oeqa/core/tests/test_decorators.py b/meta/lib/oeqa/core/tests/test_decorators.py
index d3305b1e534..74ac4632372 100755
--- a/meta/lib/oeqa/core/tests/test_decorators.py
+++ b/meta/lib/oeqa/core/tests/test_decorators.py
@@ -126,6 +126,20 @@ class TestDependsDecorator(TestBase):
         self.assertEqual(result.skipped, [])
         self.assertEqual(len(result.successes), len(tests))
 
+class TestInheritedDecorators(TestBase):
+    modules = ['inherit']
+
+    def test_inherited_decorators(self):
+        # Each test case needs its own decorator instances, even when the
+        # test method is inherited by another test class
+        tc = self._testLoader(modules=self.modules)
+        cases = tc._registry['cases']
+        self.assertEqual(len(cases), 4)
+        for case in cases.values():
+            for d in case.decorators:
+                self.assertIs(d.case, case)
+        self.assertTrue(tc.runTests().wasSuccessful())
+
 class TestTimeoutDecorator(TestBase):
     modules = ['timeout']
 
