Index: data/LibsDB/vcaBase.sql
===================================================================
--- data/LibsDB/vcaBase.sql	(revision 3025)
+++ data/LibsDB/vcaBase.sql	(working copy)
@@ -9670,7 +9670,7 @@
 	this.attrSet("event", this.attr("event")+"usr_calc\n");	//!!!! Just to calc in the next session cycle for update
 	toCalcCycles = max(0, toCalcCycles-1);
 }
-if(toFastCalc != toFastCalc_)	{ toFastCalc_ = toFastCalc; this.calcPer(toFastCalc?500:-3); }','','',-1,'path;name;dscr;active;geomW;geomH;evProc;backColor;bordWidth;bordColor;',1747291906);
+if(toFastCalc != toFastCalc_)	{ toFastCalc_ = toFastCalc; this.calcPer(toFastCalc?500:-3); }','','',-1,'path;name;dscr;active;geomW;geomH;evProc;backColor;bordWidth;bordColor;',1748537488);
 INSERT INTO wlb_Main VALUES('grpGraph','iVBORw0KGgoAAAANSUhEUgAAAEAAAAAqCAIAAACMZMq1AAAACXBIWXMAAAx1AAAMdQEteJR1AAAE
 xklEQVRYhdVYTW/bRhCd2S8uRVESJbOCZCSAgThBTknR3Jrmnj+R/5Kf2EvgwEacOkod24q+SIHk
 krvbA22akW0ILQSknNO+p/cWXM2sZih8//69ylSSJo7jGGPiOG6327ooALHlulEcE0IAQCmVJAn8
@@ -21763,7 +21763,7 @@
 If this element using as a control panel is not required, it is firstly in the primary data representing widgets and by their specializing in particular types of data to what a separate panel can be created. Therefore, due to its high universality, due to the support of all known representative structures of DAQ-templates, it is obligatory to use in main frames, as is done in the frame "Contours group".
 
 Author: Roman Savochenko <roman@oscada.org>
-Version: 1.4.1
+Version: 1.4.2
 License: GPLv2',32,'','','','Елемент фактично є універсальною панеллю управління та розширеного контролю різними пристроями за усіма відомими та визначеними представницькими структурами базових даних систем управління за DAQ-шаблонами:
 - аналогові: аналоговий сигнал, ручний ввід аналогового сигналу, ПІД-регулятор (аналоговий та імпульсний);
 - дискретні збірки: клапани, відсікачі, засувки, двигуни, вентилятори та різноманітні перемикачі;
@@ -21776,7 +21776,7 @@
 Якщо використання цього елементу у якості панелі керування не є обов''язковим, у першу чергу у віджетах первинного представлення та через їх спеціалізацію на окремих типах даних, щодо яких можна створити окрему панель. То завдяки високій універсальності, через підтримку всіх відомих репрезентативних структур DAQ-шаблонів, її обов''язково використовувати у основних кадрах, як це зроблено у кадрі "Група контурів".
 
 Автор: Роман Савоченко <roman@oscada.org>
-Версія: 1.4.1
+Версія: 1.4.2
 Ліцензія: GPLv2','','Элемент фактически является универсальной панелью управления и расширенного контроля различными устройствами по всем известным и определённым представительским структурам базовых данных систем управления по DAQ-шаблонам:
 - аналоговые: аналоговый сигнал, ручной ввод аналогового сигнала, ПИД-регулятор (аналоговый и импульсный);
 - дискретные сборки: клапаны, отсекатели, задвижки, двигатели, вентиляторы и различные переключатели;
@@ -21789,7 +21789,7 @@
 Если использование этого элемента в качестве панели управления не является обязательным, в первую очередь в виджетах первичного представления и через их специализацию на отдельных типах данных, для которых можно создать отдельную панель. То благодаря высокой универсальности, через поддержку всех известных репрезентативных структур DAQ-шаблонов, её обязательно использовать в основных кадрах, как это сделано в кадре "Группа контуров".
 
 Автор: Роман Савоченко <roman@oscada.org>
-Версия: 1.4.1
+Версия: 1.4.2
 Лицензия: GPLv2','','','','');
 INSERT INTO wlb_Main_io VALUES('prescrRunSimple','geomZ','5',32,'','','lib','','','','','','','');
 INSERT INTO wlb_Main_io VALUES('prescrEdit','numbArg','1',32,'','','labProg','','','','','','','');
@@ -29158,7 +29158,7 @@
 INSERT INTO wlb_Main_uio VALUES('ElCadr','prmCasc','Parameter: cascade',131072,'0',14,'<page>|casc','','','Параметр: каскад','','','Параметр: каскад','','','','','','');
 INSERT INTO wlb_Main_uio VALUES('ElCadr','prmDemention','Parameter: dimension',131333,'',10,'<page>|ed','','','Параметр: одиниця виміру','','','Параметр: единица измерения','','','','','','');
 INSERT INTO wlb_Main_uio VALUES('ElCadr','prmOut','Parameter: output',131076,'0|',14,'<page>|out','','','Параметр: вихід','','','Параметр: выход','','','','','','');
-INSERT INTO wlb_Main_uio VALUES('ElCadr','prmShifr','Parameter: code',131077,'',10,'<page>|NAME','','','Параметр: шифр','','','Параметр: шифр','','','','','','');
+INSERT INTO wlb_Main_uio VALUES('ElCadr','prmShifr','Parameter: code',131333,'',10,'<page>|NAME','','','Параметр: шифр','','','Параметр: шифр','','','','','','');
 INSERT INTO wlb_Main_uio VALUES('ElCadr','prmSp','Parameter: set-point',131076,'0|',14,'<page>|sp','','','Параметр: завдання','','','Параметр: задание','','','','','','');
 INSERT INTO wlb_Main_uio VALUES('ElCadr','prmVar','Parameter: variable',131076,'0|',14,'<page>|var','','','Параметр: змінна','','','Параметр: переменная','','','','','Параметар: променљива','');
 INSERT INTO wlb_Main_uio VALUES('grpGraph','min','Minimum',131076,'0|0;0|',10,'Parameter|min','','el8','Мінімум','','','Минимум','','','','','Минимум','');
@@ -29294,7 +29294,7 @@
 INSERT INTO wlb_Main_uio VALUES('ElCadr','prmAMin','Parameter: border down alarm',131076,'<EVAL>|',10,'<page>|aMin','','','Параметр: границя нижня аварійна','','','Параметр: граница нижн. аварийная','','','','','','');
 INSERT INTO wlb_Main_uio VALUES('ElCadr','prmAnalog','Parameter: analog regulator',131072,NULL,10,'<page>|analog','','','Параметр: аналоговий регулятор','','','Параметр: аналоговый регулятор','','','','','','');
 INSERT INTO wlb_Main_uio VALUES('ElCadr','prmColor','Parameter: border color',131077,NULL,10,'<page>|color','','','Параметр: колір границі','','','Параметр: цвет бордюра','','','','','','');
-INSERT INTO wlb_Main_uio VALUES('ElCadr','prmDescr','Parameter: description',131077,NULL,10,'<page>|DESCR','','','Параметр: опис','','','Параметр: описание','','','','','Параметар: опис','');
+INSERT INTO wlb_Main_uio VALUES('ElCadr','prmDescr','Parameter: description',131333,NULL,10,'<page>|DESCR','','','Параметр: опис','','','Параметр: описание','','','','','Параметар: опис','');
 INSERT INTO wlb_Main_uio VALUES('ElCadr','prmId','Parameter: identifier',131077,NULL,10,'<page>|SHIFR','','','Параметр: ідентифікатор','','','Параметр: идентификатор','','','','','','');
 INSERT INTO wlb_Main_uio VALUES('ElCadr','prmImpQdwnTm','Parameter: imp. out down',131072,NULL,10,'<page>|impQdwn','','','Параметр: імпульсний вихід вниз','','','Параметр: выходной импульс вниз','','','','','','');
 INSERT INTO wlb_Main_uio VALUES('ElCadr','prmImpQupTm','Parameter: imp. out up',131072,NULL,10,'<page>|impQup','','','Параметр: імпульсний вихід вгору','','','Параметр: выходной импульс вверх','','','','','','');
Index: src/moduls/daq/LogicLev/logiclev.cpp
===================================================================
--- src/moduls/daq/LogicLev/logiclev.cpp	(revision 3019)
+++ src/moduls/daq/LogicLev/logiclev.cpp	(working copy)
@@ -688,8 +688,8 @@
 	    if(idStart >= 0)	tmpl->setB(idStart, tmpl->isChangedProg(true) || first);
 	    if(idStop >= 0)	tmpl->setB(idStop, last);
 	    if(idSh >= 0)	tmpl->setS(idSh, id());
-	    if(idNm >= 0)	tmpl->setS(idNm, name());
-	    if(idDscr >= 0)	tmpl->setS(idDscr, descr());
+	    if(idNm >= 0)	tmpl->setS(idNm, trD(name()));
+	    if(idDscr >= 0)	tmpl->setS(idDscr, trD(descr()));
 
 	    //Get input links
 	    tmpl->inputLinks();
@@ -706,8 +706,8 @@
 	    tmpl->archAttrs(this);
 
 	    //Put fixed system attributes
-	    if(idNm >= 0 && tmpl->ioMdf(idNm))	setName(tmpl->getS(idNm));
-	    if(idDscr >= 0 && tmpl->ioMdf(idDscr))	setDescr(tmpl->getS(idDscr));
+	    if(idNm >= 0 && tmpl->ioMdf(idNm))	setName(trDSet(name(),tmpl->getS(idNm)));
+	    if(idDscr >= 0 && tmpl->ioMdf(idDscr))	setDescr(trDSet(descr(),tmpl->getS(idDscr)));
 	}
 
 	if(owner().messLev() == TMess::Debug && stTm)
