Index: TXM/trunk/org.txm.core/src/java/org/txm/xml/XMLParser.java
===================================================================
--- TXM/trunk/org.txm.core/src/java/org/txm/xml/XMLParser.java	(revision 3461)
+++ TXM/trunk/org.txm.core/src/java/org/txm/xml/XMLParser.java	(revision 3462)
@@ -277,7 +277,7 @@
 				b.append("in File:" + this.inputurl.toString());
 			}
 			else {
-				b.append("in File:" + this.inputurl.getFile());
+				b.append("in File:" + new File(this.inputurl.getFile()).getName());
 			}
 			
 			if (b.length() == 0) return parser.getLocation().toString();
Index: TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/projects/nov13/CreateTheOtherTurns.groovy
===================================================================
--- TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/projects/nov13/CreateTheOtherTurns.groovy	(revision 3461)
+++ TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/projects/nov13/CreateTheOtherTurns.groovy	(revision 3462)
@@ -27,6 +27,8 @@
 	
 	String otherNonPrimarySpeakerId = "other"
 	
+	def warnings = []
+	
 	public CreateTheOtherTurns(File xmlfile, String primarySpeakerIdRegexString, String otherNonPrimarySpeakerId, Boolean debug) {
 		super(xmlfile)
 		this.debug = debug
@@ -120,7 +122,7 @@
 							super.processCharacters();
 						}
 					}
