Index: src/pmc/class.pmc
===================================================================
--- src/pmc/class.pmc	(revision 21970)
+++ src/pmc/class.pmc	(working copy)
@@ -765,7 +765,12 @@
 */
     void add_parent(PMC *parent) {
         Parrot_Class * const _class = PARROT_CLASS(SELF);
-
+        /* get name of the parent being added */
+        STRING *parent_name  = VTABLE_get_string(interp, parent);
+        /* get number of direct parents */
+        int parent_count = VTABLE_elements(interp, _class->parents);
+        int index; /* loop iterator */
+        
         /* If we've been instantiated already, need a new class. */
         if (_class->instantiated) {
             /* RT46097 Unimplemented! */
@@ -781,7 +786,31 @@
         }
 
         /* RT46099 Check we don't already have this parent. */
-
+        
+        /* iterate over all direct parents, check whether this class already has 
+         * the parent being added.
+         */
+        for (index = 0; index < parent_count; index++) {
+            /* get the next parent */
+            PMC *current_parent = VTABLE_get_pmc_keyed_int(interp, 
+                                      _class->parents, index);
+            
+            /* get the name of the current parent */
+            STRING *current_name = VTABLE_get_string(interp, current_parent);
+           
+            /* throw an exception if we already have this parent */            
+            if (string_equal(interp, current_name, parent_name) == 0) {                                 
+                real_exception(interp, NULL, INVALID_OPERATION,
+                    "The class '%S' already has a parent class '%S'. "
+                    "It may have been supplied by a role.",                    
+                    VTABLE_get_string(interp, SELF),
+                    parent_name);
+                    
+            }        
+            
+        }
+        
+        
         /* Add to the lists of our immediate parents and all parents. */
         VTABLE_push_pmc(interp, _class->parents, parent);
         _class->all_parents = Parrot_ComputeMRO_C3(interp, SELF);