Index: src/moduls/daq/ModBus/modbus_daq.cpp
===================================================================
--- src/moduls/daq/ModBus/modbus_daq.cpp	(revision 3019)
+++ src/moduls/daq/ModBus/modbus_daq.cpp	(working copy)
@@ -1399,8 +1399,8 @@
 	if(lCtx->idStart >= 0)	lCtx->setB(lCtx->idStart, lCtx->isChangedProg(true) || first);
 	if(lCtx->idStop >= 0)	lCtx->setB(lCtx->idStop, last);
 	if(lCtx->idSh >= 0)	lCtx->setS(lCtx->idSh, id());
-	if(lCtx->idNm >= 0)	lCtx->setS(lCtx->idNm, name());
-	if(lCtx->idDscr >= 0)	lCtx->setS(lCtx->idDscr, descr());
+	if(lCtx->idNm >= 0)	lCtx->setS(lCtx->idNm, trD(name()));
+	if(lCtx->idDscr >= 0)	lCtx->setS(lCtx->idDscr, trD(descr()));
 
 	//Get input links
 	lCtx->inputLinks();
@@ -1414,8 +1414,8 @@
 	lCtx->outputLinks();
 
 	//Put fixed system attributes
-	if(lCtx->idNm >= 0 && lCtx->ioMdf(lCtx->idNm)) setName(lCtx->getS(lCtx->idNm));
-	if(lCtx->idDscr >= 0 && lCtx->ioMdf(lCtx->idDscr)) setDescr(lCtx->getS(lCtx->idDscr));
+	if(lCtx->idNm >= 0 && lCtx->ioMdf(lCtx->idNm)) setName(trDSet(name(),lCtx->getS(lCtx->idNm)));
+	if(lCtx->idDscr >= 0 && lCtx->ioMdf(lCtx->idDscr)) setDescr(trDSet(descr(),lCtx->getS(lCtx->idDscr)));
 
 	//Put values to the attributes and archives in the passive archiving mode
 	lCtx->archAttrs(this);
