diff --git a/src/editor/components/sidepanel.tsx b/src/editor/components/sidepanel.tsx
index cb7f5b51c55e48cd0ad4b2003ea69594c370dfd6..9c45184429abb5f97d7607f7af0ef7431c83cb70 100644
--- a/src/editor/components/sidepanel.tsx
+++ b/src/editor/components/sidepanel.tsx
@@ -10,6 +10,7 @@ import Instructions from "./instructions";
 import { Node } from "../../common/graph/node";
 import { NodeType, NodeTypeData } from "../../common/graph/nodetype";
 import { EditorSettings, NodeDataChangeRequest } from "../editor";
+import TabHeader from "./tabheader";
 
 interface SidepanelProps {
     graph: DynamicGraph;
@@ -62,26 +63,38 @@ function Sidepanel({
                 <button onClick={onSave}>Save</button>
             </div>
             <hr />
-            <NodeDetails
-                selectedNodes={selectedNodes}
-                idToObjectType={graph.idToObjectGroup}
-                onNodeDataChange={onNodeDataChange}
-                createCheckpoint={createCheckpoint}
-            />
-            <hr />
-            <NodeTypesEditor
-                nodeTypes={graph.objectGroups}
-                onNodeTypeSelect={onNodeTypeSelect}
-                onNodeTypeCreation={onNodeTypeCreation}
-                onNodeTypeDelete={onNodeTypeDelete}
-                onNodeTypeDataChange={onNodeTypeDataChange}
-                createCheckpoint={createCheckpoint}
-            />
-            <hr />
-            <Settings settings={settings} onSettingsChange={onSettingsChange} />
-            <hr />
+            <TabHeader tabs={["Edit", "Types", "Help"]}>
+                {/* Edit-Tab */}
+                <NodeDetails
+                    selectedNodes={selectedNodes}
+                    idToObjectType={graph.idToObjectGroup}
+                    onNodeDataChange={onNodeDataChange}
+                    createCheckpoint={createCheckpoint}
+                />
+
+                {/* Types-Tab */}
+                <NodeTypesEditor
+                    nodeTypes={graph.objectGroups}
+                    onNodeTypeSelect={onNodeTypeSelect}
+                    onNodeTypeCreation={onNodeTypeCreation}
+                    onNodeTypeDelete={onNodeTypeDelete}
+                    onNodeTypeDataChange={onNodeTypeDataChange}
+                    createCheckpoint={createCheckpoint}
+                />
+
+                {/* Help-Tab */}
+                <div>
+                    <Settings
+                        settings={settings}
+                        onSettingsChange={onSettingsChange}
+                    />
+                    <hr />
 
-            <Instructions connectOnDragEnabled={settings.connectOnDrag} />
+                    <Instructions
+                        connectOnDragEnabled={settings.connectOnDrag}
+                    />
+                </div>
+            </TabHeader>
         </div>
     );
 }
diff --git a/src/editor/components/tabheader.css b/src/editor/components/tabheader.css
new file mode 100644
index 0000000000000000000000000000000000000000..49a2aee3adc6d1ce0d276e4e6580838c25e92911
--- /dev/null
+++ b/src/editor/components/tabheader.css
@@ -0,0 +1,30 @@
+div#ks-editor .tab-header {
+    display: flex;
+    margin-top: 0.2em;
+    margin-bottom: 0.5em;
+}
+
+div#ks-editor .tab-button {
+    display: block;
+
+    font-size: medium;
+    padding: 0.2em 0.5em;
+
+    border-bottom: 1px solid gray;
+    margin-bottom: 1px;
+
+    margin-right: 0.2em;
+
+    cursor: default;
+}
+
+div#ks-editor .tab-button:hover {
+    margin-bottom: 0px;
+    border-bottom: 2px solid gray;
+}
+
+div#ks-editor .tab-button.tab-open {
+    font-weight: bold;
+    margin-bottom: 0px;
+    border-bottom: 2px solid black;
+}
diff --git a/src/editor/components/tabheader.tsx b/src/editor/components/tabheader.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..8acb2d9e5b7d5080019a8753f1cfdb64a15fc17b
--- /dev/null
+++ b/src/editor/components/tabheader.tsx
@@ -0,0 +1,38 @@
+import React, { useState } from "react";
+import "./tabheader.css";
+
+interface TabHeaderProps {
+    tabs: string[];
+    initialTabIndex?: number;
+    children: React.ReactNode[];
+}
+
+function TabHeader({ tabs, initialTabIndex, children }: TabHeaderProps) {
+    if (initialTabIndex === undefined) {
+        initialTabIndex = 0;
+    }
+
+    const [currentIndex, setCurrentIndex] = useState<number>(initialTabIndex);
+    return (
+        <div className={"tab-view"}>
+            <div className={"tab-header"}>
+                {tabs.map((name: string, index: number) => (
+                    <div
+                        key={index}
+                        className={
+                            index === currentIndex
+                                ? "tab-button tab-open"
+                                : "tab-button"
+                        }
+                        onClick={() => setCurrentIndex(index)}
+                    >
+                        {name}
+                    </div>
+                ))}
+            </div>
+            <div>{children[currentIndex]}</div>
+        </div>
+    );
+}
+
+export default TabHeader;