diff --git a/frontend/config/config.component.ts b/frontend/config/config.component.ts
index ee12741..c31acfd 100644
--- a/frontend/config/config.component.ts
+++ b/frontend/config/config.component.ts
@@ -35,7 +35,6 @@
                 } else {
                     activeSession.dataVisibility = 'root';
                 }
-                console.log(activeSession.data);
             }
             this.sessionsService.storeData();
             this.loading = false;
diff --git a/frontend/config/modifications.service.ts b/frontend/config/modifications.service.ts
index 7327ffa..e553df8 100644
--- a/frontend/config/modifications.service.ts
+++ b/frontend/config/modifications.service.ts
@@ -179,7 +179,20 @@
         }
     }
 
-    delete(activeSession, node) {
+    isDeleted(node, value = null): boolean {
+        if ('deleted' in node) {
+            if (typeof node['deleted'] === 'boolean') {
+                return node['deleted'];
+            } else if (value) {
+                if (node['deleted'].indexOf(value) != -1) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    delete(activeSession, node, value = null) {
         if ('new' in node) {
             /* removing newly created subtree */
             let parent = this.nodeParent(activeSession, node);
@@ -210,13 +223,21 @@
                 /* new record */
                 record['type'] = 'delete';
                 record['original'] = node;
-                node['deleted'] = true;
                 node['dirty'] = true;
             } else if (record['type'] == 'change') {
                 record['type'] = 'delete';
                 node['value'] = record['original'];
                 delete record['original'];
                 delete record['value'];
+            }
+            if (value) {
+                if (!('deleted' in node) || typeof node['deleted'] === 'boolean') {
+                    node['deleted'] = [];
+                }
+                node['deleted'].push(value);
+            } else if (node['info']['type'] == 8) {
+                node['deleted'] = node['value'].slice(0);
+            } else {
                 node['deleted'] = true;
             }
         }
@@ -282,6 +303,27 @@
         delete node['schemaChildren'];
     }
 
+    private list_nextpos(node, path: string): number {
+        let search;
+        if ('new' in node) {
+            search = node['children'];
+        } else {
+            search = node['newChildren'];
+        }
+        let pos = 1;
+        if (search.length) {
+            for (let sibling of search) {
+                if (sibling['path'].substr(0, path.length + 1) == path + '[') {
+                    let n = parseInt(sibling['path'].substring(path.length + 1));
+                    if (n >= pos) {
+                        pos = n + 1;
+                    }
+                }
+            }
+        }
+        return pos;
+    }
+
     create(activeSession, node, index) {
         //console.trace();
         let newNode = {};
@@ -324,26 +366,13 @@
             }
             this.setEdit(activeSession, newNode, true)
             break;
+        case 8: /* leaf-list */
+            newNode['path'] = newNode['path'] + '[' + this.list_nextpos(node, newNode['path']) + ']';
+            this.setEdit(activeSession, newNode, true)
+            console.log(newNode);
+            break;
         case 16: /* list */
-            let search;
-            if ('new' in node) {
-                search = node['children'];
-            } else {
-                search = node['newChildren'];
-            }
-            let pos = 1;
-            if (search.length) {
-                for (let sibling of search) {
-                    if (sibling['path'].substr(0, newNode['path'].length + 1) == newNode['path'] + '[') {
-                        let n = parseInt(sibling['path'].substring(newNode['path'].length + 1));
-                        if (n >= pos) {
-                            pos = n + 1;
-                        }
-                    }
-                }
-            }
-            newNode['path'] = newNode['path'] + '[' + pos + ']';
-
+            newNode['path'] = newNode['path'] + '[' + this.list_nextpos(node, newNode['path']) + ']';
             newNode['children'] = [];
             /* open creation dialog for nodes inside the created list */
             this.sessionsService.childrenSchemas(activeSession.key, newNode['info']['path'], newNode).then(result => {
@@ -405,8 +434,8 @@
             delete node['creatingChild'];
         }
         if ('deleted' in node) {
-            node['dirty'] = false;
-            node['deleted'] = false;
+            delete node['dirty'];
+            delete node['deleted'];
         }
 
         if ('new' in node) {
@@ -516,9 +545,10 @@
                 return 'invalid number (' + count + ') of keys in ' + node['path'];
             }
         }
+
+        /* recursion */
         if (node['info']['type'] == 16 || node['info']['type'] == 1) {
             for (let i in node['children']) {;
-                console.log(node['children'][i]);
                 if (node['children'][i]['info']['type'] == 4) {
                     /* leaf */
                     if (!('value' in node['children'][i])) {
@@ -528,6 +558,12 @@
                         console.log('not confirmed node ' + node['children'][i]['path'] + ', removing it');
                         node['children'].splice(i, 1);
                     }
+                } else if (node['children'][i]['info']['type'] == 8) {
+                    /* leaf-list */
+                    if (!('value' in node['children'][i])) {
+                        console.log('not confirmed node ' + node['children'][i]['path'] + ', removing it');
+                        node['children'].splice(i, 1);
+                    }
                 } else {
                     /* recursion */
                     let msg = this.resolveKeys(node['children'][i], false);
@@ -544,6 +580,8 @@
             for (let i in node['info']['keys']) {
                 node['path'] = node['path'] + '[' + node['info']['keys'][i] + '=\'' + node['children'][i]['value'] + '\']'
             }
+        } else if (node['info']['type'] == 8 && top) {
+            node['path'] = node['path'].slice(0, node['path'].lastIndexOf('[') + 1) + '.=\'' + node['value'][0] + '\']'
         }
         return null;
     }
@@ -553,6 +591,12 @@
             //console.log(JSON.stringify(mod));
             if (!('data' in activeSession.modifications[mod])) {
                 continue;
+            } else if (activeSession.modifications[mod]['data']['info']['type'] == 4 || activeSession.modifications[mod]['data']['info']['type'] == 8) {
+                /* remove not confirmed leaf/leaf-lists */
+                if (!('value' in activeSession.modifications[mod]['data'])) {
+                    console.log('not confirmed node ' + activeSession.modifications[mod]['data']['path'] + ', removing it');
+                    this.removeModificationsRecord(activeSession, mod);
+                }
             }
             let err = this.resolveKeys(activeSession.modifications[mod]['data']);
             if (err) {
diff --git a/frontend/config/tree-create.html b/frontend/config/tree-create.html
index 26a6ef3..a0ed34d 100644
--- a/frontend/config/tree-create.html
+++ b/frontend/config/tree-create.html
@@ -3,7 +3,7 @@
     class="node_edit" [class.dialog]="node['schemaChildren']" 
     treeScrollTo [node]="node">
     <ng-container *ngIf="node['schemaChildren'].length; else nothingToCreate">
-        <tree-indent [node]="node" [indentation]="indentation" [type]="'edit'"></tree-indent>
+        <tree-indent [node]="node" [indentation]="indentation" [type]="'create'"></tree-indent>
         <select (change)="creatingDialogSelect(node, $event.target.value, $event.currentTarget)">
             <option disabled selected value="-1" style="display: none">&nbsp;</option>
             <ng-container *ngFor="let schema of node['schemaChildren']; let i='index'">
diff --git a/frontend/config/tree-indent.html b/frontend/config/tree-indent.html
index 2d3fd82..0c0978d 100644
--- a/frontend/config/tree-indent.html
+++ b/frontend/config/tree-indent.html
@@ -1,61 +1,76 @@
-<ng-container *ngIf="type == 'edit' || node['new'] || node['deleted']; else menu">
-    <img *ngIf="type == 'edit' && node['info']['type'] != 4" class="icon_action" src="assets/netopeer/icons/close.svg" 
-        onmouseover="this.src='assets/netopeer/icons/close_active.svg'"
-        onmouseout="this.src='assets/netopeer/icons/close.svg'"
-        (click)="closeCreatingDialog(node)"/>
-    <img *ngIf="node['info']['type'] == 4 && (type == 'edit' || node['info']['key'])" class="icon_action" src="assets/netopeer/icons/tree_empty.svg"/>
-    <img *ngIf="type != 'edit' && node['dirty'] && !node['info']['key']" class="icon_action" src="assets/netopeer/icons/close.svg"
-        onmouseover="this.src='assets/netopeer/icons/close_active.svg'"
-        onmouseout="this.src='assets/netopeer/icons/close.svg'"
-        (click)="cancelModification(node)"/>
+<ng-container *ngIf="(getType() != 'root' && !node['info']['config']) || getType() == 'edit'; else nonempty">
+    <img class="icon" src="assets/netopeer/icons/tree_empty.svg"/>
 </ng-container>
-<ng-template #menu >
-    <span *ngIf="type == 'root' || node['info']['config']; else empty"
-        (mouseenter)="showEditMenu($event)" 
-        (mouseleave)="hideEditMenu($event.currentTarget.lastElementChild)">
-        <img  class="icon_action" src="assets/netopeer/icons/menu.svg" 
-            onmouseover="this.src='assets/netopeer/icons/menu_active.svg'"
-            onmouseout="this.src='assets/netopeer/icons/menu.svg'"/>
-        <div class="editmenu msg-rounded">
-            <div *ngIf="type != 'root' && !node['info']['key']" class="button_action" title="remove subtree {{node['path']}}"
-                onmouseover="this.firstElementChild.src='assets/netopeer/icons/close_active.svg'"
-                onmouseout="this.firstElementChild.src='assets/netopeer/icons/close.svg'"
-                (click)="deleteSubtree(node);hideEditMenu($event.currentTarget.parentElement);">
-                <img class="icon_action" src="assets/netopeer/icons/close.svg" />
-                delete
+<ng-template #nonempty>
+    <ng-container *ngIf="getType() == 'create'">
+        <img class="icon_action" src="assets/netopeer/icons/close.svg" title="stop creating nodes here"
+            onmouseover="this.src='assets/netopeer/icons/close_active.svg'"
+            onmouseout="this.src='assets/netopeer/icons/close.svg'"
+            (click)="closeCreatingDialog(node)"/>
+    </ng-container>
+    <ng-container *ngIf="getType() == 'new' || getType() == 'deleted'">
+        <img class="icon_action" src="assets/netopeer/icons/close.svg" title="cancel modification"
+            onmouseover="this.src='assets/netopeer/icons/close_active.svg'"
+            onmouseout="this.src='assets/netopeer/icons/close.svg'"
+            (click)="cancelModification(node)"/>
+    </ng-container>
+    <ng-container *ngIf="getType() == 'value'">
+        <ng-container [ngSwitch]="modsService.isDeleted(node, value)">
+            <img *ngSwitchCase="false" title="delete value"
+                class="icon_action" src="assets/netopeer/icons/close.svg"
+                onmouseover="this.src='assets/netopeer/icons/close_active.svg'"
+                onmouseout="this.src='assets/netopeer/icons/close.svg'"
+                (click)="deleteSubtree(node, value)"/>
+            <img *ngSwitchCase="true" title="cancel modification"
+                class="icon_action" src="assets/netopeer/icons/close.svg"
+                onmouseover="this.src='assets/netopeer/icons/close_active.svg'"
+                onmouseout="this.src='assets/netopeer/icons/close.svg'"
+                (click)="cancelModification(node, value)"/>
+        </ng-container>
+    </ng-container>
+    <ng-container *ngIf="getType() == 'current' || getType() == 'root'">
+        <span (mouseenter)="showEditMenu($event)" (mouseleave)="hideEditMenu($event.currentTarget.lastElementChild)">
+            <img  class="icon_action" src="assets/netopeer/icons/menu.svg"
+                onmouseover="this.src='assets/netopeer/icons/menu_active.svg'"
+                onmouseout="this.src='assets/netopeer/icons/menu.svg'"/>
+            <div class="editmenu msg-rounded">
+                <div *ngIf="getType() != 'root' && !node['info']['key']" class="button_action" title="remove subtree {{node['path']}}"
+                    onmouseover="this.firstElementChild.src='assets/netopeer/icons/close_active.svg'"
+                    onmouseout="this.firstElementChild.src='assets/netopeer/icons/close.svg'"
+                    (click)="deleteSubtree(node);hideEditMenu($event.currentTarget.parentElement);">
+                    <img class="icon_action" src="assets/netopeer/icons/close.svg" />
+                    delete
+                </div>
+                <div *ngIf="getType() != 'root'" class="button_action" title="create sibling data node(s)"
+                    onmouseover="this.firstElementChild.src='assets/netopeer/icons/add_active.svg'"
+                    onmouseout="this.firstElementChild.src='assets/netopeer/icons/add.svg'"
+                    (click)="openCreatingDialog($event.currentTarget, node, true);hideEditMenu($event.currentTarget.parentElement);">
+                    <img class="icon_action" src="assets/netopeer/icons/add.svg" />
+                    create sibling
+                </div>
+                <div *ngIf="getType() == 'root' || (node['info']['type'] != 4 && node['info']['type'] != 8)"
+                    class="button_action" title="create children data node(s)"
+                    onmouseover="this.firstElementChild.src='assets/netopeer/icons/add_active.svg'"
+                    onmouseout="this.firstElementChild.src='assets/netopeer/icons/add.svg'"
+                    (click)="openCreatingDialog($event.currentTarget, node, flase);hideEditMenu($event.currentTarget.parentElement);">
+                    <img class="icon_action" src="assets/netopeer/icons/add.svg" />
+                    create children
+                </div>
             </div>
-            <div *ngIf="type != 'root'" class="button_action" title="create sibling data node(s)"
-                onmouseover="this.firstElementChild.src='assets/netopeer/icons/add_active.svg'"
-                onmouseout="this.firstElementChild.src='assets/netopeer/icons/add.svg'"
-                (click)="openCreatingDialog($event.currentTarget, node, true);hideEditMenu($event.currentTarget.parentElement);">
-                <img class="icon_action" src="assets/netopeer/icons/add.svg" />
-                create sibling
-            </div>
-            <div *ngIf="type == 'root' || (node['info']['type'] != 4 && node['info']['type'] != 8)"
-                class="button_action" title="create children data node(s)"
-                onmouseover="this.firstElementChild.src='assets/netopeer/icons/add_active.svg'"
-                onmouseout="this.firstElementChild.src='assets/netopeer/icons/add.svg'"
-                (click)="openCreatingDialog($event.currentTarget, node, flase);hideEditMenu($event.currentTarget.parentElement);">
-                <img class="icon_action" src="assets/netopeer/icons/add.svg" />
-                create children
-            </div>
-        </div>
-    </span>
-    <ng-template #empty>
-        <img class="icon" src="assets/netopeer/icons/tree_empty.svg" />
-    </ng-template>
+        </span>
+    </ng-container>
 </ng-template>
 <ng-container *ngFor="let indent of indentation">
     <img *ngIf="!indent" class="indentation" src="assets/netopeer/icons/tree_cont.svg" />
     <img *ngIf="indent" class="indentation" src="assets/netopeer/icons/tree_empty.svg" />
 </ng-container>
-<ng-container *ngIf="type != 'edit' || node['info']['type'] != 4">
-    <ng-container *ngIf="type == 'value'; else nodes">
-        <img class="indentation" src="assets/netopeer/icons/tree_empty.svg" />
+<ng-container [ngSwitch]="getType()">
+    <img *ngSwitchCase="'value'" class="indentation" src="assets/netopeer/icons/tree_empty.svg" />
+    <img *ngSwitchCase="'root'" class="indentation" src="assets/netopeer/icons/tree_root.svg" />
+    <img *ngSwitchCase="'edit'" class="indentation" src="assets/netopeer/icons/tree_empty.svg" />
+    <img *ngSwitchCase="'create'" class="indentation" src="assets/netopeer/icons/tree_last_branch.svg" />
+    <ng-container *ngSwitchDefault>
+        <img *ngIf="node['last']" class="indentation" src="assets/netopeer/icons/tree_last_branch.svg" />
+        <img *ngIf="!node['last']" class="indentation" src="assets/netopeer/icons/tree_branch.svg" />
     </ng-container>
-    <ng-template #nodes>
-        <img *ngIf="type == 'edit' || node['last']" class="indentation" src="assets/netopeer/icons/tree_last_branch.svg" />
-        <img *ngIf="type == 'current' && !node['last']" class="indentation" src="assets/netopeer/icons/tree_branch.svg" />
-        <img *ngIf="type == 'root'" class="indentation" src="assets/netopeer/icons/tree_root.svg" />
-    </ng-template>
-</ng-container>
\ No newline at end of file
+</ng-container>
diff --git a/frontend/config/tree.component.html b/frontend/config/tree.component.html
index b8d0fea..ce7faee 100644
--- a/frontend/config/tree.component.html
+++ b/frontend/config/tree.component.html
@@ -26,7 +26,7 @@
 <div class="subtree" *ngIf="node['path'] != '/' && (node['info']['config'] || activeSession.statusVisibility)"
     [class.status]="!node['info']['config']">
 
-    <div class="node" [class.dirty]="node['dirty']" [class.deleted]="node['deleted']"
+    <div class="node" [class.dirty]="node['dirty']" [class.deleted]="modsService.isDeleted(node)"
             [class.yang-container]="node['info']['type'] == 1"
             [class.yang-leaf]="node['info']['type'] == 4"
             [class.yang-leaflist]="node['info']['type'] == 8"
@@ -38,7 +38,7 @@
 
 		<!-- BEGIN nodetype-specific code -->
 		<!-- leaf -->
-		<ng-container *ngIf="node['info']['type'] == 4">
+		<ng-container *ngIf="node['info']['type'] == 4 || (node['new'] && node['info']['type'] == 8)">
 			<ng-container *ngIf="node['info']['key']">
 				<img class="icon" src="assets/netopeer/icons/key.svg" alt="key" title="list key"/>
 			</ng-container>
@@ -83,19 +83,24 @@
 				<span *ngIf="node['info']['datatype'] != node['info']['datatypebase']">({{node['info']['datatypebase']}})</span>
 			</div>
 		</ng-container>
+        <ng-container *ngIf="node['info']['type'] == 8">
+            <div class="value">{{node['info']['datatype']}}
+                <span *ngIf="node['info']['datatype'] != node['info']['datatypebase']">({{node['info']['datatypebase']}})</span>
+            </div>
+        </ng-container>
 		<!-- END nodetype-specific code -->
 
 		<div class="module_name">{{node['info']['module']}}</div>
 	</div>
 
 	<!-- BEGIN nodetype-specific code -->
-	<!-- leaf's edit value -->
-	<ng-container *ngIf="node['info']['type'] == 4">
+	<!-- leaf/leaf-list's edit value -->
+	<ng-container *ngIf="node['info']['type'] == 4 || node['info']['type'] == 8">
 		<div class="node_edit" [class.dirty]="node['dirty']" *ngIf="node['edit']">
             <tree-indent [node]="node" [indentation]="inheritIndentation(node)" [type]="'edit'"></tree-indent>
 			<img *ngIf="node['edit'] " class="icon_action" src="assets/netopeer/icons/close.svg"
 				alt="cancel" title="cancel editing" tabindex=0
-				(click)="node['edit']=false" (keyup.enter)="node['edit']=false"
+				(click)="changeValueCancel(node)" (keyup.enter)="changeValueCancel(node)"
 				onmouseover="this.src='assets/netopeer/icons/close_active.svg'"
 				onmouseout="this.src='assets/netopeer/icons/close.svg'" />
 			<img *ngIf="node['edit']" class="icon_action icon_hidden" src="assets/netopeer/icons/confirm.svg"
@@ -112,21 +117,22 @@
                 </ng-container>
             </select>
             <input *ngIf="!node['info']['values']"
-                id="{{node['path']}}_input" type="text" class="value" value="{{node['value']}}" tabindex=0
+                id="{{node['path']}}_input" type="text" class="value" value="{{nodeValue(node)}}" tabindex=0
                 (keyup)="checkValue(node, $event.target)" (change)="checkValue(node, $event.target)"
                 (keyup.enter)="changeValue(node, $event.target)" (keyup.escape)="changeValueCancel(node)"
                 checkLeafValue [node]="node" (onCheckValue)="checkValue($event.node, $event.element)"/>
 		</div>
 	</ng-container>
 
-	<!-- leaflist's values -->
-	<ng-container *ngIf="node['info']['type'] == 8">
-		<div class="node yang-leaflist" *ngFor="let value of node['value']">
-            <tree-indent [node]="node" [indentation]="inheritIndentation(node)" [type]="'value'" ></tree-indent>
-			<div class="value_standalone">{{value}}</div>
-		</div>
-	</ng-container>
-	<!-- END nodetype-specific code -->
+    <!-- leaflist's values -->
+    <ng-container *ngIf="node['info']['type'] == 8 && !node['edit'] && !modsService.isDeleted(node)">
+        <div *ngFor="let value of node['value']"
+            class="node yang-leaflist" [class.dirty]="node['dirty']" [class.deleted]="modsService.isDeleted(node, value)">
+            <tree-indent [node]="node" [indentation]="inheritIndentation(node)" [type]="'value'" [value]="value"></tree-indent>
+            <div class="value_standalone">{{value}}</div>
+        </div>
+    </ng-container>
+    <!-- END nodetype-specific code -->
 
 	<!-- recursion - show children -->
     <div class="loading" *ngIf="node['loading']">
diff --git a/frontend/config/tree.component.ts b/frontend/config/tree.component.ts
index ef04a3b..23c2c30 100644
--- a/frontend/config/tree.component.ts
+++ b/frontend/config/tree.component.ts
@@ -77,10 +77,11 @@
 })
 export class TreeIndent implements OnInit {
     @Input() node;
+    @Input() value;
     @Input() indentation;
-    @Input() type = "current";
+    @Input() type;
     activeSession: Session;
-    timeout;
+    private timeout;
 
     constructor(private modsService: ModificationsService, private sessionsService: SessionsService) {}
 
@@ -88,6 +89,20 @@
         this.activeSession = this.sessionsService.getActiveSession();
     }
 
+    getType():string {
+        if (this.type) {
+            return this.type;
+        } else {
+            if (this.node && ('new' in this.node)) {
+                return "new";
+            } else if (this.node && ('deleted' in this.node)) {
+                return "deleted";
+            } else {
+                return "current";
+            }
+        }
+    }
+
     showEditMenu(event) {
         this.timeout = setTimeout(() => {
             let menu = event.target.lastElementChild;
@@ -102,11 +117,29 @@
         menu.style.visibility = "hidden";
     }
 
-    deleteSubtree(node) {
-        this.modsService.delete(this.activeSession, node);
+    deleteSubtree(node, value = null) {
+        this.modsService.delete(this.activeSession, node, value);
         this.sessionsService.storeData();
     }
 
+    /* 0 - not deleted, 1 - deleted value, 2 - deleted all values */
+    isDeleted(): number {
+        if ('deleted' in this.node) {
+            if (typeof this.node['deleted'] === 'boolean') {
+                if (this.node['deleted']) {
+                    return 2;
+                } else {
+                    return 0;
+                }
+            } else if (this.value) {
+                if (this.node['deleted'].indexOf(this.value) != -1) {
+                    return 1;
+                }
+            }
+        }
+        return 0;
+    }
+
     openCreatingDialog(element, node, parent = false) {
         if (parent) {
             node = this.modsService.nodeParent(this.activeSession, node);
@@ -125,8 +158,13 @@
         this.modsService.createClose(node, reason);
     }
 
-    cancelModification(node) {
-        this.modsService.cancelModification(this.activeSession, node, false);
+    cancelModification(node, value = null) {
+        if (value && node['deleted'].length > 1) {
+            let i = node['deleted'].indexOf(value);
+            node['deleted'].splice(i, 1);
+        } else {
+            this.modsService.cancelModification(this.activeSession, node, false);
+        }
         this.sessionsService.storeData();
     }
 }
@@ -218,7 +256,10 @@
     changeValueCancel(node) {
         if ('value' in node) {
             this.modsService.setEdit(this.activeSession, node, false);
+        } else {
+            this.modsService.cancelModification(this.activeSession, node, false);
         }
+        this.sessionsService.storeData();
     }
 
     changeValue(node, target) {
@@ -232,10 +273,25 @@
             input = target.nextElementSibling;
         }
 
-        this.modsService.change(this.activeSession, node, input.value);
+        if (node['info']['type'] == 8) {
+            this.modsService.change(this.activeSession, node, [input.value]);
+        } else {
+            this.modsService.change(this.activeSession, node, input.value);
+        }
         this.sessionsService.storeData();
     }
 
+    nodeValue(node, index:number = 0): string {
+        if ('value' in node) {
+            if (node['info']['type'] == 4) {
+                return node['value'];
+            } else if (node['info']['type'] == 8 && node['value'].length > index) {
+                return node['value'][index];
+            }
+        }
+        return null;
+    }
+
     newChildrenToShow(node) {
         if ('newChildren' in node) {
             return node['newChildren'];
