Added access modifiers and documention + refactored to use the Message abstraction.