-
+					
 					protected void writeWord(String word) {
 						writer.writeStartElement("w") // start the initial word
 						for (String attr : wInfos.keySet() ) {
@@ -129,9 +131,10 @@
 						writer.writeCharacters(word)
 						writer.writeEndElement() // w
 					}
-										
-					def startOtherReg = /^(.*)\*([^\p{Zs}]+.*)$/
-					def endOtherReg = /^(.*[^\p{Zs}]+)\*(.*)$/
+					
+					def startOtherReg = /^\*([^*])?([^\p{Zs}]+.*)$/
+					def endOtherReg = /^(.*[^\p{Zs}]+)\*([^*])?$/
+					def startAndEndOtherReg = /^([^*])?\*(.*[^\p{Zs}]+)\*([^*])?$/
 					String previousOtherStarting = "<none>"
 					@Override
 					protected void processEndElement() throws XMLStreamException {
@@ -139,21 +142,72 @@
 							
 							inW = false
 							String word = wordBuffer.toString().trim()
+							String wordToWrite = word
+							boolean shouldCloseOtherTurn = false;
+							
+							def m0 = word =~ startAndEndOtherReg
+							if (m0.matches()) {
+								if (other) {
+									warnings << getLocation(true, false, false)+" with $word: Found a starting&ending * when one 'other' have been started at "+previousOtherStarting
+								}
+								// else {
+								
+								if (debug) println "- ligne "+parser.getLocation().getLineNumber()+" : ouverture&fermeture de other avec '$word' -> tours '$turnInfos'"
+								
+								writer.writeEndElement() // current Turn
+								writer.writeCharacters("\n")
+								
+								def tmpInfos = new LinkedHashMap()
+								for (String attr : turnInfos.keySet()) tmpInfos[attr] = turnInfos[attr]
+								tmpInfos["orig-speaker"] = turnInfos["speaker"]
+								
+								if (primarySpeakerIdRegex == null || turnInfos["speaker"] ==~ primarySpeakerIdRegex) { // the current speaker is not the primary speaker
+									tmpInfos["speaker"] = otherNonPrimarySpeakerId
+								} else {
+									tmpInfos["speaker"] = primarySpeakerId
+								}
+								tmpInfos["startTime"] = currentTime
+								writer.writeStartElement("Turn")
+								for (String attr : tmpInfos.keySet()) {
+									writer.writeAttribute(attr, tmpInfos[attr])
+								}
+								writer.writeCharacters("\n")
+								
+								writer.writeStartElement("Sync")
+								writer.writeAttribute("time", tmpInfos["startTime"])
+								writer.writeCharacters("\n")
+								writer.writeEndElement()
+								
+								String group1 = m0.group(1)
+								if (group1 != null && group1.length() > 0) { // write heading chars before the marker
+									writeWord(group1)
+									writer.writeCharacters("\n")
+								}
+								
+								shouldCloseOtherTurn = true;
+								wordToWrite = m0.group(2)
+								other = false
+								//}
+							}
+							
 							def m1 = word =~ startOtherReg
 							
-							if (m1.matches()) {
+							if (!m0.matches() && m1.matches()) { // not and start&end but only a start
+								
 								if (other) {
-									println "Warning at "+getLocation(true, false, false)+" with $word: Found a starting * when one 'other' have been started at "+previousOtherStarting
-								} else {
-									if (debug) println "- ligne "+parser.getLocation().getLineNumber()+" : ouverture de other avec '$word' -> tours '$turnInfos'"
-									//close current Turn and start a 'other' Turn
-									previousOtherStarting = ["word="+word+ " location="+getLocation(true, false, false)]
-									String group1 = m1.group(1)
-									if (group1.length() > 0) {
-										writeWord(group1)
-										writer.writeCharacters("\n")
-									}
-									
+									warnings << getLocation(true, false, false)+" with $word: Found a starting * when one 'other' have been started at "+previousOtherStarting
+								}
+								// else {
+								if (debug) println "- ligne "+parser.getLocation().getLineNumber()+" : ouverture de other avec '$word' -> tours '$turnInfos'"
+								//close current Turn and start a 'other' Turn
+								previousOtherStarting = ["word="+word+ " location="+getLocation(true, false, false)]
+								String group1 = m1.group(1)
+								if (group1 != null && group1.length() > 0) { // write heading chars before the marker
+									writeWord(group1)
+									writer.writeCharacters("\n")
+								}
+								
+								//if (other) { // don't restart a Turn if already in a Other Turn
 									writer.writeEndElement() // current Turn
 									writer.writeCharacters("\n")
 									
@@ -177,29 +231,32 @@
 									writer.writeAttribute("time", tmpInfos["startTime"])
 									writer.writeCharacters("\n")
 									writer.writeEndElement()
-									
-									other = true
-									word = m1.group(2)
-								}
+								//}
+								
+								other = true
+								wordToWrite = m1.group(2)
+								//}
 							}
 							
-							boolean shouldCloseOtherTurn = false;
 							def m2 = word =~ endOtherReg
-							if (m2.matches()) {
+							if (!m1.matches() && !m0.matches() && m2.matches()) {
 								if (debug) println "- ligne "+parser.getLocation().getLineNumber()+" : fermeture de other avec '$word' -> tours '$turnInfos'"
-								previousOtherStarting = ["word="+word+ " location="+getLocation(true, false, false)]
-								if (other) {
-									shouldCloseOtherTurn = true;
-									
-									word = m2.group(1)
-									other = false
-								} else {
-									println "Warning at "+getLocation(true, false, false)+" with $word: Found a closing * when one 'other' have been closed at "+previousOtherStarting
+								
+								if (!other) {
+									warnings << getLocation(true, false, false)+" with '$word': Found a closing * when one 'other' have been closed at "+previousOtherStarting
 								}
+								
+								previousOtherStarting = ["word='"+wordToWrite+ "' location="+getLocation(true, false, false)]
+								
+								
+								
+								shouldCloseOtherTurn = true;
+								
+								wordToWrite = m2.group(1)
 							}
 							
-							if (word.length() > 0) {
-								writeWord(word)
+							if (wordToWrite.length() > 0) {
+								writeWord(wordToWrite)
 							}
 							
 							if (shouldCloseOtherTurn) {
@@ -222,7 +279,9 @@
 								writer.writeCharacters("\n")
 								writer.writeEndElement()
 								
-								if (m2.group(2).length() > 0) {
+								if (m0.matches() && m0.group(3) != null && m0.group(3).length() > 0) {
+									writeWord(m0.group(3))
+								} else if (m2.matches() && m2.group(2) != null && m2.group(2).length() > 0) {
 									writeWord(m2.group(2))
 								}
 								
Index: TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/projects/nov13/PrepareTranscriptionsMacro.groovy
===================================================================
--- TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/projects/nov13/PrepareTranscriptionsMacro.groovy	(revision 3461)
+++ TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/projects/nov13/PrepareTranscriptionsMacro.groovy	(revision 3462)
@@ -90,6 +90,10 @@
 		println "WARNING: ERROR WHILE PROCESSING: "+file
 		if (debug) {println "DEBUG ACTIVATED -> STOP"; return;}
 	}
+	
+	if (fixer.getWarnings().size() > 0) {
+		println "Warnings while processing $file: \n\t"+fixer.getWarnings().join("\n\t")
+	}
 }
 cpb.done()
 if (cleanWorkingDirectories) {
Index: TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/transcription/AddEventsFromWordMarkersMacro.groovy
===================================================================
--- TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/transcription/AddEventsFromWordMarkersMacro.groovy	(revision 3461)
+++ TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/transcription/AddEventsFromWordMarkersMacro.groovy	(revision 3462)
@@ -72,7 +72,10 @@
 			def children = turn.children()
 			for (int i = 0 ; i < children.size() ; i++) {
 				def w = children[i]
-				if (wordElement.equals(w.name())) {
+				if (w instanceof String) {
+					println "???? "+w
+				}
+				if (!(w instanceof String) && wordElement.equals(w.name())) {
 					String wContent = w.text()
 					if (wContent ==~ newEventMarkerRegex) {
 						if (debug) println "Create event $w with $wContent"
Index: TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/transcription/SegmentTRSInSectionFromMarkerMacro.groovy
===================================================================
--- TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/transcription/SegmentTRSInSectionFromMarkerMacro.groovy	(revision 3461)
+++ TXM/trunk/org.txm.groovy.core/src/groovy/org/txm/macro/transcription/SegmentTRSInSectionFromMarkerMacro.groovy	(revision 3462)
@@ -148,7 +148,7 @@
 		}
 		
 		if (nFound == 0) {
-			errors << "$trsFile"
+			errors << trsFile.getName()
 		}
 		
 		resultDirectory.mkdir()