Index: src/moduls/daq/OPC_UA/mod_daq.cpp
===================================================================
--- src/moduls/daq/OPC_UA/mod_daq.cpp	(revision 3019)
+++ src/moduls/daq/OPC_UA/mod_daq.cpp	(working copy)
@@ -1148,8 +1148,8 @@
 	if(lCtx->idStart >= 0)	lCtx->setB(lCtx->idStart, lCtx->isChangedProg(true) || first);
 	if(lCtx->idStop >= 0)	lCtx->setB(lCtx->idStop, last);
 	if(lCtx->idSh >= 0)	lCtx->setS(lCtx->idSh, id());
-	if(lCtx->idNm >= 0)	lCtx->setS(lCtx->idNm, name());
-	if(lCtx->idDscr >= 0)	lCtx->setS(lCtx->idDscr, descr());
+	if(lCtx->idNm >= 0)	lCtx->setS(lCtx->idNm, trD(name()));
+	if(lCtx->idDscr >= 0)	lCtx->setS(lCtx->idDscr, trD(descr()));
 
 	//Get input links
 	lCtx->inputLinks();
@@ -1163,8 +1163,8 @@
 	lCtx->outputLinks();
 
 	//Put fixed system attributes
-	if(lCtx->idNm >= 0 && lCtx->ioMdf(lCtx->idNm)) setName(lCtx->getS(lCtx->idNm));
-	if(lCtx->idDscr >= 0 && lCtx->ioMdf(lCtx->idDscr)) setDescr(lCtx->getS(lCtx->idDscr));
+	if(lCtx->idNm >= 0 && lCtx->ioMdf(lCtx->idNm)) setName(trDSet(name(),lCtx->getS(lCtx->idNm)));
+	if(lCtx->idDscr >= 0 && lCtx->ioMdf(lCtx->idDscr)) setDescr(trDSet(descr(),lCtx->getS(lCtx->idDscr)));
 
 	//Put values to the attributes and archives in the passive archiving mode
 	lCtx->archAttrs(this);
