ADDED: initial design, not finished though;