diff --git a/bar/clicks.go b/bar/clicks.go
index 2eea888458f03dffc0ab2512dc075bce02147435..d1c5f2fb2139a22692ad1b26dfa6438671432863 100644
--- a/bar/clicks.go
+++ b/bar/clicks.go
@@ -3,29 +3,30 @@
 package bar
 
 import (
-	"bufio"
+	"fmt"
 	"os"
-)
 
-type Clicks struct {
-	Button    int64    `json:"button"`
-	Modifiers []string `json:"modifiers"`
-	X         int64    `json:"x"`
-	Y         int64    `json:"y"`
-	RelativeX int64    `json:"relative_x"`
-	RelativeY int64    `json:"relative_y"`
-	Width     int64    `json:"width"`
-	Height    int64    `json:"height"`
-}
+	"gitlab.ie.suberic.net/kevin/i3going-on/modules"
+	"gopkg.in/yaml.v2"
+)
 
 //{"button":1,"modifiers":[],"x":1952,"y":1144,"relative_x":62,"relative_y":14,"width":112,"height":22}
-func handleCommands() {
-	logger, err := os.Create("/tmp/i3going-on.log")
-	if err != nil {
-		panic(err)
-	}
-	scanner := bufio.NewScanner(os.Stdin)
-	for scanner.Scan() {
-		logger.WriteString(scanner.Text())
+func handleCommands(clicks chan modules.Click) {
+	logger, _ := os.Create("/tmp/i3going-on.log")
+
+	for {
+		logger.WriteString("Looking for a click...\n")
+		clickParser := yaml.NewDecoder(os.Stdin)
+		click := modules.Click{}
+		err := clickParser.Decode(&click)
+		if err != nil {
+			logger.WriteString(fmt.Sprintf("Error on click: %s\n", err))
+			clicks <- modules.Click{
+				Name: fmt.Sprintf("ERROR: %s", err),
+			}
+			continue
+		}
+		logger.WriteString(fmt.Sprintf("Error on click: %s\n", err))
+		clicks <- click
 	}
 }
diff --git a/bar/run.go b/bar/run.go
index 53fcd2345e8701c4fbc78eae740d6db3574180fa..7af2830864fbc651400f45d8c61a360aa4590b1a 100644
--- a/bar/run.go
+++ b/bar/run.go
@@ -9,6 +9,7 @@ import (
 
 	"github.com/spf13/cobra"
 	"github.com/spf13/viper"
+	"gitlab.ie.suberic.net/kevin/i3going-on/modules"
 	"golang.org/x/sys/unix"
 )
 
@@ -17,7 +18,10 @@ func Run(cmd *cobra.Command, args []string) {
 	viper.BindPFlags(cmd.Flags())
 	cfg, err := readConfig(viper.GetString("config"))
 	cobra.CheckErr(err)
-	go handleCommands()
+
+	clicks := make(chan modules.Click, 1)
+
+	go handleCommands(clicks)
 
 	fmt.Printf(`{ "version": 1, "stop_signal": %d, "cont_signal": %d, "click_events": true }`+"\n",
 		unix.SignalNum("SIGSTOP"), unix.SignalNum("SIGCONT"))
@@ -30,6 +34,18 @@ func Run(cmd *cobra.Command, args []string) {
 		fmt.Printf("%s\n[%s]", separator, strings.Join(line, ","))
 		separator = ","
 		select {
+		case click := <-clicks:
+			found := false
+			for _, module := range cfg.Modules {
+				if click.Name == module.Name {
+					found = true
+					fmt.Print(`[{"full_text": "CLICK!"},{"name": "post", "full_text": "post", "color": "#11ff11"},{"name": "date", "full_text": "22-12-01 22:54"}]`)
+				}
+			}
+			if !found {
+				fmt.Print(`[{"full_text": "ERROR!"},{"name": "post", "full_text": "post", "color": "#11ff11"},{"name": "date", "full_text": "22-12-01 22:54"}]`)
+			}
+			time.Sleep(5 * time.Second)
 		case <-time.After(time.Duration(cfg.Refresh) * time.Second):
 		}
 	}
diff --git a/modules/clicks.go b/modules/clicks.go
new file mode 100644
index 0000000000000000000000000000000000000000..018c3310eb217f3f17e121c47b223f96821601dd
--- /dev/null
+++ b/modules/clicks.go
@@ -0,0 +1,15 @@
+// Package module implements all the modules.
+// Copyright (C) 2022 Kevin Lyda <kevin@lyda.ie>
+package modules
+
+type Click struct {
+	Name      string   `json:"name"`
+	Button    int64    `json:"button"`
+	Modifiers []string `json:"modifiers"`
+	X         int64    `json:"x"`
+	Y         int64    `json:"y"`
+	RelativeX int64    `json:"relative_x"`
+	RelativeY int64    `json:"relative_y"`
+	Width     int64    `json:"width"`
+	Height    int64    `json:"height"`
+}
diff --git a/modules/date.go b/modules/date.go
index 400d629f7ad1815e65ad6ea4c73c185b69c2f802..a8468971316cef2c352f130dc4182b2878ec281f 100644
--- a/modules/date.go
+++ b/modules/date.go
@@ -1,3 +1,5 @@
+// Package module implements all the modules.
+// Copyright (C) 2022 Kevin Lyda <kevin@lyda.ie>
 package modules
 
 import (
@@ -47,5 +49,5 @@ func (d *DateMod) Render() string {
 		}
 		d.blink = !d.blink
 	}
-	return fmt.Sprintf("{\"full_text\": \"%s\"}", now)
+	return fmt.Sprintf(`{"name": "%s", "full_text": "%s"}`, d.name, now)
 }
diff --git a/modules/modules.go b/modules/modules.go
index ea2ff2549debea2276a4d3ba5dc935b9e9cf3f32..a9f2bce51513634d83328c62c2433ce0adfd7cf3 100644
--- a/modules/modules.go
+++ b/modules/modules.go
@@ -1,3 +1,5 @@
+// Package module implements all the modules.
+// Copyright (C) 2022 Kevin Lyda <kevin@lyda.ie>
 package modules
 
 import (
diff --git a/modules/text.go b/modules/text.go
index c3f27ebf8f3077dbc9c61fd68cc12bb94c51f3a1..e5e845ea600466ea4ecd0463a1f49f853968f3b8 100644
--- a/modules/text.go
+++ b/modules/text.go
@@ -1,3 +1,5 @@
+// Package module implements all the modules.
+// Copyright (C) 2022 Kevin Lyda <kevin@lyda.ie>
 package modules
 
 import (