Index: src/moduls/daq/Siemens/siemens.cpp
===================================================================
--- src/moduls/daq/Siemens/siemens.cpp	(revision 3029)
+++ src/moduls/daq/Siemens/siemens.cpp	(working copy)
@@ -1987,8 +1987,8 @@
 	if(lCtx->idStart >= 0)	lCtx->setB(lCtx->idStart, lCtx->isChangedProg(true) || first);
 	if(lCtx->idStop >= 0)	lCtx->setB(lCtx->idStop, last);
 	if(lCtx->idSh >= 0)	lCtx->setS(lCtx->idSh, id());
-	if(lCtx->idNm >= 0)	lCtx->setS(lCtx->idNm, name());
-	if(lCtx->idDscr >= 0)	lCtx->setS(lCtx->idDscr, descr());
+	if(lCtx->idNm >= 0)	lCtx->setS(lCtx->idNm, trD(name()));
+	if(lCtx->idDscr >= 0)	lCtx->setS(lCtx->idDscr, trD(descr()));
 
 	//Get input links
 	lCtx->inputLinks();
@@ -2002,8 +2002,8 @@
 	lCtx->outputLinks();
 
 	//Put fixed system attributes
-	if(lCtx->idNm >= 0 && lCtx->ioMdf(lCtx->idNm)) setName(lCtx->getS(lCtx->idNm));
-	if(lCtx->idDscr >= 0 && lCtx->ioMdf(lCtx->idDscr)) setDescr(lCtx->getS(lCtx->idDscr));
+	if(lCtx->idNm >= 0 && lCtx->ioMdf(lCtx->idNm)) setName(trDSet(name(),lCtx->getS(lCtx->idNm)));
+	if(lCtx->idDscr >= 0 && lCtx->ioMdf(lCtx->idDscr)) setDescr(trDSet(descr(),lCtx->getS(lCtx->idDscr)));
 
 	//Put values to the attributes and archives in the passive archiving mode
 	lCtx->archAttrs(this);
