diff --git a/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/jobs/CopyToCsvFileJob.java b/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/jobs/CopyToCsvFileJob.java
index 61d0ab8..296ed8b 100644
--- a/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/jobs/CopyToCsvFileJob.java
+++ b/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/jobs/CopyToCsvFileJob.java
@@ -46,10 +46,10 @@
          try {            
             int i;
             for (i = 0; i < elementColumns.size() - 1; i++) {
-               writer.append(elementColumns.get(i).getName());
+               writer.append(elementColumns.get(i).getVerboseName());
                writer.append(',');
             }
-            writer.append(elementColumns.get(i).getName());
+            writer.append(elementColumns.get(i).getVerboseName());
             writer.append('\n');
 
             for (RowUpdate update : updates) {
@@ -61,13 +61,13 @@
                for (i = 0; i < elementColumns.size() - 1; i++) {
                   Object o = update.getValue(elementColumns.get(i));
                   if (o != null) {
-                     writer.append(o.toString());
+                     writer.append('"').append(o.toString()).append('"');
                   }
                   writer.append(',');
                }
                Object o = update.getValue(elementColumns.get(i));
                if (o != null) {
-                  writer.append(o.toString());
+                  writer.append('"').append(o.toString()).append('"');
                }
                writer.append('\n');
                monitor.worked(1);
diff --git a/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/view/ElementContentProvider.java b/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/view/ElementContentProvider.java
index 1f29b9f..ed55a46 100644
--- a/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/view/ElementContentProvider.java
+++ b/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/view/ElementContentProvider.java
@@ -215,20 +215,20 @@
          streamWriteLock.lock();
          if (streamToFileWriter != null) {
             int i;
-            streamToFileWriter.append(Long.toString(timeColumn.getLong()));
-            streamToFileWriter.append(',');
-            streamToFileWriter.append(Long.toString(timeDeltaColumn.getLong()));
-            streamToFileWriter.append(',');
+//            streamToFileWriter.append(Long.toString(timeColumn.getLong()));
+//            streamToFileWriter.append(',');
+//            streamToFileWriter.append(Long.toString(timeDeltaColumn.getLong()));
+//            streamToFileWriter.append(',');
             for (i = 0; i < viewerColumns.size() - 1; i++) {
                Object o = update.getValue(viewerColumns.get(i));
                if (o != null) {
-                  streamToFileWriter.append(o.toString());
+                  streamToFileWriter.append('"').append(o.toString()).append('"');
                }
                streamToFileWriter.append(',');
             }
             Object o = update.getValue(viewerColumns.get(i));
             if (o != null) {
-               streamToFileWriter.append(o.toString());
+               streamToFileWriter.append('"').append(o.toString()).append('"');
             }
             streamToFileWriter.append('\n');
          }
@@ -477,16 +477,17 @@
 
          streamToFileWriter = new PrintWriter(new FileOutputStream(file));
          int i;
-         streamToFileWriter.write(timeColumn.getName());
-         streamToFileWriter.write(',');
-         streamToFileWriter.write(timeDeltaColumn.getName());
-         streamToFileWriter.write(',');
+//         streamToFileWriter.write(timeColumn.getName());
+//         streamToFileWriter.write(',');
+//         streamToFileWriter.write(timeDeltaColumn.getName());
+//         streamToFileWriter.write(',');
          for (i = 0; i < viewerColumns.size() - 1; i++) {
-            streamToFileWriter.write(viewerColumns.get(i).getName());
+            streamToFileWriter.write(viewerColumns.get(i).getVerboseName());
             streamToFileWriter.write(',');
          }
          if (viewerColumns.size() > 0) {
-            streamToFileWriter.write(viewerColumns.get(i).getName());
+        	
+            streamToFileWriter.write(viewerColumns.get(i).getVerboseName());
             streamToFileWriter.write('\n');
          }
 
diff --git a/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/view/ViewerColumnElement.java b/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/view/ViewerColumnElement.java
index 6de26c6..22baedd 100644
--- a/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/view/ViewerColumnElement.java
+++ b/org.eclipse.ote.ui.eviewer/src/org/eclipse/ote/ui/eviewer/view/ViewerColumnElement.java
@@ -76,8 +76,8 @@
    }
 
    @Override
-   public String getVerboseName() {
-      return columnElement.getVerboseName();
+   public String getVerboseName() {	   
+      return ColumnElement.getMessageName(columnElement.getMessageClassName()) + '.' + columnElement.getElementPath().toString();
    }
 
    public boolean isDuplicateName() {
diff --git a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageUpdateListener.java b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageUpdateListener.java
index 2366156..c9b4b57 100644
--- a/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageUpdateListener.java
+++ b/org.eclipse.ote.ui.message/src/org/eclipse/ote/ui/message/tree/MessageUpdateListener.java
@@ -67,22 +67,22 @@
    @Override
    public void subscriptionActivated(IMessageSubscription subscription) {
       node.clearUpdateCounter();
-	  update(node);
-      if (node.getRequestedValueMap() != null && subscription.getMessageMode() == MessageMode.WRITER) {
-  		for (Entry<ElementPath, String> entry : node.getRequestedValueMap().entrySet()) {
-			try {
-				subscription.setElementValueNoSend(entry.getKey().getElementPath(), entry.getValue());
-			} catch (Exception e) {
-				OseeLog.log(getClass(), Level.SEVERE, "Could not set element " + entry.getKey().asString(), e);
-			}
-		}
-		try {
-			subscription.send();
-		} catch (Exception e) {
-			OseeLog.log(getClass(), Level.SEVERE, "Could not send " + subscription.getMessageClassName(), e);
-		}
-		node.setRequestedValueMap(null);
+      update(node);
+      if (subscription.getMessageMode() == MessageMode.WRITER && node.getRequestedValueMap() != null && node.getRequestedValueMap().size() > 0) {
+         for (Entry<ElementPath, String> entry : node.getRequestedValueMap().entrySet()) {
+            try {
+               subscription.setElementValueNoSend(entry.getKey().getElementPath(), entry.getValue());
+            } catch (Exception e) {
+               OseeLog.log(getClass(), Level.SEVERE, "Could not set element " + entry.getKey().asString(), e);
+            }
+         }
+         try {
+            subscription.send();
+         } catch (Exception e) {
+            OseeLog.log(getClass(), Level.SEVERE, "Could not send " + subscription.getMessageClassName(), e);
+         }
       }
+      node.setRequestedValueMap(null);
    }
 
    @Override
