Index: mscore/mscore/box.h
===================================================================
--- mscore/mscore/box.h	(Revision 3289)
+++ mscore/mscore/box.h	(Arbeitskopie)
@@ -112,6 +112,7 @@
 
       virtual bool genPropertyMenu(QMenu*) const;
       virtual void propertyAction(ScoreView*, const QString&);
+      void alignChildHBoxes();
       };
 
 #endif
Index: mscore/mscore/actions.cpp
===================================================================
--- mscore/mscore/actions.cpp	(Revision 3289)
+++ mscore/mscore/actions.cpp	(Arbeitskopie)
@@ -1026,6 +1026,14 @@
          ),
       Shortcut(
          STATE_NORMAL | STATE_NOTE_ENTRY,
+         "align-hboxes",
+         QT_TRANSLATE_NOOP("action","Align Child Frames"),
+         0,
+         Qt::WindowShortcut,
+         QT_TRANSLATE_NOOP("action","Align Child Frames")
+         ),
+      Shortcut(
+         STATE_NORMAL | STATE_NOTE_ENTRY,
          "duplet",
          QT_TRANSLATE_NOOP("action","Duplet"),
          Qt::CTRL+Qt::Key_2,
Index: mscore/mscore/box.cpp
===================================================================
--- mscore/mscore/box.cpp	(Revision 3289)
+++ mscore/mscore/box.cpp	(Arbeitskopie)
@@ -454,6 +454,10 @@
       a = getAction("picture");
       textMenu->addAction(a);
 
+      a = getAction("align-hboxes");
+      a->blockSignals(true);
+      popup->addAction(a);
+
       a = popup->addAction(tr("Frame Properties..."));
       a->setData("props");
       return true;
@@ -500,6 +504,9 @@
             double w = width() - leftMargin() * DPMM - rightMargin() * DPMM;
             static_cast<HBox*>(s)->setBoxWidth(Spatium(w / spatium()));
             }
+      else if (cmd == "align-hboxes") {
+            alignChildHBoxes();
+            }
       else if (cmd == "picture")
             score()->addImage(this);
       else {
@@ -518,6 +525,7 @@
       getAction("composer-text")->blockSignals(false);
       getAction("poet-text")->blockSignals(false);
       getAction("insert-hbox")->blockSignals(false);
+      getAction("align-hboxes")->blockSignals(false);
       }
 
 //---------------------------------------------------------
@@ -530,3 +538,57 @@
       setbbox(QRectF(0.0, 0.0, system()->width(), point(boxHeight())));
       Box::layout();
       }
+
+//---------------------------------------------------------
+//   align child hboxes
+//---------------------------------------------------------
+void VBox::alignChildHBoxes()
+      {
+      printf("alignChildBoxes: start\n");
+      int numChilds = 0;
+      
+      foreach(Element* el, _el)
+            {
+            if(el && el->type() == HBOX)
+                  {
+                  numChilds++;
+                  }
+            }
+      
+      if(numChilds)
+            {
+            /* width: take care for margins */
+            Spatium width = Spatium((bbox().width() - (leftMargin() + rightMargin()) * DPMM) / spatium());
+            
+            /* spacer: average between left and right margin */
+            Spatium space = Spatium(((leftMargin() + rightMargin())/2 * DPMM) / spatium());
+            
+            /* childsWidth and spacer should be at least 9:1 (sum 10) */
+            Spatium childsWidth = (width - space * (double) (numChilds-1)) / (double) numChilds;
+            
+            if(childsWidth < space*9)
+                  {
+                  space = width / (10.0 * (double) numChilds - 1.0);
+                  childsWidth = space * 9.0;
+                  }
+            
+            double offset = 0;
+            
+            foreach(Element* el, _el)
+                  {
+                  if(el && el->type() == HBOX)
+                        {
+                        HBox* c = static_cast<HBox*>(el);
+                        HBox* cc = c->clone();
+                        
+                        cc->setBoxWidth(childsWidth);
+                        cc->setUserXoffset(offset);
+                        offset += (space + childsWidth).val() * spatium();
+                        
+                        score()->undoChangeElement(c, cc);
+                        }
+                  }
+            
+            score()->setLayoutAll(true);
+            }
+      }