Index: src/moduls/ui/VCAEngine/session.cpp
===================================================================
--- src/moduls/ui/VCAEngine/session.cpp	(revision 3025)
+++ src/moduls/ui/VCAEngine/session.cpp	(working copy)
@@ -2191,12 +2191,14 @@
 	    for(unsigned iA = 0; iA < mAttrLnkLs.size(); iA++) {
 		try { attr = attrAt(mAttrLnkLs[iA]); } catch(TError&) { continue; }
 		string	cfgVal = attr.at().cfgVal(), cfgValTr = cfgVal;
-		if(attr.at().type() == TFld::String)
-		    cfgValTr = trD_LU(cfgVal, reqLang, reqUser);
+		if(attr.at().type() == TFld::String) cfgValTr = trD_LU(cfgVal, reqLang, reqUser);
+
+		bool restoreTr = false;
 		if(attr.at().flgSelf()&Attr::CfgConst && !cfgValTr.empty()) attr.at().setS(cfgValTr);
 		else if(attr.at().flgSelf()&Attr::CfgLnkIn && !cfgValTr.empty() && TSYS::strParse(cfgValTr,0,":") == "val")
 		    attr.at().setS(cfgValTr.substr(4));
 		else if(attr.at().flgSelf()&Attr::CfgLnkIn && !cfgVal.empty()) {
+		    restoreTr = true;
 		    obj_tp = TSYS::strParse(cfgVal, 0, ":") + ":";
 		    if(obj_tp == "val:")	attr.at().setS(cfgVal.substr(obj_tp.size()));
 		    else if(obj_tp == "prm:") {
@@ -2221,10 +2223,17 @@
 			else attr.at().set(vl.at().get());*/
 		    }
 		    else if(obj_tp == "wdg:")
-			try { attr.at().set(attrAt(cfgVal.substr(obj_tp.size()),0).at().get()); }
-			catch(TError &err) { attr.at().setS(EVAL_STR); continue; }
+			try {
+			    restoreTr = true;
+			    attr.at().set(attrAt(cfgVal.substr(obj_tp.size()),0).at().get());
+			} catch(TError &err) { attr.at().setS(EVAL_STR); continue; }
 		    else if(obj_tp == "arh:" && attr.at().flgGlob()&Attr::Address)
 			attr.at().setS("/Archive/va_"+cfgVal.substr(obj_tp.size()));
+
+		    //Restore translation of the translatable attribute for transitive translation data from sources
+		    //????
+		    if(restoreTr && attr.at().type() == TFld::String)
+			attr.at().setFlgSelf((Attr::SelfAttrFlgs)(attr.at().flgSelf()&(~Attr::NoTransl)), true);
 		}
 		/*else if(attr.at().flgSelf()&Attr::CfgLnkOut) {
 		    obj_tp = TSYS::strSepParse(cfgVal,0,':') + ":";
Index: src/tcontroller.cpp
===================================================================
--- src/tcontroller.cpp	(revision 3026)
+++ src/tcontroller.cpp	(working copy)
@@ -440,16 +440,19 @@
     string pNm = TSYS::strLine(prm, 1);
     string aCat = type2Code + owner().modId() + ":" + id() + (pId.size()?"."+pId:"") + (cat.size()?":"+cat:"");
 
-    //Appending to the message name of the Controller and whole Parameter (with includes) at presence
-    string aMess = pNm.size() ? pNm : "";
-    TArrayObj *messNm = TRegExp("^MessName:(.*?)$", "gm").match(descr());
+    //Appending to the message name of the Controller name at presence
+    TArrayObj *messNm = TRegExp("^MessName:(.*?)$", "gm").match(trD(descr()));
     bool isMessName = (messNm && messNm->arSize() >= 2);
-    pNm = isMessName ? sTrm(messNm->arGet(1).getS()) : "";
+    string aMess = isMessName ? sTrm(messNm->arGet(1).getS()) : "";
     if(messNm) delete messNm;
-    if(!isMessName && cfg("NAME").getS().size() && mess.find(name()) == string::npos)
-	pNm = name();
-    if(pNm.size()) aMess = pNm + (aMess.size()?" > ":"") + aMess;
-    aMess += (aMess.size()?" > ":"") + mess;
+    if(!isMessName && cfg("NAME").getS().size() && mess.find(trD(name())) == string::npos)
+	aMess = trD(name());
+    //Appending to the message name of whole Parameter name (with includes) at presence
+    if(pNm.size()) aMess += (aMess.size()?" > ":"") + pNm;
+    //Appending to the message name of the end symbol " > " forcibly.
+    if(aMess.size()) aMess += " > ";
+    //Appending the message
+    aMess += mess;
 
     message(aCat.c_str(), lev, aMess.c_str());
 }
@@ -464,16 +467,19 @@
 
 	string	aMess;
 	if(mess.size()) {
-	    //Appending to the message name of the Controller and whole Parameter (with includes) at presence
-	    aMess = pNm.size() ? pNm : "";
-	    TArrayObj *messNm = TRegExp("^MessName:(.*?)$", "gm").match(descr());
+	    //Appending to the message name of the Controller name at presence
+	    TArrayObj *messNm = TRegExp("^MessName:(.*?)$", "gm").match(trD(descr()));
 	    bool isMessName = (messNm && messNm->arSize() >= 2);
-	    pNm = isMessName ? sTrm(messNm->arGet(1).getS()) : "";
+	    aMess = isMessName ? sTrm(messNm->arGet(1).getS()) : "";
 	    if(messNm) delete messNm;
-	    if(!isMessName && cfg("NAME").getS().size() && mess.find(name()) == string::npos)
-	    pNm = name();
-	    if(pNm.size()) aMess = pNm + (aMess.size()?" > ":"") + aMess;
-	    aMess += (aMess.size()?": ":"") + mess;
+	    if(!isMessName && cfg("NAME").getS().size() && mess.find(trD(name())) == string::npos)
+		aMess = trD(name());
+	    //Appending to the message name of whole Parameter name (with includes) at presence
+	    if(pNm.size()) aMess += (aMess.size()?" > ":"") + pNm;
+	    //Appending to the message name of the end symbol whether " > " at no parameter name for compatibility or ": ".
+	    if(aMess.size()) aMess += (prm.size() && pNm.empty()) ? " > " : ": ";
+	    //Appending the message
+	    aMess += mess;
 	}
 
 	//Checking for presence at set and missing at unset
Index: src/tmess.cpp
===================================================================
--- src/tmess.cpp	(revision 3025)
+++ src/tmess.cpp	(working copy)
@@ -304,7 +304,8 @@
     if(!translDyn()) return base;
 
     string ctx = trCtx();
-    return translGetLU(base, TSYS::strLine(ctx,1), TSYS::strLine(ctx,0));
+    if(ctx.size()) return translGetLU(base, TSYS::strLine(ctx,1), TSYS::strLine(ctx,0));
+    return translGetU(base, "root");
 }
 
 string TMess::translGet( const string &ibase, const string &lang, const string &src )
@@ -440,7 +441,8 @@
     if(!translDyn()) return mess;
 
     string ctx = trCtx();
-    return translSetLU(base, TSYS::strLine(ctx,1), TSYS::strLine(ctx,0), mess);
+    if(ctx.size()) return translSetLU(base, TSYS::strLine(ctx,1), TSYS::strLine(ctx,0), mess);
+    return translSetU(base, "root", mess);
 }
 
 string TMess::translSet( const string &base, const string &lang, const string &mess, bool *needReload, const string &srcFltr )
Index: src/tparamcontr.cpp
===================================================================
--- src/tparamcontr.cpp	(revision 3026)
+++ src/tparamcontr.cpp	(working copy)
@@ -447,12 +447,12 @@
 	//  Getting whole parameter name with included parameters of not empty names and with checking for dublicate in the message
 	TRegExp re("^MessName:(.*?)$", "gm");
 	for(TParamContr *prmO = this; prmO; prmO = dynamic_cast<TParamContr*>(prmO->nodePrev())) {
-	    TArrayObj *messNm = re.match(prmO->descr());
+	    TArrayObj *messNm = re.match(trD(prmO->descr()));
 	    bool isMessName = (messNm && messNm->arSize() >= 2);
 	    pNm = isMessName ? sTrm(messNm->arGet(1).getS()) : "";
 	    if(messNm) delete messNm;
-	    if(!isMessName && prmO->cfg("NAME").getS().size() && mess.find(prmO->name()) == string::npos)
-		pNm = prmO->name();
+	    if(!isMessName && prmO->cfg("NAME").getS().size() && mess.find(trD(prmO->name())) == string::npos)
+		pNm = trD(prmO->name());
 	    if(pNm.size()) pName = pNm + (pName.size()?" > ":"") + pName;
 	}
 
@@ -470,12 +470,12 @@
 	//  Getting whole parameter name with included parameters of not empty names and with checking for dublicate in the message
 	TRegExp re("^MessName:(.*?)$", "gm");
 	for(TParamContr *prmO = this; prmO; prmO = dynamic_cast<TParamContr*>(prmO->nodePrev())) {
-	    TArrayObj *messNm = re.match(prmO->descr());
+	    TArrayObj *messNm = re.match(trD(prmO->descr()));
 	    bool isMessName = (messNm && messNm->arSize() >= 2);
 	    pNm = isMessName ? sTrm(messNm->arGet(1).getS()) : "";
 	    if(messNm) delete messNm;
-	    if(!isMessName && prmO->cfg("NAME").getS().size() && mess.find(prmO->name()) == string::npos)
-		pNm = prmO->name();
+	    if(!isMessName && prmO->cfg("NAME").getS().size() && mess.find(trD(prmO->name())) == string::npos)
+		pNm = trD(prmO->name());
 	    if(pNm.size()) pName = pNm + (pName.size()?" > ":"") + pName;
 	}
 
