Index: tmp/org.txm.lexicaltable.rcp/src/org/txm/lexicaltable/rcp/handlers/MergeLines.java
===================================================================
--- tmp/org.txm.lexicaltable.rcp/src/org/txm/lexicaltable/rcp/handlers/MergeLines.java	(revision 3140)
+++ tmp/org.txm.lexicaltable.rcp/src/org/txm/lexicaltable/rcp/handlers/MergeLines.java	(revision 3141)
@@ -54,27 +54,30 @@
 	
 	@Override
 	public Object execute(ExecutionEvent event) throws ExecutionException {
-		Shell shell = HandlerUtil.getActiveWorkbenchWindowChecked(event)
-				.getShell();
+		Shell shell = HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell();
 		
-		IWorkbenchPart editor = HandlerUtil.getActiveWorkbenchWindow(event)
-				.getActivePage().getActivePart();
+		IWorkbenchPart editor = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getActivePart();
+		
 		if (editor instanceof LexicalTableEditor) {
 			LexicalTableEditor LTeditor = (LexicalTableEditor) editor;
-			int[] selection = LTeditor.getlineTableViewer().getTable()
-					.getSelectionIndices();
-			if (selection.length == 0)
+			int[] selection = LTeditor.getlineTableViewer().getTable().getSelectionIndices();
+			
+			if (selection.length == 0) {
 				return null;
-			
+			}
 			String newname = ""; //$NON-NLS-1$
 			InputDialog d = new InputDialog(shell, TXMUIMessages.newName,
 					TXMUIMessages.editTheNameOfTheNewLineCreatedByTheMergedLines, "", null); //$NON-NLS-1$
-			if (d.open() == Window.OK)
+			
+			if (d.open() == Window.OK) {
 				newname = d.getValue();
-			else
+			} else {
 				return null;
-			if (newname.trim().equals("")) //$NON-NLS-1$
+			}
+			
+			if (newname.trim().equals("")) { //$NON-NLS-1$
 				return null;
+			}
 			
 			mergeLines(LTeditor, newname, selection);
 			
@@ -92,28 +95,32 @@
 	static public void mergeLines(LexicalTableEditor LTeditor, String newname, int[] selection) {
 		// sum the lines
 		StatusLine.setMessage(LexicalTableUIMessages.mergingLines);
-		List<double[]> cols = LTeditor.getCols();
-		LexicalTable table = LTeditor.getLexicalTable();
-		TableViewer lineTableViewer = LTeditor.getlineTableViewer();
-		double[] fuz = new double[cols.size()];
-		for (int j = 0; j < cols.size(); j++)
-			fuz[j] = 0;
-		for (int i : selection)
-			for (int j = 0; j < cols.size(); j++)
-				fuz[j] += cols.get(j)[i];
+		try {
+			List<double[]> cols = LTeditor.getCols();
+			LexicalTable table = LTeditor.getLexicalTable();
 			
-		// set values in the first row of the selection
-		for (int j = 0; j < cols.size(); j++)
-			table.getData().set(selection[0], j, fuz[j]);
-		
-		// keep only the first selected line
-		int[] lineToDelete = new int[selection.length - 1];
-		System.arraycopy(selection, 1, lineToDelete, 0, selection.length - 1);
-		// System.out.println("Lines to delete : "+Arrays.toString(lineToDelete));
-		table.getData().removeRows(lineToDelete);
-		table.setAltered();
-		// reset line name
-		try {
+			double[] fuz = new double[cols.size()];
+			for (int j = 0; j < cols.size(); j++) {
+				fuz[j] = 0;
+			}
+			for (int i : selection) {
+				for (int j = 0; j < cols.size(); j++) {
+					fuz[j] += cols.get(j)[i];
+				}
+			}
+			// set values in the first row of the selection
+			for (int j = 0; j < cols.size(); j++) {
+				table.getData().set(selection[0], j, fuz[j]);
+			}
+			
+			// keep only the first selected line
+			int[] lineToDelete = new int[selection.length - 1];
+			System.arraycopy(selection, 1, lineToDelete, 0, selection.length - 1);
+			// System.out.println("Lines to delete : "+Arrays.toString(lineToDelete));
+			table.getData().removeRows(lineToDelete);
+			table.setAltered();
+			// reset line name
+			
 			table.getRowNames().setString(selection[0], newname);
 			LTeditor.compute(false);
 			
Index: tmp/org.txm.lexicaltable.rcp/src/org/txm/lexicaltable/rcp/handlers/___MergeCols.java
===================================================================
--- tmp/org.txm.lexicaltable.rcp/src/org/txm/lexicaltable/rcp/handlers/___MergeCols.java	(revision 3140)
+++ tmp/org.txm.lexicaltable.rcp/src/org/txm/lexicaltable/rcp/handlers/___MergeCols.java	(revision 3141)
@@ -85,39 +85,34 @@
 			int nrows;
 			try {
 				nrows = table.getNRows();
-			}
-			catch (Exception e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-				return null;
-			}
-			for (int i = 1; i < selectedCols.length; i++) {
+				
+				for (int i = 1; i < selectedCols.length; i++) {
+					for (int j = 0; j < nrows; j++) {
+						firstcol[j] += cols.get(selectedCols[i])[j];
+					}
+				}
+				
+				// update table
 				for (int j = 0; j < nrows; j++) {
-					firstcol[j] += cols.get(selectedCols[i])[j];
+					table.getData().set(j, selectedCols[0], firstcol[j]);
 				}
-			}
-			
-			// update table
-			for (int j = 0; j < nrows; j++) {
-				table.getData().set(j, selectedCols[0], firstcol[j]);
-			}
-			
-			// keep only the first col
-			int[] coltodelete = new int[selectedCols.length - 1];
-			System.arraycopy(selectedCols, 1, coltodelete, 0,
-					selectedCols.length - 1);
-			table.getData().removeCols(coltodelete);
-			table.setAltered();
-			// reset col name
-			table.getColNames().setString(selectedCols[0], newname);
-			try {
+				
+				// keep only the first col
+				int[] coltodelete = new int[selectedCols.length - 1];
+				System.arraycopy(selectedCols, 1, coltodelete, 0, selectedCols.length - 1);
+				table.getData().removeCols(coltodelete);
+				table.setAltered();
+				// reset col name
+				table.getColNames().setString(selectedCols[0], newname);
+				
 				System.out.println(NLS.bind(TXMUIMessages.namesColon, Arrays.toString(table.getRowNames().asStringsArray())));
 			}
 			catch (Exception e1) {
 				// TODO Auto-generated catch block
 				org.txm.utils.logger.Log.printStackTrace(e1);
+				return null;
 			}
-			;
+			
 			System.out.println(TXMUIMessages.endOfColumnMerge);
 			LTeditor.refreshTable();
 		}
Index: tmp/org.txm.lexicaltable.rcp/src/org/txm/lexicaltable/rcp/editors/LexicalTableEditor.java
===================================================================
--- tmp/org.txm.lexicaltable.rcp/src/org/txm/lexicaltable/rcp/editors/LexicalTableEditor.java	(revision 3140)
+++ tmp/org.txm.lexicaltable.rcp/src/org/txm/lexicaltable/rcp/editors/LexicalTableEditor.java	(revision 3141)
@@ -266,90 +266,80 @@
 							}
 						}
 						
-						if (d.doMerge()) {
+						try {
 							
-							int nrows;
-							try {
-								nrows = lexicalTable.getNRows();
-							}
-							catch (Exception e2) {
-								// TODO Auto-generated catch block
-								e2.printStackTrace();
-								return;
-							}
-							String newname = d.getMergeName();
-							
-							Log.fine(NLS.bind(LexicalTableUIMessages.mergeColsColonP0, colindices));
-							
-							double[] firstcol = cols.get(colindices.get(0));
-							
-							// merge selected cols into the first one
-							for (int i = 1; i < colindices.size(); i++) {
+							if (d.doMerge()) {
+								
+								int nrows = lexicalTable.getNRows();
+								
+								String newname = d.getMergeName();
+								
+								Log.fine(NLS.bind(LexicalTableUIMessages.mergeColsColonP0, colindices));
+								
+								double[] firstcol = cols.get(colindices.get(0));
+								
+								// merge selected cols into the first one
+								for (int i = 1; i < colindices.size(); i++) {
+									for (int j = 0; j < nrows; j++) {
+										firstcol[j] += cols.get(colindices.get(i))[j];
+									}
+								}
+								
+								// update first col of the Lexical table
 								for (int j = 0; j < nrows; j++) {
-									firstcol[j] += cols.get(colindices.get(i))[j];
+									lexicalTable.getData().set(j, colindices.get(0), firstcol[j]);
 								}
-							}
-							
-							// update first col of the Lexical table
-							for (int j = 0; j < nrows; j++) {
-								lexicalTable.getData().set(j, colindices.get(0), firstcol[j]);
-							}
-							
-							// and its name
-							lexicalTable.getColNames().setString(colindices.get(0), newname);
-							
-							// keep only the first col
-							List<Integer> coltodelete = colindices.subList(1, colindices.size());
-							lexicalTable.getData().removeCols(coltodelete);
-							lexicalTable.setAltered();
-							// refresh stuff
-							collist = new ArrayList<>();// update col name
-							// list
-							try {
+								
+								// and its name
+								lexicalTable.getColNames().setString(colindices.get(0), newname);
+								
+								// keep only the first col
+								List<Integer> coltodelete = colindices.subList(1, colindices.size());
+								lexicalTable.getData().removeCols(coltodelete);
+								lexicalTable.setAltered();
+								// refresh stuff
+								collist = new ArrayList<>();// update col name
+								// list
 								for (String colname : lexicalTable.getColNames().asStringsArray()) {
 									collist.add(colname);
 								}
+								
+								Collections.sort(colindices);// update table viewer cols
+								for (int i = colindices.size() - 1; i >= 1; i--) {
+									viewer.getTable().getColumns()[colindices.get(i) + 3].dispose();// +3 = separator,
+									// form, freq
+								}
+								viewer.getTable().getColumns()[colindices.get(0) + 3].setText(newname);
+								compute(false);
+								
+								
 							}
-							catch (StatException e1) {
-								org.txm.utils.logger.Log.printStackTrace(e1);
-								return;
-							}
-							
-							Collections.sort(colindices);// update table viewer cols
-							for (int i = colindices.size() - 1; i >= 1; i--) {
-								viewer.getTable().getColumns()[colindices.get(i) + 3].dispose();// +3 = separator,
-								// form, freq
-							}
-							viewer.getTable().getColumns()[colindices.get(0) + 3].setText(newname);
-							compute(false);
-						}
-						// delete
-						else {
-							Log.fine(NLS.bind(LexicalTableUIMessages.deleteColsColonP0, colindices));
-							
-							lexicalTable.getData().removeCols(colindices);
-							lexicalTable.setAltered();
-							
-							collist = new ArrayList<>();
-							Vector colnames = lexicalTable.getColNames();
-							try {
+							// delete
+							else {
+								Log.fine(NLS.bind(LexicalTableUIMessages.deleteColsColonP0, colindices));
+								
+								lexicalTable.getData().removeCols(colindices);
+								lexicalTable.setAltered();
+								
+								collist = new ArrayList<>();
+								Vector colnames = lexicalTable.getColNames();
 								for (String colname : colnames.asStringsArray()) {
 									collist.add(colname);
 								}
+								Collections.sort(colindices);
+								for (int i = colindices.size() - 1; i >= 0; i--) {
+									viewer.getTable().getColumns()[colindices.get(i) + 3].dispose();
+								}
+								compute(false);
 							}
-							catch (StatException e1) {
-								org.txm.utils.logger.Log.printStackTrace(e1);
-								return;
-							}
-							
-							Collections.sort(colindices);
-							for (int i = colindices.size() - 1; i >= 0; i--) {
-								viewer.getTable().getColumns()[colindices.get(i) + 3].dispose();
-							}
-							compute(false);
+						} catch (Exception e2) {
+							// TODO Auto-generated catch block
+							e2.printStackTrace();
+							return;
 						}
 					}
 					StatusLine.setMessage(""); //$NON-NLS-1$
+					
 				}
 				
 				@Override
@@ -377,6 +367,7 @@
 								count++;
 							}
 						}
+						try {
 						
 						if (d.doMerge()) {
 							MergeLines.mergeLines(LexicalTableEditor.this, d.getMergeName(), rowindices);
@@ -386,6 +377,10 @@
 							compute(false);
 						}
 						lexicalTable.setAltered();
+						} catch(Exception ex) {
+							Log.warning(ex.getMessage());
+							Log.printStackTrace();
+						}
 					}
 				}
 				
