diff --git a/src/components/entry-page/entry-page.js b/src/components/entry-page/entry-page.js
index 125f71c507184e8dd51e47c9d32ec53711116f7e..6df2868e199d0a04cc00df21324da516afeaea61 100644
--- a/src/components/entry-page/entry-page.js
+++ b/src/components/entry-page/entry-page.js
@@ -3,7 +3,6 @@ import React from 'react';
 import NrpHeader from '../nrp-header/nrp-header.js';
 
 import './entry-page.css';
-import PlaceholderImage from '../../assets/images/Artificial_Intelligence_2.jpg';
 import NrpCoreDashboard from '../nrp-core-dashboard/nrp-core-dashboard.js';
 import TransceiverFunctionEditor from '../tf-editor/tf-editor';
 
diff --git a/src/components/nrp-core-dashboard/nrp-core-dashboard.js b/src/components/nrp-core-dashboard/nrp-core-dashboard.js
index 29b2a058cd12fdbed2314c573cb74349390d02ff..0d9a32263d57159c21551dbac63416bf72d90f55 100644
--- a/src/components/nrp-core-dashboard/nrp-core-dashboard.js
+++ b/src/components/nrp-core-dashboard/nrp-core-dashboard.js
@@ -20,14 +20,6 @@ export default class NrpCoreDashboard extends React.Component {
         console.error(err);
       }
     });
-    // As a test to make sure MqttClientService can subscribe to multiple topics (and the same topic) at once
-    let token1 = MqttClientService.instance.subscribeToTopic('test_topic', (param1) => (console.info(param1)));
-    let token2 = MqttClientService.instance.subscribeToTopic('test_topic', (param1) => (console.info(param1)));
-    let token3 = MqttClientService.instance.subscribeToTopic('test_topic', (param1) => (console.info(param1)));
-    let token4 = MqttClientService.instance.subscribeToTopic('test_topic_proto', (param1) => (console.info(param1)));
-
-    // Test unsubscribe
-    MqttClientService.instance.unsubscribe(token3);
   }
 
   render() {
diff --git a/src/components/tf-editor/tf-editor.css b/src/components/tf-editor/tf-editor.css
new file mode 100644
index 0000000000000000000000000000000000000000..0d13c323ba978db2a60317c45ac168090abd6a88
--- /dev/null
+++ b/src/components/tf-editor/tf-editor.css
@@ -0,0 +1,44 @@
+.tf-editor-container {
+  margin: 10px;
+}
+
+.tf-editor-header {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+}
+
+.tf-editor-icon {
+  width: 40px;
+  height: 40px;
+  background-color: yellow;
+  text-align: center;
+  border: 1px solid black;
+  margin: 5px;
+  font-size: 1.5em;
+}
+
+.tf-editor-file-ui {
+  padding: 10px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+}
+
+.tf-editor-file-ui-item {
+  margin: 5px;
+}
+
+.tf-editor-ui-save {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+}
+
+.tf-editor-text-saved {
+  color: green;
+}
+
+.tf-editor-text-unsaved {
+  color: orange;
+}
\ No newline at end of file
diff --git a/src/components/tf-editor/tf-editor.js b/src/components/tf-editor/tf-editor.js
index 49b79999ef16aaf0a4c6fe5c1392b044fe1f7b0f..3c8aec8c7979a92697a198a7b950bce8975dcefd 100644
--- a/src/components/tf-editor/tf-editor.js
+++ b/src/components/tf-editor/tf-editor.js
@@ -5,6 +5,8 @@ import { Modal, Button } from 'react-bootstrap';
 import ExperimentStorageService from '../../services/experiments/files/experiment-storage-service';
 
 
+import './tf-editor.css';
+
 export default class TransceiverFunctionEditor extends React.Component {
 
   constructor(props) {
@@ -14,6 +16,7 @@ export default class TransceiverFunctionEditor extends React.Component {
     this.state = {
       selectedFilename: this.testListTfFiles[0],
       code: '',
+      textChanges: '',
       showDialogUnsavedChanges: false
     };
   }
@@ -58,6 +61,9 @@ export default class TransceiverFunctionEditor extends React.Component {
     this.setState({code: change});
     this.hasUnsavedChanges = !this.fileLoading;
     this.fileLoading = false;
+    if (this.hasUnsavedChanges) {
+      this.setState({textChanges: 'unsaved changes'});
+    }
     console.info(['this.hasUnsavedChanges', this.hasUnsavedChanges]);
   }
 
@@ -67,6 +73,10 @@ export default class TransceiverFunctionEditor extends React.Component {
       this.props.experimentId, this.state.selectedFilename, this.state.code);
     if (response.ok) {
       this.hasUnsavedChanges = false;
+      this.setState({textChanges: 'saved'});
+      setTimeout(() => {
+        this.setState({textChanges: ''});
+      }, 3000);
       return true;
     }
     else {
@@ -78,16 +88,29 @@ export default class TransceiverFunctionEditor extends React.Component {
 
   render() {
     return (
-      <div>
-        <select
-          name="selectTFFile"
-          value={this.state.selectedFilename}
-          onChange={(event) => this.onChangeSelectedFile(event)}>
-          {this.testListTfFiles.map(file => {
-            return (<option key={file} value={file}>{file}</option>);
-          })}
-        </select>
-        <button onClick={() => this.saveTF()}>Save</button>
+      <div className='tf-editor-container'>
+        <div className='tf-editor-header'>
+          <div className='tf-editor-icon'>TF</div>
+          <div className='tf-editor-file-ui'>
+            <select
+              className='tf-editor-file-ui-item'
+              name="selectTFFile"
+              value={this.state.selectedFilename}
+              onChange={(event) => this.onChangeSelectedFile(event)}>
+              {this.testListTfFiles.map(file => {
+                return (<option key={file} value={file}>{file}</option>);
+              })}
+            </select>
+            <button className='tf-editor-file-ui-item' onClick={() => this.saveTF()}>Save</button>
+            <div className={this.hasUnsavedChanges ?
+              'tf-editor-text-unsaved' : 'tf-editor-text-saved'}>
+              {this.state.textChanges}
+            </div>
+            {/*<div className='tf-editor-ui-save'>
+            </div>*/}
+          </div>
+        </div>
+
         <CodeMirror
           value={this.state.code}
           maxHeight="100%"