Index: branches/5.0.x/core/units/categories/categories_event_handler.php =================================================================== diff -u -r12877 -r12889 --- branches/5.0.x/core/units/categories/categories_event_handler.php (.../categories_event_handler.php) (revision 12877) +++ branches/5.0.x/core/units/categories/categories_event_handler.php (.../categories_event_handler.php) (revision 12889) @@ -1,6 +1,6 @@ GetField($field, 'no_default'); - if ($value == '' || preg_match('/^_Auto: (.*)/', $value)) { - $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); - /* @var $ml_formatter kMultiLanguage */ + $value = $object->GetField($field, 'no_default'); // current value of target field - $object->SetField( - $ml_formatter->LangFieldName($field), - $object->GetField( $ml_formatter->LangFieldName('Name') ) - ); + $ml_formatter =& $this->Application->recallObject('kMultiLanguage'); + /* @var $ml_formatter kMultiLanguage */ + + $src_field = $ml_formatter->LangFieldName('Name'); + $dst_field = $ml_formatter->LangFieldName($field); + + $dst_field_not_changed = $object->GetOriginalField($dst_field) == $value; + + if ($value == '' || preg_match('/^_Auto: (.*)/', $value) || (($object->GetOriginalField($src_field) == $value) && $dst_field_not_changed)) { + // target field is empty OR target field value starts with "_Auto: " OR (source field value + // before change was equals to current target field value AND target field value wasn't changed) + $object->SetField($dst_field, $object->GetField($src_field)); } }