Index: tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/statsengine/data/ILexicalTable.java
===================================================================
--- tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/statsengine/data/ILexicalTable.java	(revision 3140)
+++ tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/statsengine/data/ILexicalTable.java	(revision 3141)
@@ -89,42 +89,42 @@
 	 * @param col the col
 	 * @param checkEmptyLines the check empty lines
 	 */
-	public abstract void removeCol(int col, boolean checkEmptyLines);
+	public abstract void removeCol(int col, boolean checkEmptyLines) throws StatException;
 	
 	/**
 	 * Removes the cols.
 	 *
 	 * @param cols the cols
 	 */
-	public abstract void removeCols(List<Integer> cols);
+	public abstract void removeCols(List<Integer> cols) throws StatException;
 	
 	/**
 	 * Removes the cols.
 	 *
 	 * @param coltodelete the coltodelete
 	 */
-	public abstract void removeCols(int[] coltodelete);
+	public abstract void removeCols(int[] coltodelete) throws StatException;
 	
 	/**
 	 * Removes the row.
 	 *
 	 * @param row the row
 	 */
-	public abstract void removeRow(int row);
+	public abstract void removeRow(int row) throws StatException;
 	
 	/**
 	 * Removes the rows.
 	 *
 	 * @param row the row
 	 */
-	public abstract void removeRows(List<Integer> row);
+	public abstract void removeRows(List<Integer> row) throws StatException;
 	
 	/**
 	 * Removes the rows.
 	 *
 	 * @param selectionIndices the selection indices
 	 */
-	public abstract void removeRows(int[] selectionIndices);
+	public abstract void removeRows(int[] selectionIndices) throws StatException;
 	
 	/**
 	 * Sets the.
