diff --git a/tree_model.py b/tree_model.py
index 54fbb71..12e3474 100644
--- a/tree_model.py
+++ b/tree_model.py
@@ -1,6 +1,6 @@
-from PyQt5.QtCore import QAbstractItemModel, QModelIndex, Qt
+from PyQt5.QtCore import QAbstractItemModel, QModelIndex, Qt, QSize
 from PyQt5.QtGui import QIcon
-from PyQt5.QtWidgets import QTreeWidgetItem
+from PyQt5.QtWidgets import QTreeView, QTreeWidgetItem, QAbstractItemView, QHeaderView
 from enum import Enum
 
 from file_handler import ItemDescriptor, NodeType
@@ -124,6 +124,7 @@ class MetadataTreeItem(NixTreeItem):
 class BlockTreeItem(NixTreeItem):
     def __init__(self, node_descriptor, file_handler, parent=None):
         super().__init__(node_descriptor, file_handler, parent=parent)
+        self.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable |Qt.ItemIsEditable)
         self._is_loaded = False
     
     def load_children(self):
@@ -144,6 +145,7 @@ class BlockTreeItem(NixTreeItem):
             self._child_items.append(SourceTreeItem(s, self._file_handler, parent=self))
         self._is_loaded = True
 
+
 class SourceTreeItem(NixTreeItem):
     def __init__(self, node_descriptor, file_handler, parent):
         super().__init__(node_descriptor, file_handler, parent=parent)
@@ -155,6 +157,7 @@ class SourceTreeItem(NixTreeItem):
             self._child_items.append(SourceTreeItem(s, self._file_handler, parent=self))
         self._is_loaded = True
         
+
 class GroupTreeItem(NixTreeItem):
     def __init__(self, node_descriptor, file_handler, parent):
         super().__init__(node_descriptor, file_handler, parent=parent)
@@ -178,16 +181,19 @@ class GroupTreeItem(NixTreeItem):
             self._child_items.append(SourceTreeItem(s, self._file_handler, parent=self))
         self._is_loaded = True
 
+
 class DataFrameTreeItem(NixTreeItem):
     def __init__(self, node_descriptor, file_handler, parent=None):
         super().__init__(node_descriptor, file_handler, parent=parent)
         self._is_loaded = True
 
+
 class FeatureTreeItem(NixTreeItem):
     def __init__(self, node_descriptor, file_handler, parent=None):
         super().__init__(node_descriptor, file_handler, parent=parent)
         self._is_loaded = True
 
+
 class DataArrayTreeItem(NixTreeItem):
     def __init__(self, node_descriptor, file_handler, parent=None):
         super().__init__(node_descriptor, file_handler, parent=parent)
@@ -200,14 +206,18 @@ class DataArrayTreeItem(NixTreeItem):
             self._child_items.append(DimensionTreeItem(d, self._file_handler, parent=self))
         self._is_loaded = True
 
+
 class DimensionTreeItem(NixTreeItem):
     def __init__(self, node_descriptor, file_handler, parent=None):
         super().__init__(node_descriptor, file_handler, parent=parent)
         self._is_loaded = True
 
+
 class SectionTreeItem(NixTreeItem):
     def __init__(self, node_descriptor, file_handler, parent=None):
         super().__init__(node_descriptor, file_handler=file_handler, parent=parent)
+        self.setFlags(Qt.ItemIsSelectable)
+
         self._is_loaded = False
         
     def load_children(self):
@@ -219,6 +229,7 @@ class SectionTreeItem(NixTreeItem):
             self._child_items.append(PropertyTreeItem(p, self._file_handler, parent=self))
         self._is_loaded = True
 
+
 class PropertyTreeItem(NixTreeItem):
     def __init__(self, node_descriptor, file_handler, parent=None):
         super().__init__(node_descriptor, file_handler, parent=parent)
@@ -227,6 +238,7 @@ class PropertyTreeItem(NixTreeItem):
     def childCount(self):
         return 0
 
+
 class TagTreeItem(NixTreeItem):
     def __init__(self, node_descriptor, file_handler, parent=None):
         super().__init__(node_descriptor, file_handler, parent=parent)
@@ -243,6 +255,7 @@ class TagTreeItem(NixTreeItem):
             self._child_items.append(FeatureTreeItem(f, self._file_handler, self))
         self._is_loaded = True
         
+
 class TreeModel(QAbstractItemModel):
     
     def __init__(self, file_handler, tree_type=TreeType.Full, parent=None, root_section_id=None):
@@ -345,3 +358,28 @@ class TreeModel(QAbstractItemModel):
             parentItem = parent_index.internalPointer()
 
         return parentItem.childCount()
+
+
+class NixTreeView(QTreeView):
+    icon_size = QSize(30, 30)
+
+    def __init__(self, parent=None) -> None:
+        super().__init__(parent=parent)
+        self.expanded.connect(self.columnResize)
+        self.collapsed.connect(self.columnResize)
+        self.setAlternatingRowColors(True)
+        self.setUniformRowHeights(True)  # Allows for scrolling optimizations.
+        self.setWindowTitle("Data Tree")
+        self.setIconSize(self.icon_size)
+        self.setSelectionBehavior(QAbstractItemView.SelectItems)
+        self.setSelectionMode(QAbstractItemView.SingleSelection)
+
+        header = self.header()
+        header.setStretchLastSection(False)
+        header.setSectionResizeMode(1, QHeaderView.ResizeToContents)
+        header.setSectionResizeMode(2, QHeaderView.ResizeToContents)
+        header.setSectionResizeMode(0, QHeaderView.Stretch)
+        
+    def columnResize(self, index):
+        for i in range(len(column_names)):
+            self.resizeColumnToContents(i)
\ No newline at end of file