diff --git a/Components/Header.js b/Components/Header.js
index 68d0557..1ec054b 100644
--- a/Components/Header.js
+++ b/Components/Header.js
@@ -42,6 +42,7 @@
                                     className={Styles.button}
                                     style={{ backgroundColor: `#${button.color}`, color: `#${button.buttonText}` }}
                                     href={button.link}
+                                    onClick={() => { if (button.id) { this.props.callback(this.props.that, button.id) } }}
                                     target={button.target ? "_blank" : null}
                                     rel="noreferrer">
                                     {button.text}
diff --git a/Components/LEGACY/AutoSpacing.js b/Components/LEGACY/AutoSpacing.js
deleted file mode 100644
index e90da58..0000000
--- a/Components/LEGACY/AutoSpacing.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import react, { Component } from "react";
-import Styles from '../styles/autospacing.module.css';
-
-class AutoSpacing extends Component {
-	constructor(props) {
-		super(props);
-	}
-
-
-	render() {
-		return (
-            <div className={Styles.container}>
-				{
-					react.Children.toArray(this.props.children).map((item, index) => {
-						return <div className={Styles.item} key={index}>{item}</div>
-					})
-				}
-			</div>
-        )
-	}
-}
-
-export default AutoSpacing;
\ No newline at end of file
diff --git a/Components/LEGACY/Paragraph.js b/Components/LEGACY/Paragraph.js
deleted file mode 100644
index c332832..0000000
--- a/Components/LEGACY/Paragraph.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import { Component } from 'react';
-
-class Paragraph extends Component {
-    render () {
-        return (
-            <p style={{width: "100%", textAlign: "left", paddingLeft: "15%", paddingRight: "15%", fontSize: "120%", color: "var(--card-text-color)"}}>
-                {this.props.children}
-            </p>
-        );
-    }
-}
-
-export default Paragraph;
\ No newline at end of file
diff --git a/Components/LEGACY/Scroller.js b/Components/LEGACY/Scroller.js
deleted file mode 100644
index 69e0fa3..0000000
--- a/Components/LEGACY/Scroller.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { Component } from "react";
-import Styles from '../styles/scroller.module.css';
-
-class Scroller extends Component {
-    constructor(props) {
-        super(props);
-    }
-    render() {
-        this.props.text = this.props.text.concat(this.props.text);
-        return (
-            <div className={Styles.container}>
-                {
-                    this.props.text.map((item, index) => {
-                        console.log([this.props.text, this.props.text])
-                        return <div className={Styles.item} key={index}>{item}</div>;
-                    })
-                }
-            </div>
-        )
-    }
-}
-export default Scroller;
diff --git a/Components/LEGACY/SectionHeading.js b/Components/LEGACY/SectionHeading.js
deleted file mode 100644
index ed77661..0000000
--- a/Components/LEGACY/SectionHeading.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Component } from "react";
-import Styles from '../styles/sectionheading.module.css';
-
-class SectionHeading extends Component {
-	constructor(props) {
-		super(props);
-	}
-
-
-	render() {
-		return (
-            <h1 className={Styles.title} id={this.props.id}>{this.props.children}</h1>
-        )
-	}
-}
-
-export default SectionHeading;
\ No newline at end of file
diff --git a/Components/LEGACY/Subheading.js b/Components/LEGACY/Subheading.js
deleted file mode 100644
index 964f1dd..0000000
--- a/Components/LEGACY/Subheading.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Component } from "react";
-import Styles from '../styles/subheading.module.css';
-
-class SubHeading extends Component {
-	constructor(props) {
-		super(props);
-	}
-
-
-	render() {
-		return (
-            <h2 className={Styles.title} id={this.props.id}>{this.props.children}</h2>
-        )
-	}
-}
-
-export default SubHeading;
\ No newline at end of file
diff --git a/Components/LEGACY/TileRow.js b/Components/LEGACY/TileRow.js
deleted file mode 100644
index ed0bf0b..0000000
--- a/Components/LEGACY/TileRow.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import react, { Component, cloneElement } from "react";
-import Styles from '../styles/tilerow.module.css';
-
-class TileRow extends Component {
-    constructor(props) {
-	super(props);
-    }
-    render() {
-	return (
-		<div className={Styles.container}>
-		{
-		    react.Children.toArray(this.props.children).map((item, index) => {
-			if (this.props.divless !== false) { // Intentional comparison to false, initially had a default of false, now has a default of true
-			    const className = (item.props.className ? item.props.className + " " : "") + Styles.item
-
-			    const key = index;
-
-			    const props = {
-				className,
-				key
-			    }
-
-			    return cloneElement(item, props);
-			} else {
-			    return <div className={Styles.item + " " + Styles.fitItemWidth} key={index}>{item}</div>;
-			}
-		    })
-		}
-	    </div>
-	)
-    }
-}
-export default TileRow;
diff --git a/Components/LEGACY/Timeline.js b/Components/LEGACY/Timeline.js
deleted file mode 100644
index e69de29..0000000
--- a/Components/LEGACY/Timeline.js
+++ /dev/null
diff --git a/Components/Panels.js b/Components/Panels.js
index 3c1d2e6..e2e89d9 100644
--- a/Components/Panels.js
+++ b/Components/Panels.js
@@ -96,7 +96,8 @@
 
 class Divider extends Component {
 	render() {
-		return <div className={Styles.divider}></div>
+		// return <div className={Styles.divider} style={{ backgroundColor: this.props.bound == this.props.name ? "red" : "var(--theme-ui-colors-hint)"}}></div>
+		return <div className={Styles.divider} style={{ backgroundColor: "var(--theme-ui-colors-hint)"}}></div>
 	}
 }
 
