diff --git a/PluginSystem/README.md b/PluginSystem/README.md
new file mode 100644
index 0000000..bc3aa44
--- /dev/null
+++ b/PluginSystem/README.md
@@ -0,0 +1,25 @@
+Plugin Example
+===============
+A simple plugin system so people can create simple plugin.go files to drop in a specific folder and they will be recognized and added to the app for use within the app.
+
+*example use:*
+
+```
+$> ./Vic4
+result of !help:
+cmd:!help, name:Help
+about:Display all plugins informaion
+
+cmd:!add, name:Example Addition
+about:Example plugin to add two numbers together
+
+cmd:!echo, name:Example Echo
+about:Example plugin to repeat what is sent to it
+
+result of !echo: returning: this argument returned
+result of !add (1+2): 3
+```
+
+Thanks
+===============
+A MASSIVE thanks to @MantisSTS for writing the majority of this!

diff --git a/PluginSystem/README.md b/PluginSystem/README.md
new file mode 100644
index 0000000..bc3aa44
--- /dev/null
+++ b/PluginSystem/README.md
@@ -0,0 +1,25 @@
+Plugin Example
+===============
+A simple plugin system so people can create simple plugin.go files to drop in a specific folder and they will be recognized and added to the app for use within the app.
+
+*example use:*
+
+```
+$> ./Vic4
+result of !help:
+cmd:!help, name:Help
+about:Display all plugins informaion
+
+cmd:!add, name:Example Addition
+about:Example plugin to add two numbers together
+
+cmd:!echo, name:Example Echo
+about:Example plugin to repeat what is sent to it
+
+result of !echo: returning: this argument returned
+result of !add (1+2): 3
+```
+
+Thanks
+===============
+A MASSIVE thanks to @MantisSTS for writing the majority of this!
diff --git a/PluginSystem/main.go b/PluginSystem/main.go
new file mode 100755
index 0000000..c60cd8f
--- /dev/null
+++ b/PluginSystem/main.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+	"fmt"
+
+	"PluginSystem/plugins"
+	_ "PluginSystem/plugins/misc"
+	_ "PluginSystem/plugins/example"
+)
+
+func main() {
+
+	result := plugins.RunPlugin("!help", "")
+	fmt.Println("result of !help:")
+	fmt.Print(result) 
+
+	cmd := "!echo"
+	arg := "this argument returned"
+	result  = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !echo:", result) 
+
+
+	cmd = "!add"
+	arg = "{\"intA\":1, \"intB\":2}"
+	result = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !add (1+2):", result) 
+
+}

