Index: src/core/symbology-ng/qgsrulebasedrendererv2.h
===================================================================
--- src/core/symbology-ng/qgsrulebasedrendererv2.h	(Revision 14033)
+++ src/core/symbology-ng/qgsrulebasedrendererv2.h	(Arbeitskopie)
@@ -102,6 +102,13 @@
     //! store renderer info to XML element
     virtual QDomElement save( QDomDocument& doc );
 
+    //! return a list of symbology items for the legend
+    virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
+
+    //! return a list of item text / symbol
+    //! @note: this method was added in version 1.5
+    virtual QgsLegendSymbolList legendSymbolItems();
+
     /////
 
     //! return the total number of rules
Index: src/core/symbology-ng/qgsrulebasedrendererv2.cpp
===================================================================
--- src/core/symbology-ng/qgsrulebasedrendererv2.cpp	(Revision 14033)
+++ src/core/symbology-ng/qgsrulebasedrendererv2.cpp	(Arbeitskopie)
@@ -126,7 +126,15 @@
 
 QgsSymbolV2* QgsRuleBasedRendererV2::symbolForFeature( QgsFeature& feature )
 {
-  return mCurrentSymbol;
+  //return first matching rule (though sometimes not correct if several rules apply)
+  for ( QList<Rule*>::iterator it = mCurrentRules.begin(); it != mCurrentRules.end(); ++it )
+  {
+    Rule* rule = *it;
+    if ( rule->isFilterOK( mCurrentFields, feature ) )
+    {
+      return rule->symbol();
+    }
+  }
 }
 
 void QgsRuleBasedRendererV2::renderFeature( QgsFeature& feature,
@@ -198,6 +206,7 @@
   QgsSymbolV2* s = mDefaultSymbol->clone();
   QgsRuleBasedRendererV2* r = new QgsRuleBasedRendererV2( s );
   r->mRules = mRules;
+  r->setUsingSymbolLevels( usingSymbolLevels() );
   return r;
 }
 
@@ -243,7 +252,28 @@
   return rendererElem;
 }
 
+QgsLegendSymbologyList QgsRuleBasedRendererV2::legendSymbologyItems( QSize iconSize )
+{
+  QgsLegendSymbologyList lst;
+  for ( QList<Rule>::iterator it = mRules.begin(); it != mRules.end(); ++it )
+  {
+    QPixmap pix = QgsSymbolLayerV2Utils::symbolPreviewPixmap( it->symbol(), iconSize );
+    lst << qMakePair( it->filterExpression(), pix );
+  }
+  return lst;
+}
 
+QgsLegendSymbolList QgsRuleBasedRendererV2::legendSymbolItems()
+{
+  QgsLegendSymbolList lst;
+  for ( QList<Rule>::iterator it = mRules.begin(); it != mRules.end(); ++it )
+  {
+    lst << qMakePair( it->filterExpression(), it->symbol() );
+  }
+  return lst;
+}
+
+
 QgsFeatureRendererV2* QgsRuleBasedRendererV2::create( QDomElement& element )
 {
   // load symbols
@@ -355,7 +385,7 @@
 
 QList<QgsRuleBasedRendererV2::Rule> QgsRuleBasedRendererV2::refineRuleScales( QgsRuleBasedRendererV2::Rule& initialRule, QList<int> scales )
 {
-  qSort(scales); // make sure the scales are in ascending order
+  qSort( scales ); // make sure the scales are in ascending order
   QList<Rule> rules;
   int oldScale = initialRule.scaleMinDenom();
   int maxDenom = initialRule.scaleMaxDenom();
