I think it's the observers that should call the Subject for registration, not vice-versa. So the obersver would be like:

```scala
observer.subject = Packages
```

I *think* the subject (here Packages) shouldn't care about which observer wants to be notified. Instead, it's the observer who should care about which subject it wants to get notified.
Then every time Packages throws an 'event', the observer will be called from the subject (Packages)

The observers (aka plugins/modules) that will be active should be probably saved in another table called 'active_plugins', or something like that.

A separate view will list all the plugins available, and plugins we want to activate or not. Once we activate one of the plugins/modules/observers, the observer will register itself to the subject. If we disactivate the plugin/module/observer, the observer will deregister itself from the subject.

Kinda similar to how Jenkins does it (I think). Jenkins have a view just for available plugins, and which one are activated.

What I'm saying is not the definite answer; rather this is how I view it. Let me know what you think guys!