diff --git a/add/data/xql/getAnnotationPreviews.xql b/add/data/xql/getAnnotationPreviews.xql
index 2c5f52e2497b547bb493ef2d71c32f211656fde5..1f8444aeb768eb247521d56d5944f84aa7d13ca4 100644
--- a/add/data/xql/getAnnotationPreviews.xql
+++ b/add/data/xql/getAnnotationPreviews.xql
@@ -366,7 +366,6 @@ declare function local:toJSON($type as xs:string, $label as xs:string, $mdiv as
         let $single-serv-registerURL := $configResource//conf:single-serv-registerURL/string()
         let $singel-serv-resolveURL := $configResource//conf:single-serv-resolveURL/string()
         let $docuservURLinternal := $configResource//conf:docuservURLinternal/string()
-        let $log := console:log($digilibSizeParams)
         let $singleURL := 
             if (matches($digilibBaseParams, 'music/editions/'))
                             then 
diff --git a/add/data/xql/getMeasures.xql b/add/data/xql/getMeasures.xql
index 25d22d2541cd15d36298ba8df9793e4e7ba2d561..d1fed02f50199f8ab73b25400c9f0fd59abfd3a7 100644
--- a/add/data/xql/getMeasures.xql
+++ b/add/data/xql/getMeasures.xql
@@ -76,11 +76,11 @@ declare function local:getMeasures($mei as node(), $mdivID as xs:string) as xs:s
                 return
                     if (count($partMeasures) > 1)
                     then (
-                        concat('{id: "', $partMeasures[1]/@xml:id, '?tstamp2=', count($partMeasures) - 1, 'm+0', '", voice: "', $partMeasures[1]/ancestor::mei:part//mei:staffDef/@decls, '"}')
+                        concat('{id: "', $partMeasures[1]/@xml:id, '?tstamp2=', count($partMeasures) - 1, 'm+0', '", voice: "', $partMeasures[1]/ancestor::mei:part//mei:staffDef/@decls, '", partLabel: "', $mei/id(substring-after($partMeasures[1]/ancestor::mei:part//mei:staffDef/@decls,'#'))/@label, '"}')
                     )
                     else if (count($partMeasures) = 1)
                     then (
-                        concat('{id: "', $partMeasures[1]/@xml:id, '", voice: "', $partMeasures[1]/ancestor::mei:part//mei:staffDef/@decls, '"}')
+                        concat('{id: "', $partMeasures[1]/@xml:id, '", voice: "', $partMeasures[1]/ancestor::mei:part//mei:staffDef/@decls, '", partLabel: "', $mei/id(substring-after($partMeasures[1]/ancestor::mei:part//mei:staffDef/@decls,'#'))/@label, '"}')
                     )
                     else ()
             return concat('{',
diff --git a/add/data/xql/getText.xql b/add/data/xql/getText.xql
index 86bb0721f7f428d4161808d8b3540992453748e7..32851e73e6fe59d321f51ec893f31f33f1973235 100644
--- a/add/data/xql/getText.xql
+++ b/add/data/xql/getText.xql
@@ -37,7 +37,7 @@ let $page := request:get-parameter('page', '')
 let $doc := eutil:getDoc($uri)/root()
 
 let $xslInstruction := $doc//processing-instruction(xml-stylesheet)
-let $xslInstruction := for $i in util:serialize($xslInstruction, ())
+let $xslInstruction := for $i in serialize($xslInstruction, ())
                         return
                         if(matches($i, 'type="text/xsl"'))
                         then(substring-before(substring-after($i, 'href="'), '"'))
diff --git a/add/data/xqm/edition.xqm b/add/data/xqm/edition.xqm
index ffeebba73ee6808adc6b4a40e8604a1d34394580..ba206fdcd1f90ff9ad1c2e6fe542d25822f157af 100644
--- a/add/data/xqm/edition.xqm
+++ b/add/data/xqm/edition.xqm
@@ -1,4 +1,4 @@
-xquery version "3.0";
+xquery version "3.1";
 (:
   Edirom Online
   Copyright (C) 2011 The Edirom Project
@@ -69,7 +69,7 @@ declare function edition:getWorkUris($uri as xs:string) as xs:string* {
 :)
 declare function edition:getLanguageFileURI($uri as xs:string, $lang as xs:string) as xs:string {
     
-    doc($uri)//edirom:language[@xml:lang eq $lang]/string(@xlink:href)
+    doc($uri)//edirom:language[@xml:lang eq $lang]/@xlink:href => string()
 };
 
 (:~
diff --git a/add/data/xqm/util.xqm b/add/data/xqm/util.xqm
index 151e6e3177ceb80e92ac31582ad9bade68336f2e..5d894b7cd2914be4269a15356fcd170626fc9d73 100644
--- a/add/data/xqm/util.xqm
+++ b/add/data/xqm/util.xqm
@@ -50,8 +50,10 @@ declare function eutil:getLocalizedName($node, $lang) {
   return
     if ($node/mei:title)
     then (
-        if ($lang = $node/mei:title/@xml:lang)
-        then $node/mei:title[@xml:lang = $lang]/text()
+        if ($lang = $node/mei:title/@xml:lang and $node/mei:title[@xml:lang = $lang]/text() != '')
+        then ($node/mei:title[@xml:lang = $lang]/text())
+        else if ($lang = $node/mei:title/@xml:lang and $node/mei:title[@xml:lang = $lang]/text() = '')
+        then ($node/mei:title[@xml:lang = 'de']/text())
         else $node/mei:title[1]/text()
     )
     else if ($node/mei:name)
diff --git a/app/controller/window/AnnotationView.js b/app/controller/window/AnnotationView.js
index b5e6c5e30d0ad0808d3864b01c383a26d9ac3290..ec4e98a38263c631a83d29c300e593f630e78231 100644
--- a/app/controller/window/AnnotationView.js
+++ b/app/controller/window/AnnotationView.js
@@ -59,6 +59,7 @@ Ext.define('EdiromOnline.controller.window.AnnotationView', {
             method: 'GET',
             params: {
                 uri: uri,
+                edition: editionId,
                 lang: lang
             },
             success: function(response){
@@ -72,6 +73,7 @@ Ext.define('EdiromOnline.controller.window.AnnotationView', {
             method: 'GET',
             params: {
                 uri: uri,
+                edition: editionId,
                 lang: lang
             },
             success: function(response){
diff --git a/app/view/window/iFrameView.js b/app/view/window/iFrameView.js
index 2fe5b6c9ea02fa531f67428f8cac5309e54c88dd..234104e2e05ec2c6cc521a7f709376a87703d019 100644
--- a/app/view/window/iFrameView.js
+++ b/app/view/window/iFrameView.js
@@ -35,7 +35,7 @@ Ext.define('EdiromOnline.view.window.iFrameView', {
 		
 		var me = this;
 		
-		me.html = '<div id="' + me.id + '_iFrameViewCont" class="iFrameViewContent"><iframe id="' + me.id +
+		me.html = '<div id="' + me.id + '_iFrameViewCont" class="iFrameViewContent" style="height: 100%;"><iframe id="' + me.id +
 		'_iFrameViewContIFrame" style="width:100%; height:100%; border:none; background-color:white;"></iframe></div>';
 		
 		me.callParent();
diff --git a/app/view/window/image/ImageViewer.js b/app/view/window/image/ImageViewer.js
index 53ed4d97429419904e2deddc2c5536a816cc5c83..e371d73a13a7d2a1ac9b29aa057427fcfbac3973 100644
--- a/app/view/window/image/ImageViewer.js
+++ b/app/view/window/image/ImageViewer.js
@@ -46,6 +46,7 @@ Ext.define('EdiromOnline.view.window.image.ImageViewer', {
     
     shapes: null,
     shapesHidden: false,
+    partLabel: null,
 
     svgOverlays: null,
     
@@ -64,10 +65,30 @@ Ext.define('EdiromOnline.view.window.image.ImageViewer', {
         
         me.addEvents('zoomChanged',
                     'imageChanged');
-
-        me.html = '<div id="' + me.id + '_facsCont" style="overflow: hidden; background-color: black; top:0px; bottom: 0px; left: 0px; right: 0px; position:absolute;"></div>' +
-                  '<div id="' + me.id + '_facsContEvents" class="facsContEvents"></div>';
-
+       
+/*       from OPERA*/
+       var facsContEvents;
+
+        if (me.partLabel != null) {
+         facsContEvents = '<div id="' + me.id + '_facsContEvents" class="facsContEvents">' +
+            '<div  id="' + me.id + '_' + me.partLabel + '" class="part">' +
+              '<span class="partInner" id="' + me.id + '_' + me.partLabel + '_inner">' +
+              me.partLabel + '</span>' +
+            '</div>' +
+         '</div>';
+        }
+        else {
+          facsContEvents = '<div id="' + me.id + '_facsContEvents" class="facsContEvents"></div>';
+         };
+         
+        me.html = '<div id="' + me.id + '_facsCont" style="background-color: black; top:0px; bottom: 0px; left: 0px; right: 0px; position:absolute;"></div>' + facsContEvents;
+
+/*       from OPERA END*/
+                    
+/*                    */
+/*        me.html = '<div id="' + me.id + '_facsCont" style="overflow: hidden; background-color: black; top:0px; bottom: 0px; left: 0px; right: 0px; position:absolute;"></div>' +*/
+/*                  '<div id="' + me.id + '_facsContEvents" class="facsContEvents"></div>';*/
+/*                    */
         me.imageLoader = new EdiromOnline.view.window.image.ImageLoader({
             viewer: me
         });
diff --git a/app/view/window/source/MeasureBasedView.js b/app/view/window/source/MeasureBasedView.js
index b32ecb81d73b56e8d2607b1ef160f244bda90712..4a6a601084e532ac9a1686223ce9a6c699751206 100644
--- a/app/view/window/source/MeasureBasedView.js
+++ b/app/view/window/source/MeasureBasedView.js
@@ -211,6 +211,7 @@ Ext.define('EdiromOnline.view.window.source.MeasureBasedView', {
         Ext.Array.each(measures.get('measures'), function(m) {
             
             var voice = m['voice'];
+            var partLabel = m['partLabel'];
             
             if(voice == 'score' || me.parts.getById(voice.substr(1)).get('selected')) {
             
@@ -218,7 +219,8 @@ Ext.define('EdiromOnline.view.window.source.MeasureBasedView', {
                 
                 if(typeof viewer == 'undefined') {
                     viewer = Ext.create('EdiromOnline.view.window.source.HorizontalMeasureViewer', {
-                        owner: me
+                        owner: me,
+                        partLabel: partLabel
                     });
                     
                     me.viewers.add(voice, viewer);
@@ -376,6 +378,8 @@ Ext.define('EdiromOnline.view.window.source.HorizontalMeasureViewer', {
     
     border: false,
     
+    partLabel: '',
+    
     style: {
         borderColor: 'black',
         borderStyle: 'solid',
@@ -397,7 +401,7 @@ Ext.define('EdiromOnline.view.window.source.HorizontalMeasureViewer', {
         me.owner.owner.on('measureVisibilityChange', me.onMeasureVisibilityChange, me);
         me.owner.owner.on('annotationsVisibilityChange', me.onAnnotationsVisibilityChange, me);
         
-        var viewer = Ext.create('EdiromOnline.view.window.image.ImageViewer', {flex: 1});
+        var viewer = Ext.create('EdiromOnline.view.window.image.ImageViewer', {flex: 1, partLabel: me.partLabel});
         viewer.on('imageChanged', me.onViewerImageChange, me);
         
         me.imageViewers = [viewer];
diff --git a/resources/css/todo.css b/resources/css/todo.css
index 28c72253e68898dff6974643d020fd5ab7ba685e..3cc7c2d25790bd7a343fd8251ad2a94a0e9b2a00 100644
--- a/resources/css/todo.css
+++ b/resources/css/todo.css
@@ -118,3 +118,24 @@ span.italic {
 .hidden {
     display: none;
 }
+
+/* part label in horizontalMeasureViewer */
+
+.part {
+z-index: 1;
+}
+
+
+.partInner {
+font-size: 13px;
+font-weight: bold;
+background-image: -moz-linear-gradient(top, rgba(255, 255, 255,0.9),rgba(255, 255, 255,0.8)) !important;
+background-image: -webkit-linear-gradient(top, rgba(255, 255, 255,0.9),rgba(255, 255, 255,0.8)) !important;
+box-shadow: 3px 3px 5px rgba(0,0,0,0.7);
+padding: 2px 5px;
+border-radius: 5px;
+color: rgba(0,0,0,0.75);
+position: absolute;
+top: 5px;
+left: 10px;
+}