diff --git a/PluginSystem/README.md b/PluginSystem/README.md
new file mode 100644
index 0000000..bc3aa44
--- /dev/null
+++ b/PluginSystem/README.md
@@ -0,0 +1,25 @@
+Plugin Example
+===============
+A simple plugin system so people can create simple plugin.go files to drop in a specific folder and they will be recognized and added to the app for use within the app.
+
+*example use:*
+
+```
+$> ./Vic4
+result of !help:
+cmd:!help, name:Help
+about:Display all plugins informaion
+
+cmd:!add, name:Example Addition
+about:Example plugin to add two numbers together
+
+cmd:!echo, name:Example Echo
+about:Example plugin to repeat what is sent to it
+
+result of !echo: returning: this argument returned
+result of !add (1+2): 3
+```
+
+Thanks
+===============
+A MASSIVE thanks to @MantisSTS for writing the majority of this!
diff --git a/PluginSystem/main.go b/PluginSystem/main.go
new file mode 100755
index 0000000..c60cd8f
--- /dev/null
+++ b/PluginSystem/main.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+	"fmt"
+
+	"PluginSystem/plugins"
+	_ "PluginSystem/plugins/misc"
+	_ "PluginSystem/plugins/example"
+)
+
+func main() {
+
+	result := plugins.RunPlugin("!help", "")
+	fmt.Println("result of !help:")
+	fmt.Print(result) 
+
+	cmd := "!echo"
+	arg := "this argument returned"
+	result  = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !echo:", result) 
+
+
+	cmd = "!add"
+	arg = "{\"intA\":1, \"intB\":2}"
+	result = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !add (1+2):", result) 
+
+}
diff --git a/PluginSystem/plugins/example/example_addition.go b/PluginSystem/plugins/example/example_addition.go
new file mode 100755
index 0000000..46da30b
--- /dev/null
+++ b/PluginSystem/plugins/example/example_addition.go
@@ -0,0 +1,44 @@
+package example
+
+import (
+    "fmt"
+    "strconv"
+    "encoding/json"
+
+    "PLuginExample/plugins"
+)
+
+type ExampleInts struct {
+    IntA    int      `json:"intA"`
+    IntB    int      `json:"intB"`
+}
+
+func add(firstNo int, secondNo int)string {
+    result := strconv.Itoa( firstNo + secondNo )
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!add"
+    commands.Callback = func(args ...interface{})(string) {
+        
+        var ints ExampleInts
+
+        jsonToUse := []byte(args[0].(string))
+        err := json.Unmarshal(jsonToUse, &ints)
+        if err != nil {
+            fmt.Println(err.Error()) 
+        }
+
+        result := add(ints.IntA, ints.IntB)
+        return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Example Addition"
+    p.About = "Example plugin to add two numbers together"
+    p.Commands = commands
+    p.AddPluginInfo()
+}

diff --git a/PluginSystem/README.md b/PluginSystem/README.md
new file mode 100644
index 0000000..bc3aa44
--- /dev/null
+++ b/PluginSystem/README.md
@@ -0,0 +1,25 @@
+Plugin Example
+===============
+A simple plugin system so people can create simple plugin.go files to drop in a specific folder and they will be recognized and added to the app for use within the app.
+
+*example use:*
+
+```
+$> ./Vic4
+result of !help:
+cmd:!help, name:Help
+about:Display all plugins informaion
+
+cmd:!add, name:Example Addition
+about:Example plugin to add two numbers together
+
+cmd:!echo, name:Example Echo
+about:Example plugin to repeat what is sent to it
+
+result of !echo: returning: this argument returned
+result of !add (1+2): 3
+```
+
+Thanks
+===============
+A MASSIVE thanks to @MantisSTS for writing the majority of this!
diff --git a/PluginSystem/main.go b/PluginSystem/main.go
new file mode 100755
index 0000000..c60cd8f
--- /dev/null
+++ b/PluginSystem/main.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+	"fmt"
+
+	"PluginSystem/plugins"
+	_ "PluginSystem/plugins/misc"
+	_ "PluginSystem/plugins/example"
+)
+
+func main() {
+
+	result := plugins.RunPlugin("!help", "")
+	fmt.Println("result of !help:")
+	fmt.Print(result) 
+
+	cmd := "!echo"
+	arg := "this argument returned"
+	result  = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !echo:", result) 
+
+
+	cmd = "!add"
+	arg = "{\"intA\":1, \"intB\":2}"
+	result = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !add (1+2):", result) 
+
+}
diff --git a/PluginSystem/plugins/example/example_addition.go b/PluginSystem/plugins/example/example_addition.go
new file mode 100755
index 0000000..46da30b
--- /dev/null
+++ b/PluginSystem/plugins/example/example_addition.go
@@ -0,0 +1,44 @@
+package example
+
+import (
+    "fmt"
+    "strconv"
+    "encoding/json"
+
+    "PLuginExample/plugins"
+)
+
+type ExampleInts struct {
+    IntA    int      `json:"intA"`
+    IntB    int      `json:"intB"`
+}
+
+func add(firstNo int, secondNo int)string {
+    result := strconv.Itoa( firstNo + secondNo )
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!add"
+    commands.Callback = func(args ...interface{})(string) {
+        
+        var ints ExampleInts
+
+        jsonToUse := []byte(args[0].(string))
+        err := json.Unmarshal(jsonToUse, &ints)
+        if err != nil {
+            fmt.Println(err.Error()) 
+        }
+
+        result := add(ints.IntA, ints.IntB)
+        return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Example Addition"
+    p.About = "Example plugin to add two numbers together"
+    p.Commands = commands
+    p.AddPluginInfo()
+}
diff --git a/PluginSystem/plugins/example/example_echo.go b/PluginSystem/plugins/example/example_echo.go
new file mode 100755
index 0000000..2c430fb
--- /dev/null
+++ b/PluginSystem/plugins/example/example_echo.go
@@ -0,0 +1,27 @@
+package example
+
+import (
+    //"fmt"
+    "PluginExample/plugins"
+)
+
+func echo(msg string)string {
+    result := "returning: " + msg
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!echo"
+    commands.Callback = func(args ...interface{})(string) {
+       result := echo(args[0].(string))
+       return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Example Echo"
+    p.About = "Example plugin to repeat what is sent to it"
+    p.Commands = commands
+    p.AddPluginInfo()
+}

diff --git a/PluginSystem/README.md b/PluginSystem/README.md
new file mode 100644
index 0000000..bc3aa44
--- /dev/null
+++ b/PluginSystem/README.md
@@ -0,0 +1,25 @@
+Plugin Example
+===============
+A simple plugin system so people can create simple plugin.go files to drop in a specific folder and they will be recognized and added to the app for use within the app.
+
+*example use:*
+
+```
+$> ./Vic4
+result of !help:
+cmd:!help, name:Help
+about:Display all plugins informaion
+
+cmd:!add, name:Example Addition
+about:Example plugin to add two numbers together
+
+cmd:!echo, name:Example Echo
+about:Example plugin to repeat what is sent to it
+
+result of !echo: returning: this argument returned
+result of !add (1+2): 3
+```
+
+Thanks
+===============
+A MASSIVE thanks to @MantisSTS for writing the majority of this!
diff --git a/PluginSystem/main.go b/PluginSystem/main.go
new file mode 100755
index 0000000..c60cd8f
--- /dev/null
+++ b/PluginSystem/main.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+	"fmt"
+
+	"PluginSystem/plugins"
+	_ "PluginSystem/plugins/misc"
+	_ "PluginSystem/plugins/example"
+)
+
+func main() {
+
+	result := plugins.RunPlugin("!help", "")
+	fmt.Println("result of !help:")
+	fmt.Print(result) 
+
+	cmd := "!echo"
+	arg := "this argument returned"
+	result  = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !echo:", result) 
+
+
+	cmd = "!add"
+	arg = "{\"intA\":1, \"intB\":2}"
+	result = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !add (1+2):", result) 
+
+}
diff --git a/PluginSystem/plugins/example/example_addition.go b/PluginSystem/plugins/example/example_addition.go
new file mode 100755
index 0000000..46da30b
--- /dev/null
+++ b/PluginSystem/plugins/example/example_addition.go
@@ -0,0 +1,44 @@
+package example
+
+import (
+    "fmt"
+    "strconv"
+    "encoding/json"
+
+    "PLuginExample/plugins"
+)
+
+type ExampleInts struct {
+    IntA    int      `json:"intA"`
+    IntB    int      `json:"intB"`
+}
+
+func add(firstNo int, secondNo int)string {
+    result := strconv.Itoa( firstNo + secondNo )
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!add"
+    commands.Callback = func(args ...interface{})(string) {
+        
+        var ints ExampleInts
+
+        jsonToUse := []byte(args[0].(string))
+        err := json.Unmarshal(jsonToUse, &ints)
+        if err != nil {
+            fmt.Println(err.Error()) 
+        }
+
+        result := add(ints.IntA, ints.IntB)
+        return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Example Addition"
+    p.About = "Example plugin to add two numbers together"
+    p.Commands = commands
+    p.AddPluginInfo()
+}
diff --git a/PluginSystem/plugins/example/example_echo.go b/PluginSystem/plugins/example/example_echo.go
new file mode 100755
index 0000000..2c430fb
--- /dev/null
+++ b/PluginSystem/plugins/example/example_echo.go
@@ -0,0 +1,27 @@
+package example
+
+import (
+    //"fmt"
+    "PluginExample/plugins"
+)
+
+func echo(msg string)string {
+    result := "returning: " + msg
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!echo"
+    commands.Callback = func(args ...interface{})(string) {
+       result := echo(args[0].(string))
+       return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Example Echo"
+    p.About = "Example plugin to repeat what is sent to it"
+    p.Commands = commands
+    p.AddPluginInfo()
+}
diff --git a/PluginSystem/plugins/misc/help.go b/PluginSystem/plugins/misc/help.go
new file mode 100755
index 0000000..9def8b0
--- /dev/null
+++ b/PluginSystem/plugins/misc/help.go
@@ -0,0 +1,37 @@
+package misc
+
+import (
+    //"fmt"
+    "PluginExample/plugins"
+)
+
+func misc_help(msg string)string {
+    var result string
+        for _, element := range plugins.Plugins {
+
+            result += "cmd:" + element.Commands.Name + ", "
+            result += "name:" + element.Name + "\n"
+            result += "about:" + element.About + "\n\n"
+            //element.Commands[0].Callback()
+
+            //result += "cmd:", key, "=>", "info:", element
+        }
+
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!help"
+    commands.Callback = func(args ...interface{})(string) {
+       result := misc_help(args[0].(string))
+       return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Help"
+    p.About = "Display all plugins informaion"
+    p.Commands = commands
+    p.AddPluginInfo()
+}

diff --git a/PluginSystem/README.md b/PluginSystem/README.md
new file mode 100644
index 0000000..bc3aa44
--- /dev/null
+++ b/PluginSystem/README.md
@@ -0,0 +1,25 @@
+Plugin Example
+===============
+A simple plugin system so people can create simple plugin.go files to drop in a specific folder and they will be recognized and added to the app for use within the app.
+
+*example use:*
+
+```
+$> ./Vic4
+result of !help:
+cmd:!help, name:Help
+about:Display all plugins informaion
+
+cmd:!add, name:Example Addition
+about:Example plugin to add two numbers together
+
+cmd:!echo, name:Example Echo
+about:Example plugin to repeat what is sent to it
+
+result of !echo: returning: this argument returned
+result of !add (1+2): 3
+```
+
+Thanks
+===============
+A MASSIVE thanks to @MantisSTS for writing the majority of this!
diff --git a/PluginSystem/main.go b/PluginSystem/main.go
new file mode 100755
index 0000000..c60cd8f
--- /dev/null
+++ b/PluginSystem/main.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+	"fmt"
+
+	"PluginSystem/plugins"
+	_ "PluginSystem/plugins/misc"
+	_ "PluginSystem/plugins/example"
+)
+
+func main() {
+
+	result := plugins.RunPlugin("!help", "")
+	fmt.Println("result of !help:")
+	fmt.Print(result) 
+
+	cmd := "!echo"
+	arg := "this argument returned"
+	result  = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !echo:", result) 
+
+
+	cmd = "!add"
+	arg = "{\"intA\":1, \"intB\":2}"
+	result = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !add (1+2):", result) 
+
+}
diff --git a/PluginSystem/plugins/example/example_addition.go b/PluginSystem/plugins/example/example_addition.go
new file mode 100755
index 0000000..46da30b
--- /dev/null
+++ b/PluginSystem/plugins/example/example_addition.go
@@ -0,0 +1,44 @@
+package example
+
+import (
+    "fmt"
+    "strconv"
+    "encoding/json"
+
+    "PLuginExample/plugins"
+)
+
+type ExampleInts struct {
+    IntA    int      `json:"intA"`
+    IntB    int      `json:"intB"`
+}
+
+func add(firstNo int, secondNo int)string {
+    result := strconv.Itoa( firstNo + secondNo )
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!add"
+    commands.Callback = func(args ...interface{})(string) {
+        
+        var ints ExampleInts
+
+        jsonToUse := []byte(args[0].(string))
+        err := json.Unmarshal(jsonToUse, &ints)
+        if err != nil {
+            fmt.Println(err.Error()) 
+        }
+
+        result := add(ints.IntA, ints.IntB)
+        return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Example Addition"
+    p.About = "Example plugin to add two numbers together"
+    p.Commands = commands
+    p.AddPluginInfo()
+}
diff --git a/PluginSystem/plugins/example/example_echo.go b/PluginSystem/plugins/example/example_echo.go
new file mode 100755
index 0000000..2c430fb
--- /dev/null
+++ b/PluginSystem/plugins/example/example_echo.go
@@ -0,0 +1,27 @@
+package example
+
+import (
+    //"fmt"
+    "PluginExample/plugins"
+)
+
+func echo(msg string)string {
+    result := "returning: " + msg
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!echo"
+    commands.Callback = func(args ...interface{})(string) {
+       result := echo(args[0].(string))
+       return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Example Echo"
+    p.About = "Example plugin to repeat what is sent to it"
+    p.Commands = commands
+    p.AddPluginInfo()
+}
diff --git a/PluginSystem/plugins/misc/help.go b/PluginSystem/plugins/misc/help.go
new file mode 100755
index 0000000..9def8b0
--- /dev/null
+++ b/PluginSystem/plugins/misc/help.go
@@ -0,0 +1,37 @@
+package misc
+
+import (
+    //"fmt"
+    "PluginExample/plugins"
+)
+
+func misc_help(msg string)string {
+    var result string
+        for _, element := range plugins.Plugins {
+
+            result += "cmd:" + element.Commands.Name + ", "
+            result += "name:" + element.Name + "\n"
+            result += "about:" + element.About + "\n\n"
+            //element.Commands[0].Callback()
+
+            //result += "cmd:", key, "=>", "info:", element
+        }
+
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!help"
+    commands.Callback = func(args ...interface{})(string) {
+       result := misc_help(args[0].(string))
+       return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Help"
+    p.About = "Display all plugins informaion"
+    p.Commands = commands
+    p.AddPluginInfo()
+}
diff --git a/PluginSystem/plugins/pluginsHelper.go b/PluginSystem/plugins/pluginsHelper.go
new file mode 100755
index 0000000..f860040
--- /dev/null
+++ b/PluginSystem/plugins/pluginsHelper.go
@@ -0,0 +1,37 @@
+package plugins
+
+//import "fmt"
+
+type PluginInfo struct {
+	Name     string
+	About    string
+	Commands Command
+}
+
+type Command struct {
+	Name     string
+	Callback func(args ...interface{})(string)
+}
+
+var Plugins []PluginInfo
+
+func (p *PluginInfo) AddPluginInfo() {
+	Plugins = append(Plugins, *p)
+}
+
+func (p *PluginInfo) Handle() {
+
+}
+
+func RunPlugin(cmd string, arg string)string{
+	var result string
+	for _, element := range Plugins {
+		// fmt.Println("cmd:", key, "=>", "info:", element) // DEBUG
+		if element.Commands.Name == cmd {
+			result = element.Commands.Callback(arg)
+			return result
+		}
+		result = "command not found"
+	}
+	return result
+}

diff --git a/PluginSystem/README.md b/PluginSystem/README.md
new file mode 100644
index 0000000..bc3aa44
--- /dev/null
+++ b/PluginSystem/README.md
@@ -0,0 +1,25 @@
+Plugin Example
+===============
+A simple plugin system so people can create simple plugin.go files to drop in a specific folder and they will be recognized and added to the app for use within the app.
+
+*example use:*
+
+```
+$> ./Vic4
+result of !help:
+cmd:!help, name:Help
+about:Display all plugins informaion
+
+cmd:!add, name:Example Addition
+about:Example plugin to add two numbers together
+
+cmd:!echo, name:Example Echo
+about:Example plugin to repeat what is sent to it
+
+result of !echo: returning: this argument returned
+result of !add (1+2): 3
+```
+
+Thanks
+===============
+A MASSIVE thanks to @MantisSTS for writing the majority of this!
diff --git a/PluginSystem/main.go b/PluginSystem/main.go
new file mode 100755
index 0000000..c60cd8f
--- /dev/null
+++ b/PluginSystem/main.go
@@ -0,0 +1,28 @@
+package main
+
+import (
+	"fmt"
+
+	"PluginSystem/plugins"
+	_ "PluginSystem/plugins/misc"
+	_ "PluginSystem/plugins/example"
+)
+
+func main() {
+
+	result := plugins.RunPlugin("!help", "")
+	fmt.Println("result of !help:")
+	fmt.Print(result) 
+
+	cmd := "!echo"
+	arg := "this argument returned"
+	result  = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !echo:", result) 
+
+
+	cmd = "!add"
+	arg = "{\"intA\":1, \"intB\":2}"
+	result = plugins.RunPlugin(cmd, arg)
+	fmt.Println("result of !add (1+2):", result) 
+
+}
diff --git a/PluginSystem/plugins/example/example_addition.go b/PluginSystem/plugins/example/example_addition.go
new file mode 100755
index 0000000..46da30b
--- /dev/null
+++ b/PluginSystem/plugins/example/example_addition.go
@@ -0,0 +1,44 @@
+package example
+
+import (
+    "fmt"
+    "strconv"
+    "encoding/json"
+
+    "PLuginExample/plugins"
+)
+
+type ExampleInts struct {
+    IntA    int      `json:"intA"`
+    IntB    int      `json:"intB"`
+}
+
+func add(firstNo int, secondNo int)string {
+    result := strconv.Itoa( firstNo + secondNo )
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!add"
+    commands.Callback = func(args ...interface{})(string) {
+        
+        var ints ExampleInts
+
+        jsonToUse := []byte(args[0].(string))
+        err := json.Unmarshal(jsonToUse, &ints)
+        if err != nil {
+            fmt.Println(err.Error()) 
+        }
+
+        result := add(ints.IntA, ints.IntB)
+        return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Example Addition"
+    p.About = "Example plugin to add two numbers together"
+    p.Commands = commands
+    p.AddPluginInfo()
+}
diff --git a/PluginSystem/plugins/example/example_echo.go b/PluginSystem/plugins/example/example_echo.go
new file mode 100755
index 0000000..2c430fb
--- /dev/null
+++ b/PluginSystem/plugins/example/example_echo.go
@@ -0,0 +1,27 @@
+package example
+
+import (
+    //"fmt"
+    "PluginExample/plugins"
+)
+
+func echo(msg string)string {
+    result := "returning: " + msg
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!echo"
+    commands.Callback = func(args ...interface{})(string) {
+       result := echo(args[0].(string))
+       return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Example Echo"
+    p.About = "Example plugin to repeat what is sent to it"
+    p.Commands = commands
+    p.AddPluginInfo()
+}
diff --git a/PluginSystem/plugins/misc/help.go b/PluginSystem/plugins/misc/help.go
new file mode 100755
index 0000000..9def8b0
--- /dev/null
+++ b/PluginSystem/plugins/misc/help.go
@@ -0,0 +1,37 @@
+package misc
+
+import (
+    //"fmt"
+    "PluginExample/plugins"
+)
+
+func misc_help(msg string)string {
+    var result string
+        for _, element := range plugins.Plugins {
+
+            result += "cmd:" + element.Commands.Name + ", "
+            result += "name:" + element.Name + "\n"
+            result += "about:" + element.About + "\n\n"
+            //element.Commands[0].Callback()
+
+            //result += "cmd:", key, "=>", "info:", element
+        }
+
+    return result
+}
+
+func init() {
+
+    var commands plugins.Command
+    commands.Name = "!help"
+    commands.Callback = func(args ...interface{})(string) {
+       result := misc_help(args[0].(string))
+       return result
+    }
+
+    var p plugins.PluginInfo
+    p.Name = "Help"
+    p.About = "Display all plugins informaion"
+    p.Commands = commands
+    p.AddPluginInfo()
+}
diff --git a/PluginSystem/plugins/pluginsHelper.go b/PluginSystem/plugins/pluginsHelper.go
new file mode 100755
index 0000000..f860040
--- /dev/null
+++ b/PluginSystem/plugins/pluginsHelper.go
@@ -0,0 +1,37 @@
+package plugins
+
+//import "fmt"
+
+type PluginInfo struct {
+	Name     string
+	About    string
+	Commands Command
+}
+
+type Command struct {
+	Name     string
+	Callback func(args ...interface{})(string)
+}
+
+var Plugins []PluginInfo
+
+func (p *PluginInfo) AddPluginInfo() {
+	Plugins = append(Plugins, *p)
+}
+
+func (p *PluginInfo) Handle() {
+
+}
+
+func RunPlugin(cmd string, arg string)string{
+	var result string
+	for _, element := range Plugins {
+		// fmt.Println("cmd:", key, "=>", "info:", element) // DEBUG
+		if element.Commands.Name == cmd {
+			result = element.Commands.Callback(arg)
+			return result
+		}
+		result = "command not found"
+	}
+	return result
+}
diff --git a/README.md b/README.md
index 2e1fd1f..fec8df5 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,10 @@
 
 view, modify and create windows shortcut files (.lnk)
 
+**<u>PLuginExample</u>**
+
+A small PoC showing how to add a pluginsystem to your application
+
 **<u>RunningAs</u>**
 
-Alert box containing current user process running as
\ No newline at end of file
+Alert box containing current user process running as