diff --git a/src/api/behaviorcontroller.h b/src/api/behaviorcontroller.h
index f058a27bce1e6d261563290d6357324e3c1523ba..0748ed5b9336bc09d006f5c65862fa170115bd5a 100644
--- a/src/api/behaviorcontroller.h
+++ b/src/api/behaviorcontroller.h
@@ -38,12 +38,12 @@ class Lrc;
 
 namespace conversation
 {
-    class Info;
+    struct Info;
 }
 
 namespace interaction
 {
-    class Info;
+    struct Info;
 }
 
 /**
diff --git a/src/call.cpp b/src/call.cpp
index b6a474b4939a0dd879bc0bea12e1538892291629..c0ffa4d6839ec1d87d8172a18aca156f20fc36f1 100644
--- a/src/call.cpp
+++ b/src/call.cpp
@@ -294,16 +294,16 @@ m_pDialNumber(new TemporaryContactMethod()),
 m_History(false),m_Missed(false),m_Direction(Call::Direction::OUTGOING),m_Type(Call::Type::CALL),
 m_pUserActionModel(nullptr), m_CurrentState(Call::State::ERROR),m_pCertificate(nullptr),m_mMedias({{
    /*                                            IN                                                            OUT                           */
-   /* AUDIO */ {{ new QList<Media::Media*>() /*Created lifecycle == progress*/, new QList<Media::Media*>() /*Created lifecycle == progress*/}},
-   /* VIDEO */ {{ new QList<Media::Media*>() /*On demand                    */, new QList<Media::Media*>() /*On demand                    */}},
-   /* TEXT  */ {{ new QList<Media::Media*>() /*On demand                    */, new QList<Media::Media*>() /*On demand                    */}},
-   /* FILE  */ {{ new QList<Media::Media*>() /*Not implemented              */, new QList<Media::Media*>() /*Not implemented              */}},
+   /* AUDIO */ {{ new QList<media::Media*>() /*Created lifecycle == progress*/, new QList<media::Media*>() /*Created lifecycle == progress*/}},
+   /* VIDEO */ {{ new QList<media::Media*>() /*On demand                    */, new QList<media::Media*>() /*On demand                    */}},
+   /* TEXT  */ {{ new QList<media::Media*>() /*On demand                    */, new QList<media::Media*>() /*On demand                    */}},
+   /* FILE  */ {{ new QList<media::Media*>() /*Not implemented              */, new QList<media::Media*>() /*Not implemented              */}},
 }}), m_mRecordings({{
    /*                           IN                            OUT                */
-   /* AUDIO */ {{ new QList<Media::Recording*>(), new QList<Media::Recording*>()}},
-   /* VIDEO */ {{ new QList<Media::Recording*>(), new QList<Media::Recording*>()}},
-   /* TEXT  */ {{ new QList<Media::Recording*>(), new QList<Media::Recording*>()}},
-   /* FILE  */ {{ new QList<Media::Recording*>(), new QList<Media::Recording*>()}},
+   /* AUDIO */ {{ new QList<media::Recording*>(), new QList<media::Recording*>()}},
+   /* VIDEO */ {{ new QList<media::Recording*>(), new QList<media::Recording*>()}},
+   /* TEXT  */ {{ new QList<media::Recording*>(), new QList<media::Recording*>()}},
+   /* FILE  */ {{ new QList<media::Recording*>(), new QList<media::Recording*>()}},
 }}), m_mIsRecording({{
    /*              IN     OUT   */
    /* AUDIO */ {{ false, false }},
@@ -371,16 +371,16 @@ Call::~Call()
 
 CallPrivate::~CallPrivate()
 {
-   for ( const Media::Media::Type t : EnumIterator<Media::Media::Type>()) {
-      if (m_mMedias[t][Media::Media::Direction::IN  ])
-         delete m_mMedias[t][Media::Media::Direction::IN  ];
-      if (m_mMedias[t][Media::Media::Direction::OUT ])
-         delete m_mMedias[t][Media::Media::Direction::OUT ];
+   for ( const media::Media::Type t : EnumIterator<media::Media::Type>()) {
+      if (m_mMedias[t][media::Media::Direction::IN  ])
+         delete m_mMedias[t][media::Media::Direction::IN  ];
+      if (m_mMedias[t][media::Media::Direction::OUT ])
+         delete m_mMedias[t][media::Media::Direction::OUT ];
 
-      if (m_mRecordings[t][Media::Media::Direction::IN  ])
-         delete m_mRecordings[t][Media::Media::Direction::IN  ];
-      if (m_mRecordings[t][Media::Media::Direction::OUT ])
-         delete m_mRecordings[t][Media::Media::Direction::OUT ];
+      if (m_mRecordings[t][media::Media::Direction::IN  ])
+         delete m_mRecordings[t][media::Media::Direction::IN  ];
+      if (m_mRecordings[t][media::Media::Direction::OUT ])
+         delete m_mRecordings[t][media::Media::Direction::OUT ];
    }
 }
 
@@ -397,7 +397,7 @@ void CallPrivate::deleteCall(Call* call)
 
 void CallPrivate::updateOutgoingMedia(const MapStringString& details)
 {
-   auto list = q_ptr->media(Media::Media::Type::VIDEO, Media::Media::Direction::OUT);
+   auto list = q_ptr->media(media::Media::Type::VIDEO, media::Media::Direction::OUT);
    QString video_source  = details[ DRing::Call::Details::VIDEO_SOURCE];
 
    if (video_source.length() <= 0 && list.isEmpty()) {
@@ -407,12 +407,12 @@ void CallPrivate::updateOutgoingMedia(const MapStringString& details)
 
    if (list.isEmpty()) {
        // Update data
-       static const Media::Media::Direction direction = Media::Media::Direction::OUT;
-       mediaFactory<Media::Video>(direction);
+       static const media::Media::Direction direction = media::Media::Direction::OUT;
+       mediaFactory<media::Video>(direction);
    }
 
-   list = q_ptr->media(Media::Media::Type::VIDEO, Media::Media::Direction::OUT);
-   Media::Video* media_video = static_cast<Media::Video*>(list[0]);
+   list = q_ptr->media(media::Media::Type::VIDEO, media::Media::Direction::OUT);
+   media::Video* media_video = static_cast<media::Video*>(list[0]);
    media_video->sourceModel()->setUsedIndex(video_source);
    return;
 }
@@ -474,10 +474,10 @@ Call* CallPrivate::buildCall(const QString& callId, Call::Direction callDirectio
 
     //Set the recording state
     if (CallManager::instance().getIsRecording(callId)) {
-        call->d_ptr->m_mIsRecording[ Media::Media::Type::AUDIO ].setAt( Media::Media::Direction::IN  , true);
-        call->d_ptr->m_mIsRecording[ Media::Media::Type::AUDIO ].setAt( Media::Media::Direction::OUT , true);
-        call->d_ptr->m_mIsRecording[ Media::Media::Type::VIDEO ].setAt( Media::Media::Direction::IN  , true);
-        call->d_ptr->m_mIsRecording[ Media::Media::Type::VIDEO ].setAt( Media::Media::Direction::OUT , true);
+        call->d_ptr->m_mIsRecording[ media::Media::Type::AUDIO ].setAt( media::Media::Direction::IN  , true);
+        call->d_ptr->m_mIsRecording[ media::Media::Type::AUDIO ].setAt( media::Media::Direction::OUT , true);
+        call->d_ptr->m_mIsRecording[ media::Media::Type::VIDEO ].setAt( media::Media::Direction::IN  , true);
+        call->d_ptr->m_mIsRecording[ media::Media::Type::VIDEO ].setAt( media::Media::Direction::OUT , true);
     }
 
     if (!details[ DRing::Call::Details::TIMESTAMP_START ].isEmpty())
@@ -959,10 +959,10 @@ Call::LifeCycleState Call::lifeCycleState() const
 bool Call::isAVRecording() const
 {
    return lifeCycleState() == Call::LifeCycleState::PROGRESS
-      && (d_ptr->m_mIsRecording[ Media::Media::Type::AUDIO ][ Media::Media::Direction::IN  ]
-      ||  d_ptr->m_mIsRecording[ Media::Media::Type::AUDIO ][ Media::Media::Direction::OUT ]
-      ||  d_ptr->m_mIsRecording[ Media::Media::Type::VIDEO ][ Media::Media::Direction::IN  ]
-      ||  d_ptr->m_mIsRecording[ Media::Media::Type::VIDEO ][ Media::Media::Direction::OUT ]);
+      && (d_ptr->m_mIsRecording[ media::Media::Type::AUDIO ][ media::Media::Direction::IN  ]
+      ||  d_ptr->m_mIsRecording[ media::Media::Type::AUDIO ][ media::Media::Direction::OUT ]
+      ||  d_ptr->m_mIsRecording[ media::Media::Type::VIDEO ][ media::Media::Direction::IN  ]
+      ||  d_ptr->m_mIsRecording[ media::Media::Type::VIDEO ][ media::Media::Direction::OUT ]);
 }
 
 ///Get the call account id
@@ -1008,8 +1008,8 @@ void CallPrivate::registerRenderer(Video::Renderer* renderer)
    emit q_ptr->videoStarted(renderer);
 
    //Test logic, this is very weak, but works in a normal scenario
-   for (const auto d : EnumIterator<Media::Media::Direction>())
-      mediaFactory<Media::Video>(d);
+   for (const auto d : EnumIterator<media::Media::Direction>())
+      mediaFactory<media::Video>(d);
 
    connect(renderer, &Video::Renderer::stopped, this, &CallPrivate::videoStopped);
 
@@ -1026,27 +1026,27 @@ void CallPrivate::removeRenderer(Video::Renderer* renderer)
    return;
 }
 
-QList<Media::Media*> Call::media(Media::Media::Type type, Media::Media::Direction direction) const
+QList<media::Media*> Call::media(media::Media::Type type, media::Media::Direction direction) const
 {
    return *(d_ptr->m_mMedias[type][direction]);
 }
 
-bool Call::hasMedia(Media::Media::Type type, Media::Media::Direction direction) const
+bool Call::hasMedia(media::Media::Type type, media::Media::Direction direction) const
 {
    return d_ptr->m_mMedias[type][direction]->size();
 }
 
-bool Call::hasRecording(Media::Media::Type type, Media::Media::Direction direction) const
+bool Call::hasRecording(media::Media::Type type, media::Media::Direction direction) const
 {
    return d_ptr->m_mRecordings[type][direction]->size();
 }
 
-bool Call::isRecording(Media::Media::Type type, Media::Media::Direction direction) const
+bool Call::isRecording(media::Media::Type type, media::Media::Direction direction) const
 {
    return d_ptr->m_mIsRecording[type][direction];
 }
 
-QList<Media::Recording*> Call::recordings(Media::Media::Type type, Media::Media::Direction direction) const
+QList<media::Recording*> Call::recordings(media::Media::Type type, media::Media::Direction direction) const
 {
    //Note that the recording are not Media attributes to avoid keeping "terminated" media
    //for history call.
@@ -1057,13 +1057,13 @@ QList<Media::Recording*> Call::recordings(Media::Media::Type type, Media::Media:
  * An iffecient way to list all media. If this ever become used elsewhere,
  * add caching.
  */
-QList<Media::Media*> Call::allMedia() const
+QList<media::Media*> Call::allMedia() const
 {
-   QList<Media::Media*> ret;
+   QList<media::Media*> ret;
 
-   for (const auto t : EnumIterator<Media::Media::Type>() ) {
-      for (const auto d : EnumIterator<Media::Media::Direction>() ) {
-         foreach(Media::Media* m, *(d_ptr->m_mMedias[t][d]))
+   for (const auto t : EnumIterator<media::Media::Type>() ) {
+      for (const auto d : EnumIterator<media::Media::Direction>() ) {
+         foreach(media::Media* m, *(d_ptr->m_mMedias[t][d]))
             ret << m;
       }
    }
@@ -1095,10 +1095,10 @@ int MediaTypeInference::genId() {
  * now the safeMediaCreator switch is the only place where this would be useful,
  * so there is very little point to do that.
  */
-QHash<int, Media::Media::Type>& MediaTypeInference::typeMap(bool regen) {
+QHash<int, media::Media::Type>& MediaTypeInference::typeMap(bool regen) {
    static bool isInit = false;
-   //Try to map T to Media::Media::Type then use this to retrieve and cast the media
-   static QHash<int, Media::Media::Type> sTypeMap;
+   //Try to map T to media::Media::Type then use this to retrieve and cast the media
+   static QHash<int, media::Media::Type> sTypeMap;
    if (!isInit || regen) {
       isInit = true;
       REGISTER_MEDIA()
@@ -1110,11 +1110,11 @@ QHash<int, Media::Media::Type>& MediaTypeInference::typeMap(bool regen) {
  * Create, register and connect new media to a call.
  */
 template<typename T>
-T* CallPrivate::mediaFactory(Media::Media::Direction dir)
+T* CallPrivate::mediaFactory(media::Media::Direction dir)
 {
    T* m = new T(q_ptr, dir);
    (*m_mMedias[MediaTypeInference::getType<T>()][dir]) << m;
-   const auto cb = [this,m](const Media::Media::State s, const Media::Media::State p) {
+   const auto cb = [this,m](const media::Media::State s, const media::Media::State p) {
       if (m) {
          emit q_ptr->mediaStateChanged(m,s,p);
       }
@@ -1122,7 +1122,7 @@ T* CallPrivate::mediaFactory(Media::Media::Direction dir)
          Q_ASSERT(false);
    };
 
-   connect(m, &Media::Media::stateChanged, cb);
+   connect(m, &media::Media::stateChanged, cb);
    emit q_ptr->mediaAdded(m);
 
    return m;
@@ -1133,18 +1133,18 @@ T* CallPrivate::mediaFactory(Media::Media::Direction dir)
  * do a static cast to re-create the right type. Given how it is using
  * MediaTypeInference, it is safe-ish.
  */
-Media::Media* MediaTypeInference::safeMediaCreator(Call* c, Media::Media::Type t, Media::Media::Direction d)
+media::Media* MediaTypeInference::safeMediaCreator(Call* c, media::Media::Type t, media::Media::Direction d)
 {
    switch(t) {
-      case Media::Media::Type::AUDIO:
-         return c->d_ptr->mediaFactory<Media::Audio>(d);
-      case Media::Media::Type::VIDEO:
-         return c->d_ptr->mediaFactory<Media::Video>(d);
-      case Media::Media::Type::TEXT :
-         return c->d_ptr->mediaFactory<Media::Text>(d);
-      case Media::Media::Type::FILE :
-         return c->d_ptr->mediaFactory<Media::File>(d);
-      case Media::Media::Type::COUNT__:
+      case media::Media::Type::AUDIO:
+         return c->d_ptr->mediaFactory<media::Audio>(d);
+      case media::Media::Type::VIDEO:
+         return c->d_ptr->mediaFactory<media::Video>(d);
+      case media::Media::Type::TEXT :
+         return c->d_ptr->mediaFactory<media::Text>(d);
+      case media::Media::Type::FILE :
+         return c->d_ptr->mediaFactory<media::File>(d);
+      case media::Media::Type::COUNT__:
          break;
    }
    return nullptr;
@@ -1212,14 +1212,14 @@ void CallPrivate::setRecordingPath(const QString& path)
 
    if (!path.isEmpty() && QFile::exists(path)) {
 
-      Media::Recording* rec = LocalRecordingCollection::instance().addFromPath(path);
-      (*m_mRecordings[Media::Media::Type::AUDIO][Media::Media::Direction::IN ]) << rec;
-      (*m_mRecordings[Media::Media::Type::AUDIO][Media::Media::Direction::OUT]) << rec;
+       media::Recording* rec = LocalRecordingCollection::instance().addFromPath(path);
+      (*m_mRecordings[media::Media::Type::AUDIO][media::Media::Direction::IN ]) << rec;
+      (*m_mRecordings[media::Media::Type::AUDIO][media::Media::Direction::OUT]) << rec;
    }
 
    //TODO add a media type attribute to this method
-   /*(*m_mRecordings[Media::Media::Type::VIDEO][Media::Media::Direction::IN ]
-   (*m_mRecordings[Media::Media::Type::VIDEO][Media::Media::Direction::OUT]*/
+   /*(*m_mRecordings[media::Media::Type::VIDEO][media::Media::Direction::IN ]
+   (*m_mRecordings[media::Media::Type::VIDEO][media::Media::Direction::OUT]*/
 }
 
 ///Set peer name
@@ -1477,17 +1477,17 @@ void CallPrivate::changeCurrentState(Call::State newState)
 void CallPrivate::initMedia()
 {
    //Always assume there is an audio media, even if this is untrue
-   for (const auto d : EnumIterator<Media::Media::Direction>())
-      mediaFactory<Media::Audio>(d);
+   for (const auto d : EnumIterator<media::Media::Direction>())
+      mediaFactory<media::Audio>(d);
 }
 
 void CallPrivate::terminateMedia()
 {
    //Delete remaining media
-   for (const auto t : EnumIterator<Media::Media::Type>() ) {
-      for (const auto d : EnumIterator<Media::Media::Direction>() ) {
+   for (const auto t : EnumIterator<media::Media::Type>() ) {
+      for (const auto d : EnumIterator<media::Media::Direction>() ) {
          for (auto m : q_ptr->media(t,d) ) {
-            m << Media::Media::Action::TERMINATE;
+            m << media::Media::Action::TERMINATE;
             m_mMedias[t][d]->removeAll(m);
             //TODO keep the media for history visualization purpose if it has a recording
             delete m;
@@ -1690,7 +1690,7 @@ void CallPrivate::sendProfile()
      * course, this is an ugly hack is while vCard is a standard, using it
      * like this is not. Therefore we use the proprietary PROFILE_VCF MIME.
      */
-    auto t = mediaFactory<Media::Text>(Media::Media::Direction::OUT);
+    auto t = mediaFactory<media::Text>(media::Media::Direction::OUT);
 
     MapStringString details = ConfigurationManager::instance().getAccountDetails(m_Account->id());
     using namespace DRing::Account;
@@ -1928,13 +1928,13 @@ void CallPrivate::peerHoldChanged(bool onPeerHold)
 void CallPrivate::toggleAudioRecord()
 {
    CallManagerInterface & callManager = CallManager::instance();
-   const bool wasRecording = m_mIsRecording[ Media::Media::Type::AUDIO ][Media::Media::Direction::IN];
+   const bool wasRecording = m_mIsRecording[ media::Media::Type::AUDIO ][media::Media::Direction::IN];
    qDebug() << "Setting record " << !wasRecording << " for call. callId : " << q_ptr  << "ConfId:" << q_ptr;
 
    const bool isRec = callManager.toggleRecording(q_ptr->dringId());
 
-   m_mIsRecording[ Media::Media::Type::AUDIO ].setAt( Media::Media::Direction::IN  , isRec);
-   m_mIsRecording[ Media::Media::Type::AUDIO ].setAt( Media::Media::Direction::OUT , isRec);
+   m_mIsRecording[ media::Media::Type::AUDIO ].setAt( media::Media::Direction::IN  , isRec);
+   m_mIsRecording[ media::Media::Type::AUDIO ].setAt( media::Media::Direction::OUT , isRec);
 }
 
 ///Record the call
@@ -1942,13 +1942,13 @@ void CallPrivate::toggleVideoRecord()
 {
    //TODO upgrade once the video recording is implemented
    CallManagerInterface & callManager = CallManager::instance();
-   const bool wasRecording = m_mIsRecording[ Media::Media::Type::VIDEO ][Media::Media::Direction::IN];
+   const bool wasRecording = m_mIsRecording[ media::Media::Type::VIDEO ][media::Media::Direction::IN];
    qDebug() << "Setting record " << !wasRecording << " for call. callId : " << q_ptr  << "ConfId:" << q_ptr;
 
    const bool isRec = callManager.toggleRecording(q_ptr->dringId());
 
-   m_mIsRecording[ Media::Media::Type::VIDEO ].setAt( Media::Media::Direction::IN  , isRec);
-   m_mIsRecording[ Media::Media::Type::VIDEO ].setAt( Media::Media::Direction::OUT , isRec);
+   m_mIsRecording[ media::Media::Type::VIDEO ].setAt( media::Media::Direction::IN  , isRec);
+   m_mIsRecording[ media::Media::Type::VIDEO ].setAt( media::Media::Direction::OUT , isRec);
 }
 
 ///Start the timer
@@ -2266,11 +2266,11 @@ QVariant Call::roleData(int role) const
       case static_cast<int>(Call::Role::DateTime):
          return dateTime();
       case static_cast<int>(Call::Role::HasAVRecording):
-         return d_ptr->m_mRecordings[Media::Media::Type::AUDIO][Media::Media::Direction::IN]->size()
-            + d_ptr->m_mRecordings[Media::Media::Type::AUDIO][Media::Media::Direction::IN]->size() > 0;
+         return d_ptr->m_mRecordings[media::Media::Type::AUDIO][media::Media::Direction::IN]->size()
+            + d_ptr->m_mRecordings[media::Media::Type::AUDIO][media::Media::Direction::IN]->size() > 0;
       case static_cast<int>(Call::Role::IsAVRecording):
-         return d_ptr->m_mIsRecording[Media::Media::Type::AUDIO][Media::Media::Direction::IN]
-            || d_ptr->m_mIsRecording[Media::Media::Type::AUDIO][Media::Media::Direction::IN];
+         return d_ptr->m_mIsRecording[media::Media::Type::AUDIO][media::Media::Direction::IN]
+            || d_ptr->m_mIsRecording[media::Media::Type::AUDIO][media::Media::Direction::IN];
       case static_cast<int>(Call::Role::Filter): {
          QString normStripppedC;
          foreach(QChar char2,(static_cast<int>(direction())+'\n'+roleData(Call::Role::Name).toString()+'\n'+
@@ -2324,9 +2324,9 @@ QVariant Call::roleData(int role) const
       case static_cast<int>(Call::Role::Certificate):
          return QVariant::fromValue(certificate());
       case static_cast<int>(Call::Role::HasAudioRecording):
-         return d_ptr->m_mRecordings[Media::Media::Type::AUDIO][Media::Media::Direction::IN]->size() > 0;
+         return d_ptr->m_mRecordings[media::Media::Type::AUDIO][media::Media::Direction::IN]->size() > 0;
       case static_cast<int>(Call::Role::HasVideoRecording):
-         return d_ptr->m_mRecordings[Media::Media::Type::VIDEO][Media::Media::Direction::IN]->size() > 0;
+         return d_ptr->m_mRecordings[media::Media::Type::VIDEO][media::Media::Direction::IN]->size() > 0;
       case static_cast<int>(Ring::Role::FormattedState):
       case static_cast<int>(Call::Role::HumanStateName):
          return toHumanStateName(state());
diff --git a/src/call.h b/src/call.h
index 67ac7a2045571c713f8b25c09af7869cbc61df90..b5b5ca2814ea46eec096f0e18aea9daf0872165d 100644
--- a/src/call.h
+++ b/src/call.h
@@ -46,7 +46,7 @@ namespace Video {
    class ManagerPrivate;
 }
 
-namespace Media {
+namespace media {
    class Media;
    class Audio;
    class Video;
@@ -89,10 +89,10 @@ public:
    friend class IMConversationManager;
    friend class VideoRendererManager;
    friend class VideoRendererManagerPrivate;
-   friend class Media::Media;
-   friend class Media::Audio;
-   friend class Media::Video;
-   friend class Media::Text;
+   friend class media::Media;
+   friend class media::Audio;
+   friend class media::Video;
+   friend class media::Text;
    friend class MediaTypeInference;
    friend class IMConversationManagerPrivate;
    friend QMimeData* RingMimes::payload(const Call*, const ContactMethod*, const Person*);
@@ -334,13 +334,13 @@ public:
    Q_INVOKABLE QMimeData* mimePayload      (         ) const;
 
    template<typename T>
-   T* firstMedia(Media::Media::Direction direction) const;
-   QList<Media::Recording*> recordings  (Media::Media::Type type, Media::Media::Direction direction) const;
-   QList<Media::Media*>     media       (Media::Media::Type type, Media::Media::Direction direction) const;
-   bool                     hasMedia    (Media::Media::Type type, Media::Media::Direction direction) const;
-   bool                     hasRecording(Media::Media::Type type, Media::Media::Direction direction) const;
-   bool                     isRecording (Media::Media::Type type, Media::Media::Direction direction) const;
-   QList<Media::Media*>     allMedia    (                                                          ) const;
+   T* firstMedia(media::Media::Direction direction) const;
+   QList<media::Recording*> recordings  (media::Media::Type type, media::Media::Direction direction) const;
+   QList<media::Media*>     media       (media::Media::Type type, media::Media::Direction direction) const;
+   bool                     hasMedia    (media::Media::Type type, media::Media::Direction direction) const;
+   bool                     hasRecording(media::Media::Type type, media::Media::Direction direction) const;
+   bool                     isRecording (media::Media::Type type, media::Media::Direction direction) const;
+   QList<media::Media*>     allMedia    (                                                          ) const;
 
    //Automated function
    Q_INVOKABLE Call::State performAction(Call::Action action);
@@ -399,9 +399,9 @@ Q_SIGNALS:
    ///Remove a new video renderer
    void videoStopped(Video::Renderer* renderer); //TODO remove, use the media signals
    ///Notify when a media is added
-   void mediaAdded(Media::Media* media);
+   void mediaAdded(media::Media* media);
    ///Notify when a media state change
-   void mediaStateChanged(Media::Media* media, const Media::Media::State s, const Media::Media::State m);
+   void mediaStateChanged(media::Media* media, const media::Media::State s, const media::Media::State m);
    ///The holding combination has changed
    void holdFlagsChanged(const FlagPack<HoldFlags>& current, const FlagPack<HoldFlags>& previous);
 };
diff --git a/src/call.hpp b/src/call.hpp
index 3d31c1946b42d7b6c2b5964299bd75409ca7123d..08a049baecd2b5218f5401f5a8a592e56cd314b6 100644
--- a/src/call.hpp
+++ b/src/call.hpp
@@ -18,10 +18,10 @@
 
 class LIB_EXPORT MediaTypeInference {
 public:
-   static Media::Media* safeMediaCreator(Call* c, Media::Media::Type t, Media::Media::Direction d);
+   static media::Media* safeMediaCreator(Call* c, media::Media::Type t, media::Media::Direction d);
 
    template<typename T>
-   static inline Media::Media::Type getType() {
+   static inline media::Media::Type getType() {
       const int id = MediaTypeInference::getId<T>();
       return MediaTypeInference::typeMap(!MediaTypeInference::typeMap().contains(id))[id];
    }
@@ -31,25 +31,25 @@ public:
       static int id = genId();
       return id;
    }
-   static QHash<int, Media::Media::Type>& typeMap(bool regen = false);
+   static QHash<int, media::Media::Type>& typeMap(bool regen = false);
 private:
    static int genId();
 };
 
 /**
  * Perform a safe cast of the first media of "T" type
- * @example Media::Audio* audio = call->firstMedia<Media::Audio>(Media::Media::Direction::OUT);
+ * @example Media::Audio* audio = call->firstMedia<media::Audio>(media::Media::Direction::OUT);
  * @return nullptr if none, the media otherwise.
  */
 template<typename T>
-T* Call::firstMedia(Media::Media::Direction direction) const
+T* Call::firstMedia(media::Media::Direction direction) const
 {
-   const Media::Media::Type t = MediaTypeInference::getType<T>();
+   const media::Media::Type t = MediaTypeInference::getType<T>();
 
-   QList<Media::Media*> ms = media(t, direction);
+   QList<media::Media*> ms = media(t, direction);
 
    if (!ms.isEmpty()) {
-      Media::Media* m = ms[0];
+      media::Media* m = ms[0];
       Q_ASSERT(m->type() == t);
 
       return reinterpret_cast<T*>(m);
@@ -63,21 +63,25 @@ T* Call::addOutgoingMedia(bool useExisting)
 {
    #pragma push_macro("OUT")
    #undef OUT
-   T* existing = firstMedia<T>(Media::Media::Direction::OUT);
+   T* existing = firstMedia<T>(media::Media::Direction::OUT);
    if (useExisting && existing)
       return existing;
 
-   Media::Media::Type t = MediaTypeInference::getType<T>();
+   media::Media::Type t = MediaTypeInference::getType<T>();
 
-   return static_cast<T*>(MediaTypeInference::safeMediaCreator(this,t,Media::Media::Direction::OUT));
+   return static_cast<T*>(MediaTypeInference::safeMediaCreator(this,t, media::Media::Direction::OUT));
    #pragma pop_macro("OUT")
 }
 
+#ifdef _MSC_VER
+#define __attribute__(A) /*do nothing*/
+#endif // _MSC_VER
+
 #define REGISTER_MEDIA() __attribute__ ((unused)) static auto forceType = [] {\
-  QHash<int,::Media::Media::Type>& sTypeMap = MediaTypeInference::typeMap(0);\
-  sTypeMap[MediaTypeInference::getId<Media::Audio>()] = ::Media::Media::Type::AUDIO;\
-  sTypeMap[MediaTypeInference::getId<Media::Video>()] = ::Media::Media::Type::VIDEO;\
-  sTypeMap[MediaTypeInference::getId<Media::Text >()] = ::Media::Media::Type::TEXT ;\
-  sTypeMap[MediaTypeInference::getId<Media::File >()] = ::Media::Media::Type::FILE ;\
+  QHash<int,::media::Media::Type>& sTypeMap = MediaTypeInference::typeMap(0);\
+  sTypeMap[MediaTypeInference::getId<media::Audio>()] = ::media::Media::Type::AUDIO;\
+  sTypeMap[MediaTypeInference::getId<media::Video>()] = ::media::Media::Type::VIDEO;\
+  sTypeMap[MediaTypeInference::getId<media::Text >()] = ::media::Media::Type::TEXT ;\
+  sTypeMap[MediaTypeInference::getId<media::File >()] = ::media::Media::Type::FILE ;\
   return 0;\
 }();
diff --git a/src/callmodel.cpp b/src/callmodel.cpp
index e3832c0e84ab4f8aef88637f7aab959df6eb9feb..6c1a093e61c08ceabafd552e272d8541485853e7 100644
--- a/src/callmodel.cpp
+++ b/src/callmodel.cpp
@@ -55,7 +55,11 @@
 #include "call_const.h"
 
 //System
+#ifndef _MSC_VER
 #include <unistd.h>
+#else
+#include "../../daemon/MSVC/unistd.h"
+#endif // !_MSC_VER
 #include <errno.h>
 
 //Private
@@ -477,10 +481,10 @@ Call* CallModelPrivate::addCall2(Call* call, Call* parentCall)
       connect(call,&Call::videoStopped,[this,call](Video::Renderer* r) {
          emit q_ptr->rendererRemoved(call, r);
       });
-      connect(call,&Call::mediaAdded, [this,call](Media::Media* media) {
+      connect(call,&Call::mediaAdded, [this,call](media::Media* media) {
          emit q_ptr->mediaAdded(call,media);
       });
-      connect(call,&Call::mediaStateChanged, [this,call](Media::Media* media, const Media::Media::State s, const Media::Media::State m) {
+      connect(call,&Call::mediaStateChanged, [this,call](media::Media* media, const media::Media::State s, const media::Media::State m) {
          emit q_ptr->mediaStateChanged(call,media,s,m);
       });
 
@@ -1452,10 +1456,10 @@ void CallModelPrivate::slotRecordStateChanged (const QString& callId, bool state
 {
    if (auto call = q_ptr->getCall(callId)) {
 
-      call->d_ptr->m_mIsRecording[ Media::Media::Type::AUDIO ].setAt( Media::Media::Direction::IN  , state);
-      call->d_ptr->m_mIsRecording[ Media::Media::Type::AUDIO ].setAt( Media::Media::Direction::OUT , state);
-      call->d_ptr->m_mIsRecording[ Media::Media::Type::VIDEO ].setAt( Media::Media::Direction::IN  , state);
-      call->d_ptr->m_mIsRecording[ Media::Media::Type::VIDEO ].setAt( Media::Media::Direction::OUT , state);
+      call->d_ptr->m_mIsRecording[ media::Media::Type::AUDIO ].setAt( media::Media::Direction::IN  , state);
+      call->d_ptr->m_mIsRecording[ media::Media::Type::AUDIO ].setAt( media::Media::Direction::OUT , state);
+      call->d_ptr->m_mIsRecording[ media::Media::Type::VIDEO ].setAt( media::Media::Direction::IN  , state);
+      call->d_ptr->m_mIsRecording[ media::Media::Type::VIDEO ].setAt( media::Media::Direction::OUT , state);
 
       emit call->changed();
    }
@@ -1466,11 +1470,11 @@ void CallModelPrivate::slotAudioMuted( const QString& callId, bool state)
    Call* call = q_ptr->getCall(callId);
 
    if (call) {
-      auto a = call->firstMedia<Media::Audio>(Media::Media::Direction::OUT);
+      auto a = call->firstMedia<media::Audio>(media::Media::Direction::OUT);
       if (state)
-         a->Media::d_ptr->muteConfirmed();
+         a->media::Media::d_ptr->muteConfirmed();
       else
-         a->Media::d_ptr->unmuteConfirmed();
+         a->media::Media::d_ptr->unmuteConfirmed();
    }
 }
 
@@ -1479,11 +1483,11 @@ void CallModelPrivate::slotVideoMutex( const QString& callId, bool state)
    Call* call = q_ptr->getCall(callId);
 
    if (call) {
-      auto v = call->firstMedia<Media::Video>(Media::Media::Direction::OUT);
+      auto v = call->firstMedia<media::Video>(media::Media::Direction::OUT);
       if (state)
-         v->Media::d_ptr->muteConfirmed();
+         v->media::Media::d_ptr->muteConfirmed();
       else
-         v->Media::d_ptr->unmuteConfirmed();
+         v->media::Media::d_ptr->unmuteConfirmed();
    }
 }
 
diff --git a/src/callmodel.h b/src/callmodel.h
index 42c46ba000d9423d42f639a07713bbe71340e5cf..92c61c80c65943dcd9c42a574b0053897388223b 100644
--- a/src/callmodel.h
+++ b/src/callmodel.h
@@ -157,10 +157,10 @@ Q_SIGNALS:
    ///Emitted when a new Video::Renderer is removed
    void rendererRemoved         ( Call* call, Video::Renderer* renderer   );
    ///Notify when a media is added
-   void mediaAdded              ( Call* call, Media::Media* media         );
+   void mediaAdded              ( Call* call, media::Media* media         );
    ///Notify when the dial (search) field changed
    void dialNumberChanged       ( Call* call, const QString& entry        );
    ///Notify when a media state change
-   void mediaStateChanged( Call* call, Media::Media* media, const Media::Media::State s, const Media::Media::State m);
+   void mediaStateChanged( Call* call, media::Media* media, const media::Media::State s, const media::Media::State m);
 };
 Q_DECLARE_METATYPE(CallModel*)
diff --git a/src/contactmethod.cpp b/src/contactmethod.cpp
index 345209703f4e1a537744e536fa452ee945fcf8b4..b3a55399cf4c7983942f93d3bd942a4c1417c7ec 100644
--- a/src/contactmethod.cpp
+++ b/src/contactmethod.cpp
@@ -833,10 +833,10 @@ bool ContactMethod::operator==(const ContactMethod& other) const
    return this->d_ptr== other.d_ptr;
 }
 
-Media::TextRecording* ContactMethod::textRecording() const
+media::TextRecording* ContactMethod::textRecording() const
 {
     if (!d_ptr->m_pTextRecording) {
-        d_ptr->m_pTextRecording = Media::RecordingModel::instance().createTextRecording(this);
+        d_ptr->m_pTextRecording = media::RecordingModel::instance().createTextRecording(this);
     }
 
     return d_ptr->m_pTextRecording;
@@ -889,7 +889,7 @@ void ContactMethodPrivate::setCertificate(Certificate* certificate)
       certificate->setContactMethod(q_ptr);
 }
 
-void ContactMethodPrivate::setTextRecording(Media::TextRecording* r)
+void ContactMethodPrivate::setTextRecording(media::TextRecording* r)
 {
    m_pTextRecording = r;
 }
@@ -906,7 +906,7 @@ bool ContactMethod::sendOfflineTextMessage(const QMap<QString,QString>& payloads
    auto id = ConfigurationManager::instance().sendTextMessage(selectedAccount->id()
                                                     ,uri().format(URI::Section::SCHEME|URI::Section::USER_INFO|URI::Section::HOSTNAME)
                                                     ,payloads);
-   txtRecording->d_ptr->insertNewMessage(payloads, this, Media::Media::Direction::OUT, id);
+   txtRecording->d_ptr->insertNewMessage(payloads, this, media::Media::Direction::OUT, id);
    return true;
 }
 
diff --git a/src/contactmethod.h b/src/contactmethod.h
index ef2c1389b9eef91135dd43fafa32c7db758ca074..5502177f1eb63b072734ae4594e3e554e9368bf7 100644
--- a/src/contactmethod.h
+++ b/src/contactmethod.h
@@ -41,7 +41,7 @@ class TemporaryContactMethodPrivate;
 class InstantMessagingModel;
 class Certificate;
 
-namespace Media {
+namespace media {
    class TextRecording;
 }
 
@@ -133,7 +133,7 @@ public:
    QString               uid             () const;
    URI::ProtocolHint     protocolHint    () const;
    QByteArray            sha1            () const;
-   Media::TextRecording* textRecording   () const;
+   media::TextRecording* textRecording   () const;
    bool                  isReachable     () const;
    Certificate*          certificate     () const;
    QString               registeredName  () const;
diff --git a/src/dbus/callmanager.h b/src/dbus/callmanager.h
index b1ff6df8592815807c14a870487f953cad92a66f..4e51083132ea747ade0f45a13f32c4f98de4590d 100644
--- a/src/dbus/callmanager.h
+++ b/src/dbus/callmanager.h
@@ -33,6 +33,6 @@
 namespace CallManager {
 
 ///Singleton to access dbus "CallManager" interface
-CallManagerInterface& LIB_EXPORT instance();
+LIB_EXPORT CallManagerInterface& instance();
 
 }
diff --git a/src/dbus/configurationmanager.h b/src/dbus/configurationmanager.h
index 45cd323da94272472a0d6b18043429b10f7f8859..78842f596bceafe3ba663ff1a9c3d068658efd53 100644
--- a/src/dbus/configurationmanager.h
+++ b/src/dbus/configurationmanager.h
@@ -33,6 +33,6 @@
 namespace ConfigurationManager {
 
 ///Singleton to access the ConfigurationManager dbus interface
-ConfigurationManagerInterface& LIB_EXPORT instance();
+LIB_EXPORT ConfigurationManagerInterface& instance();
 
 }
diff --git a/src/dbus/instancemanager.cpp b/src/dbus/instancemanager.cpp
index 397094dc2117240b1c3114d0c0fb65020c24d6eb..6e27b5889bf28ee86f08c7fb06ea803126b6eb4b 100644
--- a/src/dbus/instancemanager.cpp
+++ b/src/dbus/instancemanager.cpp
@@ -19,7 +19,11 @@
 
 #include "instancemanager.h"
 
-#include <unistd.h>
+#ifndef _MSC_VER
+#include <unistd.h>
+#else
+#include "../../daemon/MSVC/unistd.h"
+#endif // !_MSC_VER
 
 #include "../globalinstances.h"
 #include "../interfaces/dbuserrorhandleri.h"
diff --git a/src/dbus/instancemanager.h b/src/dbus/instancemanager.h
index 80d1b1cab8a4b64d5b5b467d2725a171dbf5d5ba..2a324535899d51f3336dd9e312d89f2dfe73136a 100644
--- a/src/dbus/instancemanager.h
+++ b/src/dbus/instancemanager.h
@@ -32,6 +32,6 @@
 
 namespace InstanceManager {
 
-InstanceManagerInterface& LIB_EXPORT instance();
+LIB_EXPORT InstanceManagerInterface& instance();
 
 }
diff --git a/src/dbus/presencemanager.h b/src/dbus/presencemanager.h
index 64314ca8be2d1ccdcb7dca608305e3941d11bec7..ab08ac5656305f11025a5be472c82df70ab05f82 100644
--- a/src/dbus/presencemanager.h
+++ b/src/dbus/presencemanager.h
@@ -31,6 +31,6 @@
 
 namespace PresenceManager {
 
-PresenceManagerInterface& LIB_EXPORT instance();
+LIB_EXPORT PresenceManagerInterface& instance();
 
 }
diff --git a/src/dbus/videomanager.h b/src/dbus/videomanager.h
index 92c52b42354c8d894e7fb49874fb29652922b802..c6ac81a3b158ba4a1022bb3e3be0b1c929f0a503 100644
--- a/src/dbus/videomanager.h
+++ b/src/dbus/videomanager.h
@@ -32,6 +32,6 @@
 
 namespace VideoManager {
 
-VideoManagerInterface& LIB_EXPORT instance();
+LIB_EXPORT VideoManagerInterface& instance();
 
 }
diff --git a/src/historytimecategorymodel.cpp b/src/historytimecategorymodel.cpp
index 86a59931e219462cc98f8cc4f227c8e5251f9a51..69cf3dc8094873acc33ac26f42cba07eb1ed5fb5 100644
--- a/src/historytimecategorymodel.cpp
+++ b/src/historytimecategorymodel.cpp
@@ -21,6 +21,16 @@
 #include <QtCore/QDate>
 #include <time.h>
 
+#ifdef _MSC_VER
+struct tm *localtime_r(const time_t *_clock, struct tm *_result)
+{
+    struct tm *p = localtime(_clock);
+    if (p)
+        *(_result) = *p;
+    return p;
+}
+#endif
+
 class HistoryTimeCategoryModelPrivate
 {
 public:
diff --git a/src/localhistorycollection.cpp b/src/localhistorycollection.cpp
index 6e87a213fef1de673fcec990fa71f7d2bc91b267..0a679c59d2c5f416428b7e792d723aea32f1b9c0 100644
--- a/src/localhistorycollection.cpp
+++ b/src/localhistorycollection.cpp
@@ -99,8 +99,8 @@ void LocalHistoryEditor::saveCall(QTextStream& stream, const Call* call)
    stream << QString("%1=%2\n").arg(Call::HistoryMapFields::CONTACT_USED    ).arg(false                                   );//TODO
 
    //TODO handle more than one recording
-   if (call->hasRecording(Media::Media::Type::AUDIO,Media::Media::Direction::IN)) {
-      stream << QString("%1=%2\n").arg(Call::HistoryMapFields::RECORDING_PATH  ).arg(((Media::AVRecording*)call->recordings(Media::Media::Type::AUDIO,Media::Media::Direction::IN)[0])->path().path());
+   if (call->hasRecording(media::Media::Type::AUDIO,media::Media::Direction::IN)) {
+      stream << QString("%1=%2\n").arg(Call::HistoryMapFields::RECORDING_PATH  ).arg(((media::AVRecording*)call->recordings(media::Media::Type::AUDIO,media::Media::Direction::IN)[0])->path().path());
    }
 
    if (call->peerContactMethod()->contact()) {
diff --git a/src/localrecordingcollection.cpp b/src/localrecordingcollection.cpp
index d38270cdef2addfc2d9691bf40d63b2ce9c35aaf..e9920add4200c5a5105f245ace1d21b0bfa1f879 100644
--- a/src/localrecordingcollection.cpp
+++ b/src/localrecordingcollection.cpp
@@ -26,23 +26,23 @@
 #include <media/recording.h>
 #include <media/avrecording.h>
 
-class LocalRecordingEditor final : public CollectionEditor<Media::Recording>
+class LocalRecordingEditor final : public CollectionEditor<media::Recording>
 {
 public:
-   LocalRecordingEditor(CollectionMediator<Media::Recording>* m) : CollectionEditor<Media::Recording>(m) {}
-   virtual bool save       ( const Media::Recording* item ) override;
-   virtual bool remove     ( const Media::Recording* item ) override;
-   virtual bool edit       ( Media::Recording*       item ) override;
-   virtual bool addNew     ( Media::Recording*       item ) override;
-   virtual bool addExisting( const Media::Recording* item ) override;
+   LocalRecordingEditor(CollectionMediator<media::Recording>* m) : CollectionEditor<media::Recording>(m) {}
+   virtual bool save       ( const media::Recording* item ) override;
+   virtual bool remove     ( const media::Recording* item ) override;
+   virtual bool edit       (media::Recording*       item ) override;
+   virtual bool addNew     (media::Recording*       item ) override;
+   virtual bool addExisting( const media::Recording* item ) override;
 
 private:
-   virtual QVector<Media::Recording*> items() const override;
+   virtual QVector<media::Recording*> items() const override;
    //Attributes
-   QVector<Media::Recording*> m_lNumbers;
+   QVector<media::Recording*> m_lNumbers;
 };
 
-LocalRecordingCollection::LocalRecordingCollection(CollectionMediator<Media::Recording>* mediator) :
+LocalRecordingCollection::LocalRecordingCollection(CollectionMediator<media::Recording>* mediator) :
    CollectionInterface(new LocalRecordingEditor(mediator))
 {
    load();
@@ -55,43 +55,43 @@ LocalRecordingCollection::~LocalRecordingCollection()
 
 LocalRecordingCollection& LocalRecordingCollection::instance()
 {
-   static auto instance = Media::RecordingModel::instance().addCollection<LocalRecordingCollection>();
+   static auto instance = media::RecordingModel::instance().addCollection<LocalRecordingCollection>();
    return *instance;
 }
 
-bool LocalRecordingEditor::save(const Media::Recording* recording)
+bool LocalRecordingEditor::save(const media::Recording* recording)
 {
    Q_UNUSED(recording)
    return true;
 }
 
-bool LocalRecordingEditor::remove(const Media::Recording* item)
+bool LocalRecordingEditor::remove(const media::Recording* item)
 {
    Q_UNUSED(item)
    //TODO
    return false;
 }
 
-bool LocalRecordingEditor::edit( Media::Recording* item)
+bool LocalRecordingEditor::edit(media::Recording* item)
 {
    Q_UNUSED(item)
    return false;
 }
 
-bool LocalRecordingEditor::addNew( Media::Recording* item)
+bool LocalRecordingEditor::addNew(media::Recording* item)
 {
    addExisting(item);
    return save(item);
 }
 
-bool LocalRecordingEditor::addExisting(const Media::Recording* item)
+bool LocalRecordingEditor::addExisting(const media::Recording* item)
 {
-   m_lNumbers << const_cast<Media::Recording*>(item);
+   m_lNumbers << const_cast<media::Recording*>(item);
    mediator()->addItem(item);
    return false;
 }
 
-QVector<Media::Recording*> LocalRecordingEditor::items() const
+QVector<media::Recording*> LocalRecordingEditor::items() const
 {
    return m_lNumbers;
 }
@@ -148,11 +148,11 @@ QByteArray LocalRecordingCollection::id() const
    return "localrecording";
 }
 
-Media::Recording* LocalRecordingCollection::addFromPath(const QString& path)
+media::Recording* LocalRecordingCollection::addFromPath(const QString& path)
 {
-   Media::AVRecording* rec = new Media::AVRecording();
+    media::AVRecording* rec = new media::AVRecording();
    rec->setPath(path);
 
-   editor<Media::Recording>()->addExisting(rec);
+   editor<media::Recording>()->addExisting(rec);
    return rec;
 }
diff --git a/src/localrecordingcollection.h b/src/localrecordingcollection.h
index 5ac58e75f34768acbe68b97a5dc55596dd6a453a..d81561e1471f2ccec655968b242d6e64a7655095 100644
--- a/src/localrecordingcollection.h
+++ b/src/localrecordingcollection.h
@@ -21,14 +21,14 @@
 #include <typedefs.h>
 #include <collectioneditor.h>
 
-namespace Media {
+namespace media {
    class Recording;
 }
 
 class LIB_EXPORT LocalRecordingCollection : public CollectionInterface
 {
 public:
-   explicit LocalRecordingCollection(CollectionMediator<Media::Recording>* mediator);
+   explicit LocalRecordingCollection(CollectionMediator<media::Recording>* mediator);
    virtual ~LocalRecordingCollection();
 
    virtual bool load  () override;
@@ -44,7 +44,7 @@ public:
    virtual FlagPack<SupportedFeatures> supportedFeatures() const override;
 
    //Mutator
-   Media::Recording* addFromPath(const QString& path);
+   media::Recording* addFromPath(const QString& path);
 
    static LocalRecordingCollection& instance();
 
diff --git a/src/localtextrecordingcollection.cpp b/src/localtextrecordingcollection.cpp
index 1d0f33d27239e7da5a1ff4bd9f82297526142814..c8e57ca5d7acd89e36ed16c4be46171049b2e2ec 100644
--- a/src/localtextrecordingcollection.cpp
+++ b/src/localtextrecordingcollection.cpp
@@ -46,26 +46,26 @@
  * concatenated then hashed in sha1 again.
  */
 
-class LocalTextRecordingEditor final : public CollectionEditor<Media::Recording>
+class LocalTextRecordingEditor final : public CollectionEditor<media::Recording>
 {
 public:
-   LocalTextRecordingEditor(CollectionMediator<Media::Recording>* m) : CollectionEditor<Media::Recording>(m) {}
-   virtual bool save       ( const Media::Recording* item ) override;
-   virtual bool remove     ( const Media::Recording* item ) override;
-   virtual bool edit       ( Media::Recording*       item ) override;
-   virtual bool addNew     ( Media::Recording*       item ) override;
-   virtual bool addExisting( const Media::Recording* item ) override;
+   LocalTextRecordingEditor(CollectionMediator<media::Recording>* m) : CollectionEditor<media::Recording>(m) {}
+   virtual bool save       ( const media::Recording* item ) override;
+   virtual bool remove     ( const media::Recording* item ) override;
+   virtual bool edit       ( media::Recording*       item ) override;
+   virtual bool addNew     ( media::Recording*       item ) override;
+   virtual bool addExisting( const media::Recording* item ) override;
    QString fetch(const QByteArray& sha1);
 
    void clearAll();
 
 private:
-   virtual QVector<Media::Recording*> items() const override;
+   virtual QVector<media::Recording*> items() const override;
    //Attributes
-   QVector<Media::Recording*> m_lNumbers;
+   QVector<media::Recording*> m_lNumbers;
 };
 
-LocalTextRecordingCollection::LocalTextRecordingCollection(CollectionMediator<Media::Recording>* mediator) :
+LocalTextRecordingCollection::LocalTextRecordingCollection(CollectionMediator<media::Recording>* mediator) :
    CollectionInterface(new LocalTextRecordingEditor(mediator))
 {
    load();
@@ -78,14 +78,14 @@ LocalTextRecordingCollection::~LocalTextRecordingCollection()
 
 LocalTextRecordingCollection& LocalTextRecordingCollection::instance()
 {
-   static auto instance = Media::RecordingModel::instance().addCollection<LocalTextRecordingCollection>();
+   static auto instance = media::RecordingModel::instance().addCollection<LocalTextRecordingCollection>();
    return *instance;
 }
 
-bool LocalTextRecordingEditor::save(const Media::Recording* recording)
+bool LocalTextRecordingEditor::save(const media::Recording* recording)
 {
    Q_UNUSED(recording)
-   QHash<QByteArray,QByteArray> ret = static_cast<const Media::TextRecording*>(recording)->d_ptr->toJsons();
+   QHash<QByteArray,QByteArray> ret = static_cast<const media::TextRecording*>(recording)->d_ptr->toJsons();
 
    QDir dir(QStandardPaths::writableLocation(QStandardPaths::DataLocation));
 
@@ -110,36 +110,36 @@ bool LocalTextRecordingEditor::save(const Media::Recording* recording)
 
 void LocalTextRecordingEditor::clearAll()
 {
-    for (Media::Recording *recording : items()) {
-        auto textRecording = qobject_cast<Media::TextRecording*>(recording);
+    for (media::Recording *recording : items()) {
+        auto textRecording = qobject_cast<media::TextRecording*>(recording);
         textRecording->d_ptr->clear();
         save(recording);
     }
 }
 
-bool LocalTextRecordingEditor::remove(const Media::Recording* item)
+bool LocalTextRecordingEditor::remove(const media::Recording* item)
 {
    Q_UNUSED(item)
    //TODO
    return false;
 }
 
-bool LocalTextRecordingEditor::edit( Media::Recording* item)
+bool LocalTextRecordingEditor::edit( media::Recording* item)
 {
    Q_UNUSED(item)
    return false;
 }
 
-bool LocalTextRecordingEditor::addNew( Media::Recording* item)
+bool LocalTextRecordingEditor::addNew( media::Recording* item)
 {
    Q_UNUSED(item)
    addExisting(item);
    return save(item);
 }
 
-bool LocalTextRecordingEditor::addExisting(const Media::Recording* item)
+bool LocalTextRecordingEditor::addExisting(const media::Recording* item)
 {
-   m_lNumbers << const_cast<Media::Recording*>(item);
+   m_lNumbers << const_cast<media::Recording*>(item);
    mediator()->addItem(item);
    return false;
 }
@@ -155,7 +155,7 @@ QString LocalTextRecordingEditor::fetch(const QByteArray& sha1)
    return QString::fromUtf8(file.readAll());
 }
 
-QVector<Media::Recording*> LocalTextRecordingEditor::items() const
+QVector<media::Recording*> LocalTextRecordingEditor::items() const
 {
    return m_lNumbers;
 }
@@ -206,9 +206,9 @@ bool LocalTextRecordingCollection::load()
                 QJsonDocument loadDoc = QJsonDocument::fromJson(content.toUtf8(), &err);
 
                 if (err.error == QJsonParseError::ParseError::NoError) {
-                    Media::TextRecording* r = Media::TextRecording::fromJson({loadDoc.object()}, nullptr, this);
+                    media::TextRecording* r = media::TextRecording::fromJson({loadDoc.object()}, nullptr, this);
 
-                    editor<Media::Recording>()->addExisting(r);
+                    editor<media::Recording>()->addExisting(r);
 
                     // get CMs from recording
                     for (ContactMethod *cm : r->peers()) {
@@ -255,7 +255,7 @@ FlagPack<CollectionInterface::SupportedFeatures> LocalTextRecordingCollection::s
 
 bool LocalTextRecordingCollection::clear()
 {
-    static_cast<LocalTextRecordingEditor *>(editor<Media::Recording>())->clearAll();
+    static_cast<LocalTextRecordingEditor *>(editor<media::Recording>())->clearAll();
 
     QDir dir(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/text");
 
@@ -303,10 +303,10 @@ bool LocalTextRecordingCollection::fetch( const QList<CollectionInterface::Eleme
    return false;
 }
 
-Media::TextRecording* LocalTextRecordingCollection::fetchFor(const ContactMethod* cm)
+media::TextRecording* LocalTextRecordingCollection::fetchFor(const ContactMethod* cm)
 {
    const QByteArray& sha1 = cm->sha1();
-   const QString content = static_cast<LocalTextRecordingEditor*>(editor<Media::Recording>())->fetch(sha1);
+   const QString content = static_cast<LocalTextRecordingEditor*>(editor<media::Recording>())->fetch(sha1);
 
    if (content.isEmpty())
       return nullptr;
@@ -319,19 +319,19 @@ Media::TextRecording* LocalTextRecordingCollection::fetchFor(const ContactMethod
        return nullptr;
    }
 
-   Media::TextRecording* r = Media::TextRecording::fromJson({loadDoc.object()}, cm, this);
+   media::TextRecording* r = media::TextRecording::fromJson({loadDoc.object()}, cm, this);
 
-   editor<Media::Recording>()->addExisting(r);
+   editor<media::Recording>()->addExisting(r);
 
    return r;
 }
 
-Media::TextRecording* LocalTextRecordingCollection::createFor(const ContactMethod* cm)
+media::TextRecording* LocalTextRecordingCollection::createFor(const ContactMethod* cm)
 {
-   Media::TextRecording* r = fetchFor(cm);
+   media::TextRecording* r = fetchFor(cm);
 
    if (!r) {
-      r = new Media::TextRecording();
+      r = new media::TextRecording();
       r->setCollection(this);
       cm->d_ptr->setTextRecording(r);
    }
diff --git a/src/localtextrecordingcollection.h b/src/localtextrecordingcollection.h
index 3334841e7019b001950ce8aa3dca4950cea01d3c..bbf79a7819ff620716c2427d66ac2d2bfd39f592 100644
--- a/src/localtextrecordingcollection.h
+++ b/src/localtextrecordingcollection.h
@@ -22,7 +22,7 @@
 
 #include <typedefs.h>
 
-namespace Media {
+namespace media {
    class Recording;
    class TextRecording;
 }
@@ -30,7 +30,7 @@ namespace Media {
 class LIB_EXPORT LocalTextRecordingCollection : public CollectionInterface
 {
 public:
-   explicit LocalTextRecordingCollection(CollectionMediator<Media::Recording>* mediator);
+   explicit LocalTextRecordingCollection(CollectionMediator<media::Recording>* mediator);
    virtual ~LocalTextRecordingCollection();
 
    virtual bool load  () override;
@@ -47,8 +47,8 @@ public:
    virtual bool listId(std::function<void(const QList<Element>)> callback) const override;
    virtual QList<Element> listId() const override;
 
-   Media::TextRecording* fetchFor (const ContactMethod* cm);
-   Media::TextRecording* createFor(const ContactMethod* cm);
+   media::TextRecording* fetchFor (const ContactMethod* cm);
+   media::TextRecording* createFor(const ContactMethod* cm);
 
    virtual FlagPack<SupportedFeatures> supportedFeatures() const override;
 
diff --git a/src/media/audio.cpp b/src/media/audio.cpp
index 062b26517b932825ea563a93eff82ffb22d3eb5d..a5f6320c9f8412e5e29f1444335fd2f994c37ad9 100644
--- a/src/media/audio.cpp
+++ b/src/media/audio.cpp
@@ -28,29 +28,30 @@ class MediaAudioPrivate
 {
 };
 
-Media::Audio::Audio(Call* parent, const Media::Direction direction) : Media::Media(parent, direction), d_ptr(new MediaAudioPrivate())
+media::Audio::Audio(Call* parent, const media::Media::Direction direction) :
+    media::Media(parent, direction), d_ptr(new MediaAudioPrivate())
 {
    Q_ASSERT(parent);
 }
 
-Media::Media::Type Media::Audio::type()
+media::Media::Type media::Audio::type()
 {
-   return Media::Media::Type::AUDIO;
+   return media::Media::Type::AUDIO;
 }
 
-bool Media::Audio::mute()
+bool media::Audio::mute()
 {
    CallManagerInterface& callManager = CallManager::instance();
-   return callManager.muteLocalMedia(call()->dringId(),DRing::Media::Details::MEDIA_TYPE_AUDIO,true);
+   return callManager.muteLocalMedia(call()->dringId(), DRing::Media::Details::MEDIA_TYPE_AUDIO,true);
 }
 
-bool Media::Audio::unmute()
+bool media::Audio::unmute()
 {
    CallManagerInterface& callManager = CallManager::instance();
-   return callManager.muteLocalMedia(call()->dringId(),DRing::Media::Details::MEDIA_TYPE_AUDIO,false);
+   return callManager.muteLocalMedia(call()->dringId(), DRing::Media::Details::MEDIA_TYPE_AUDIO,false);
 }
 
-Media::Audio::~Audio()
+media::Audio::~Audio()
 {
    delete d_ptr;
 }
\ No newline at end of file
diff --git a/src/media/audio.h b/src/media/audio.h
index cda4843df0c57bc9ca12ed1100ffb6aceed6f709..bce09e058a1327c82050ec8e021f466e343dc5ed 100644
--- a/src/media/audio.h
+++ b/src/media/audio.h
@@ -24,9 +24,9 @@ class MediaAudioPrivate;
 class Call;
 class CallPrivate;
 
-namespace Media {
+namespace media {
 
-class LIB_EXPORT Audio : public Media::Media
+class LIB_EXPORT Audio : public media::Media
 {
    friend class ::CallPrivate;
 public:
diff --git a/src/media/avrecording.cpp b/src/media/avrecording.cpp
index 66a56d12f20d02db7013d8e701b94bb10c955077..9fa4824d75d92c9e441a8ac3b1c2d7a989ae54d2 100644
--- a/src/media/avrecording.cpp
+++ b/src/media/avrecording.cpp
@@ -23,7 +23,7 @@
 //Ring
 #include <callmodel.h>
 
-namespace Media {
+namespace media {
 
 class AVRecordingPrivate {
 public:
@@ -65,12 +65,12 @@ public:
    RecordingPlaybackManager();
 
    //Attributes
-   QList<Media::AVRecording*>         m_lActiveRecordings;
-   QHash<QString,Media::AVRecording*> m_hActiveRecordings;
+   QList<media::AVRecording*>         m_lActiveRecordings;
+   QHash<QString, media::AVRecording*> m_hActiveRecordings;
 
    //Mutator
-   void activateRecording   (Media::AVRecording* r);
-   void desactivateRecording(Media::AVRecording* r);
+   void activateRecording   (media::AVRecording* r);
+   void desactivateRecording(media::AVRecording* r);
 
    //Singleton
    static RecordingPlaybackManager& instance();
@@ -97,29 +97,29 @@ RecordingPlaybackManager& RecordingPlaybackManager::instance()
 }
 
 
-Media::AVRecordingPrivate::AVRecordingPrivate(AVRecording* r) : q_ptr(r),m_Position(0.0),m_Duration(0),m_IsPaused(false),
+media::AVRecordingPrivate::AVRecordingPrivate(AVRecording* r) : q_ptr(r),m_Position(0.0),m_Duration(0),m_IsPaused(false),
 m_Elapsed(0),m_Left(0)
 {
 
 }
 
-Media::AVRecording::AVRecording() : Recording(Recording::Type::AUDIO_VIDEO), d_ptr(new AVRecordingPrivate(this))
+media::AVRecording::AVRecording() : Recording(Recording::Type::AUDIO_VIDEO), d_ptr(new AVRecordingPrivate(this))
 {
 }
 
-Media::AVRecording::~AVRecording()
+media::AVRecording::~AVRecording()
 {
    delete d_ptr;
 }
 
 ///Return this recording path, if any
-QUrl Media::AVRecording::path() const
+QUrl media::AVRecording::path() const
 {
    return d_ptr->m_Path;
 }
 
 ///Get the current playback position (0.0 if not playing)
-Media::AVRecording::Position Media::AVRecording::position() const
+media::AVRecording::Position media::AVRecording::position() const
 {
    return d_ptr->m_Position;
 }
@@ -128,7 +128,7 @@ Media::AVRecording::Position Media::AVRecording::position() const
  * Recording duration (in seconds). This is only available for audio/video
  * recordings and only after playback started.
  */
-int Media::AVRecording::duration() const
+int media::AVRecording::duration() const
 {
    return d_ptr->m_Duration;
 }
@@ -146,31 +146,31 @@ int Media::AVRecording::duration() const
    }
 
 ///Get the a string in format hhh:mm:ss for the time elapsed since the playback started
-QString Media::AVRecording::formattedTimeElapsed() const
+QString media::AVRecording::formattedTimeElapsed() const
 {
    FORMATTED_TIME_MACRO(d_ptr->m_Elapsed);
 }
 
 ///Get the a string in format hhh:mm:ss for the total time of this recording
-QString Media::AVRecording::formattedDuration() const
+QString media::AVRecording::formattedDuration() const
 {
    FORMATTED_TIME_MACRO(d_ptr->m_Duration);
 }
 
 ///Get the a string in format hhh:mm:ss for the time elapsed before the playback end
-QString Media::AVRecording::formattedTimeLeft() const
+QString media::AVRecording::formattedTimeLeft() const
 {
    FORMATTED_TIME_MACRO(d_ptr->m_Left);
 }
 #undef FORMATTED_TIME_MACRO
 
-void Media::AVRecording::setPath(const QUrl& path)
+void media::AVRecording::setPath(const QUrl& path)
 {
    d_ptr->m_Path = path;
 }
 
 ///Play (or resume) the playback
-void Media::AVRecording::play()
+void media::AVRecording::play()
 {
    RecordingPlaybackManager::instance().activateRecording(this);
 
@@ -186,7 +186,7 @@ void Media::AVRecording::play()
 }
 
 ///Stop the playback, cancel any pause point
-void Media::AVRecording::stop()
+void media::AVRecording::stop()
 {
    CallManagerInterface& callManager = CallManager::instance();
    Q_NOREPLY callManager.stopRecordedFilePlayback();
@@ -197,7 +197,7 @@ void Media::AVRecording::stop()
 }
 
 ///Pause (or resume)
-void Media::AVRecording::pause()
+void media::AVRecording::pause()
 {
    if (d_ptr->m_IsPaused) {
       play();
@@ -213,20 +213,20 @@ void Media::AVRecording::pause()
  * @note only available during playback
  * @args pos The position, in percent
  */
-void Media::AVRecording::seek(AVRecording::Position pos)
+void media::AVRecording::seek(AVRecording::Position pos)
 {
    CallManagerInterface& callManager = CallManager::instance();
    Q_NOREPLY callManager.recordPlaybackSeek(pos);
 }
 
 ///Move the playback position to the origin
-void Media::AVRecording::reset()
+void media::AVRecording::reset()
 {
    seek(0.0);
 }
 
 ///Update all internal playback metadatas
-void Media::AVRecordingPrivate::notifySeek(int position, int size)
+void media::AVRecordingPrivate::notifySeek(int position, int size)
 {
    const int oldElapsed  = m_Elapsed ;
    const int oldDuration = m_Duration;
@@ -258,7 +258,7 @@ void RecordingPlaybackManager::slotRecordPlaybackFilepath(const QString& callID,
 ///Callback when a recording stop
 void RecordingPlaybackManager::slotRecordPlaybackStopped(const QString& filepath)
 {
-   Media::AVRecording* r = m_hActiveRecordings[filepath];
+    media::AVRecording* r = m_hActiveRecordings[filepath];
    if (r) {
       desactivateRecording(r);
    }
@@ -267,7 +267,7 @@ void RecordingPlaybackManager::slotRecordPlaybackStopped(const QString& filepath
 ///Callback when a recording position changed
 void RecordingPlaybackManager::slotUpdatePlaybackScale(const QString& filepath, int position, int size)
 {
-   Media::AVRecording* r = m_hActiveRecordings[filepath];
+    media::AVRecording* r = m_hActiveRecordings[filepath];
 
    if (r) {
       r->d_ptr->notifySeek(position, size);
@@ -277,14 +277,14 @@ void RecordingPlaybackManager::slotUpdatePlaybackScale(const QString& filepath,
 }
 
 ///To avoid having to keep a list of all recording, manage a small active recording list
-void RecordingPlaybackManager::activateRecording(Media::AVRecording* r)
+void RecordingPlaybackManager::activateRecording(media::AVRecording* r)
 {
    m_lActiveRecordings << r;
    m_hActiveRecordings[r->path().path()] = r;
 }
 
 ///To avoid having to keep a list of all recording, manage a small active recording list
-void RecordingPlaybackManager::desactivateRecording(Media::AVRecording* r)
+void RecordingPlaybackManager::desactivateRecording(media::AVRecording* r)
 {
    m_lActiveRecordings.removeAll(r);
    m_hActiveRecordings.remove(m_hActiveRecordings.key(r));
diff --git a/src/media/avrecording.h b/src/media/avrecording.h
index f5b70983703c00b9a7aca3dba21cc8f0acc54740..91c3de1fd399ce9cbb1f8c52b9909ad6d6213a61 100644
--- a/src/media/avrecording.h
+++ b/src/media/avrecording.h
@@ -21,7 +21,7 @@
 
 #include <QtCore/QUrl>
 
-namespace Media {
+namespace media {
 
 class AVRecordingPrivate;
 
diff --git a/src/media/file.cpp b/src/media/file.cpp
index c62d5a5551c5e9f7a30a38d37d7df6282cd2501c..7024bbbd6ce6623158dce2992803662736f5cc49 100644
--- a/src/media/file.cpp
+++ b/src/media/file.cpp
@@ -28,17 +28,17 @@ class MediaFilePrivate
 {
 };
 
-Media::File::File(Call* parent, const Media::Direction direction) : Media::Media(parent, direction), d_ptr(new MediaFilePrivate())
+media::File::File(Call* parent, const Media::Direction direction) : media::Media(parent, direction), d_ptr(new MediaFilePrivate())
 {
    Q_ASSERT(parent);
 }
 
-Media::Media::Type Media::File::type()
+media::Media::Type media::File::type()
 {
-   return Media::Media::Type::FILE;
+   return media::Media::Type::FILE;
 }
 
-Media::File::~File()
+media::File::~File()
 {
    delete d_ptr;
 }
\ No newline at end of file
diff --git a/src/media/file.h b/src/media/file.h
index cc52a3a014429a097f677f946558416e4ca110d4..e12241ee65ce7cee119e533b6b142c21853f2990 100644
--- a/src/media/file.h
+++ b/src/media/file.h
@@ -24,9 +24,9 @@ class MediaFilePrivate;
 class Call;
 class CallPrivate;
 
-namespace Media {
+namespace media {
 
-class LIB_EXPORT File : public Media::Media
+class LIB_EXPORT File : public media::Media
 {
    friend class ::CallPrivate;
 public:
diff --git a/src/media/media.cpp b/src/media/media.cpp
index df60f04618fd721baa17cb7b0954297262689be6..4d85826dec96d3a977440a3731e485841a243228 100644
--- a/src/media/media.cpp
+++ b/src/media/media.cpp
@@ -20,7 +20,7 @@
 #include "../private/media_p.h"
 #include <call.h>
 
-const Matrix2D<Media::Media::State, Media::Media::Action, bool> Media::MediaPrivate::m_mValidTransitions ={{
+const Matrix2D<media::Media::State, media::Media::Action, bool> media::MediaPrivate::m_mValidTransitions ={{
    /*                MUTE   UNMUTE  TERMINATE */
    /* ACTIVE   */ {{ true  , true  , true     }},
    /* MUTED    */ {{ true  , true  , true     }},
@@ -30,7 +30,7 @@ const Matrix2D<Media::Media::State, Media::Media::Action, bool> Media::MediaPriv
 
 //Use the Media::MediaPrivate wrapper to avoid vtable issues
 #define MEDF &MediaPrivate
-const Matrix2D<Media::Media::State, Media::Media::Action, Media::MediaTransitionFct> Media::MediaPrivate::m_mCallbacks ={{
+const Matrix2D<media::Media::State, media::Media::Action, media::MediaTransitionFct> media::MediaPrivate::m_mCallbacks ={{
    /*                     MUTE           UNMUTE         TERMINATE     */
    /* ACTIVE   */ {{ MEDF::mute    , MEDF::nothing , MEDF::terminate }},
    /* MUTED    */ {{ MEDF::nothing , MEDF::unmute  , MEDF::terminate }},
@@ -39,22 +39,23 @@ const Matrix2D<Media::Media::State, Media::Media::Action, Media::MediaTransition
 }};
 #undef MEDF
 
-namespace Media {
+namespace media {
 
 MediaPrivate::MediaPrivate(Media* parent) :
- m_State(Media::Media::State::ACTIVE),m_pCall(nullptr),q_ptr(parent),m_Direction(Media::Direction::OUT)
+ m_State(media::Media::State::ACTIVE),m_pCall(nullptr),q_ptr(parent),m_Direction(Media::Direction::OUT)
 {
 
 }
 
-Media::Media(Call* parent, const Direction dir) : QObject(parent), d_ptr(new MediaPrivate(this))
+media::Media::Media(Call* parent, const media::Media::Direction dir) :
+    QObject(parent), d_ptr(new MediaPrivate(this))
 {
    Q_ASSERT(parent);
    d_ptr->m_pCall = parent;
    d_ptr->m_Direction = dir;
 }
 
-Media::~Media()
+media::Media::~Media()
 {
    delete d_ptr;
 }
@@ -68,59 +69,59 @@ Media::~Media()
  *
  * @return if the operation has already failed
  */
-bool Media::Media::mute()
+bool media::Media::mute()
 {
    return false;
 }
 
-bool Media::Media::unmute()
+bool media::Media::unmute()
 {
    return false;
 }
 
-bool Media::Media::terminate()
+bool media::Media::terminate()
 {
    return false;
 }
 
-bool Media::MediaPrivate::mute()
+bool media::MediaPrivate::mute()
 {
    return q_ptr->mute();
 }
 
-bool Media::MediaPrivate::unmute()
+bool media::MediaPrivate::unmute()
 {
    return q_ptr->unmute();
 }
 
-bool Media::MediaPrivate::terminate()
+bool media::MediaPrivate::terminate()
 {
    return q_ptr->terminate();
 }
 
-bool Media::MediaPrivate::nothing()
+bool media::MediaPrivate::nothing()
 {
    return true;
 }
 
-Call* Media::Media::call() const
+Call* media::Media::call() const
 {
    return d_ptr->m_pCall;
 }
 
-Media::Media::Direction Media::Media::direction() const
+media::Media::Direction media::Media::direction() const
 {
    return d_ptr->m_Direction;
 }
 
-Media::Media::State Media::Media::state() const
+media::Media::State media::Media::state() const
 {
    return d_ptr->m_State;
 }
 
-bool Media::Media::performAction(const Media::Media::Action action)
+bool media::Media::performAction(const media::Media::Action action)
 {
-   const Media::Media::State s = d_ptr->m_State;
+   const media::Media::State s = d_ptr->m_State;
 
    //TODO implement a state machine
    const bool ret = (d_ptr->*(d_ptr->m_mCallbacks)[d_ptr->m_State][action])();
@@ -132,34 +133,34 @@ bool Media::Media::performAction(const Media::Media::Action action)
    return ret;
 }
 
-Media::Media* operator<<(Media::Media* m, Media::Media::Action a)
+media::Media* operator<<(media::Media* m, media::Media::Action a)
 {
    m->performAction(a);
    return m;
 }
 
-void Media::MediaPrivate::muteConfirmed()
+void media::MediaPrivate::muteConfirmed()
 {
    const auto ll = m_State;
-   m_State = Media::Media::State::MUTED;
+   m_State = media::Media::State::MUTED;
    emit q_ptr->stateChanged(m_State, ll);
 }
 
-void Media::MediaPrivate::unmuteConfirmed()
+void media::MediaPrivate::unmuteConfirmed()
 {
    const auto ll = m_State;
    switch(q_ptr->type()) {
-      case Media::Media::Type::AUDIO:
-      case Media::Media::Type::VIDEO:
-      case Media::Media::Type::FILE:
-         m_State = Media::Media::State::ACTIVE;
+      case media::Media::Type::AUDIO:
+      case media::Media::Type::VIDEO:
+      case media::Media::Type::FILE:
+         m_State = media::Media::State::ACTIVE;
          emit q_ptr->stateChanged(m_State, ll);
          break;
-      case Media::Media::Type::TEXT:
-         m_State = Media::Media::State::IDLE;
+      case media::Media::Type::TEXT:
+         m_State = media::Media::State::IDLE;
          emit q_ptr->stateChanged(m_State, ll);
          break;
-      case Media::Media::Type::COUNT__:
+      case media::Media::Type::COUNT__:
          break;
    };
 }
diff --git a/src/media/media.h b/src/media/media.h
index 3570e50e3e3d82ae40cd68d1e6340869265ee3a5..5f4ef3e4d30a6d15be0298e5e8e8d5744d03e28c 100644
--- a/src/media/media.h
+++ b/src/media/media.h
@@ -24,11 +24,11 @@
 class Call;
 class CallModelPrivate;
 
-namespace Media {
+namespace media {
    class MediaPrivate;
 }
 
-namespace Media {
+namespace media {
 
 class LIB_EXPORT Media : public QObject
 {
@@ -76,7 +76,7 @@ public:
    Direction direction() const;
 
    //Getters
-   Media::Media::State state() const;
+   media::Media::State state() const;
    bool performAction(const Media::Action);
 
    //TODO add an abstract history getter with specialisation per media
@@ -101,6 +101,6 @@ private:
 };
 
 }
-Q_DECLARE_METATYPE(Media::Media::Direction)
+Q_DECLARE_METATYPE(media::Media::Direction)
 
-Media::Media* operator<<(Media::Media* m, Media::Media::Action a);
+media::Media* operator<<(media::Media* m, media::Media::Action a);
diff --git a/src/media/recording.cpp b/src/media/recording.cpp
index 96bea41157a01a9ea70540834758831da060fa76..24f4602d373e358740cea348e3041f823b6bcdca 100644
--- a/src/media/recording.cpp
+++ b/src/media/recording.cpp
@@ -17,7 +17,7 @@
  ***************************************************************************/
 #include "recording.h"
 
-namespace Media {
+namespace media {
 
 class RecordingPrivate {
 public:
@@ -49,17 +49,17 @@ Recording::~Recording()
 } //Media::
 
 ///Return this Recording type
-Media::Recording::Type Media::Recording::type() const
+media::Recording::Type media::Recording::type() const
 {
    return d_ptr->m_Type;
 }
 
-Call* Media::Recording::call() const
+Call* media::Recording::call() const
 {
    return d_ptr->m_pCall;
 }
 
-void Media::Recording::setCall(Call* call)
+void media::Recording::setCall(Call* call)
 {
    d_ptr->m_pCall = call;
 }
diff --git a/src/media/recording.h b/src/media/recording.h
index 8938dc8ab5393d18d1ed5c80a78f8f13fc90cfd4..201532c79f5af713c55662bcbb48fb717ea28832 100644
--- a/src/media/recording.h
+++ b/src/media/recording.h
@@ -25,7 +25,7 @@
 class RecordingPlaybackManager;
 class Call;
 
-namespace Media {
+namespace media {
 
 class RecordingPrivate;
 
diff --git a/src/media/recordingmodel.cpp b/src/media/recordingmodel.cpp
index 5d072dc8ec0ff33a9b50498d7ff79b862f865f2a..aad7b269183387929a5b078db471d05ee175f413 100644
--- a/src/media/recordingmodel.cpp
+++ b/src/media/recordingmodel.cpp
@@ -47,7 +47,7 @@ struct RecordingNode final
    RecordingNode::Type     m_Type     ;
    int                     m_Index    ;
    QString                 m_CatName  ;
-   Media::Recording*       m_pRec     ;
+   media::Recording*       m_pRec     ;
    QVector<RecordingNode*> m_lChildren;
    RecordingNode*          m_pParent  ;
 
@@ -57,7 +57,7 @@ class RecordingModelPrivate final : public QObject
 {
    Q_OBJECT
 public:
-   explicit RecordingModelPrivate(Media::RecordingModel* parent);
+   explicit RecordingModelPrivate(media::RecordingModel* parent);
    ~RecordingModelPrivate();
 
    //Attributes
@@ -69,11 +69,11 @@ public:
 
    //RecordingNode*                 m_pFiles     ; //TODO uncomment when implemented in DRing
 
-   void forwardInsertion(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction);
+   void forwardInsertion(const QMap<QString,QString>& message, ContactMethod* cm, media::Media::Direction direction);
    void updateUnreadCount(const int count);
 
 private:
-   Media::RecordingModel* q_ptr;
+    media::RecordingModel* q_ptr;
 };
 
 RecordingNode::RecordingNode(RecordingNode::Type type) :
@@ -88,7 +88,7 @@ RecordingNode::~RecordingNode()
       delete c;
 }
 
-RecordingModelPrivate::RecordingModelPrivate(Media::RecordingModel* parent) : q_ptr(parent),m_pText(nullptr),
+RecordingModelPrivate::RecordingModelPrivate(media::RecordingModel* parent) : q_ptr(parent),m_pText(nullptr),
 m_pAudioVideo(nullptr)/*,m_pFiles(nullptr)*/
 {
 
@@ -106,11 +106,11 @@ RecordingModelPrivate::~RecordingModelPrivate()
       delete m_pAudioVideo;
 }
 
-void RecordingModelPrivate::forwardInsertion(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction)
+void RecordingModelPrivate::forwardInsertion(const QMap<QString,QString>& message, ContactMethod* cm, media::Media::Direction direction)
 {
    Q_UNUSED(message)
    Q_UNUSED(direction)
-   emit q_ptr->newTextMessage(static_cast<Media::TextRecording*>(sender()), cm);
+   emit q_ptr->newTextMessage(static_cast<media::TextRecording*>(sender()), cm);
 }
 
 void RecordingModelPrivate::updateUnreadCount(const int count)
@@ -122,17 +122,17 @@ void RecordingModelPrivate::updateUnreadCount(const int count)
     emit q_ptr->unreadMessagesCountChanged(m_UnreadCount);
 }
 
-Media::RecordingModel::~RecordingModel()
+media::RecordingModel::~RecordingModel()
 {
    delete d_ptr;
 }
 
-Media::RecordingModel::RecordingModel(QObject* parent) : QAbstractItemModel(parent), CollectionManagerInterface<Recording>(this),
+media::RecordingModel::RecordingModel(QObject* parent) : QAbstractItemModel(parent), CollectionManagerInterface<Recording>(this),
 d_ptr(new RecordingModelPrivate(this))
 {
    setObjectName("RecordingModel");
 
-   d_ptr->m_pTextRecordingCollection = addCollection<LocalTextRecordingCollection>();
+   d_ptr->m_pTextRecordingCollection = addCollection<LocalTextRecordingCollection>(LoadOptions::NONE);
 
    d_ptr->m_pTextRecordingCollection->listId([](const QList<CollectionInterface::Element>& e) {
       //TODO
@@ -140,13 +140,13 @@ d_ptr(new RecordingModelPrivate(this))
    });
 }
 
-Media::RecordingModel& Media::RecordingModel::instance()
+media::RecordingModel& media::RecordingModel::instance()
 {
     static auto instance = new RecordingModel(QCoreApplication::instance());
     return *instance;
 }
 
-QHash<int,QByteArray> Media::RecordingModel::roleNames() const
+QHash<int,QByteArray> media::RecordingModel::roleNames() const
 {
    static QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
    /*static bool initRoles = false;
@@ -157,7 +157,7 @@ QHash<int,QByteArray> Media::RecordingModel::roleNames() const
 }
 
 //Do nothing
-bool Media::RecordingModel::setData( const QModelIndex& index, const QVariant &value, int role)
+bool media::RecordingModel::setData( const QModelIndex& index, const QVariant &value, int role)
 {
    Q_UNUSED(index)
    Q_UNUSED(value)
@@ -166,7 +166,7 @@ bool Media::RecordingModel::setData( const QModelIndex& index, const QVariant &v
 }
 
 ///Get bookmark model data RecordingNode::Type and Call::Role
-QVariant Media::RecordingModel::data( const QModelIndex& index, int role) const
+QVariant media::RecordingModel::data( const QModelIndex& index, int role) const
 {
    if (!index.isValid())
       return QVariant();
@@ -182,7 +182,7 @@ QVariant Media::RecordingModel::data( const QModelIndex& index, int role) const
 }
 
 ///Get header data
-QVariant Media::RecordingModel::headerData(int section, Qt::Orientation orientation, int role) const
+QVariant media::RecordingModel::headerData(int section, Qt::Orientation orientation, int role) const
 {
    Q_UNUSED(section)
    if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
@@ -191,7 +191,7 @@ QVariant Media::RecordingModel::headerData(int section, Qt::Orientation orientat
 }
 
 ///Get the number of child of "parent"
-int Media::RecordingModel::rowCount( const QModelIndex& parent ) const
+int media::RecordingModel::rowCount( const QModelIndex& parent ) const
 {
    if (!parent.isValid())
       return d_ptr->m_lCategories.size();
@@ -201,7 +201,7 @@ int Media::RecordingModel::rowCount( const QModelIndex& parent ) const
    }
 }
 
-Qt::ItemFlags Media::RecordingModel::flags( const QModelIndex& index ) const
+Qt::ItemFlags media::RecordingModel::flags( const QModelIndex& index ) const
 {
    if (!index.isValid())
       return Qt::NoItemFlags;
@@ -210,14 +210,14 @@ Qt::ItemFlags Media::RecordingModel::flags( const QModelIndex& index ) const
 }
 
 ///There is only 1 column
-int Media::RecordingModel::columnCount ( const QModelIndex& parent) const
+int media::RecordingModel::columnCount ( const QModelIndex& parent) const
 {
    Q_UNUSED(parent)
    return 1;
 }
 
 ///Get the bookmark parent
-QModelIndex Media::RecordingModel::parent( const QModelIndex& idx) const
+QModelIndex media::RecordingModel::parent( const QModelIndex& idx) const
 {
    if (!idx.isValid())
       return QModelIndex();
@@ -236,7 +236,7 @@ QModelIndex Media::RecordingModel::parent( const QModelIndex& idx) const
 } //parent
 
 ///Get the index
-QModelIndex Media::RecordingModel::index(int row, int column, const QModelIndex& parent) const
+QModelIndex media::RecordingModel::index(int row, int column, const QModelIndex& parent) const
 {
    if (column || (!parent.isValid() && row >= d_ptr->m_lCategories.size()))
       return QModelIndex();
@@ -249,7 +249,7 @@ QModelIndex Media::RecordingModel::index(int row, int column, const QModelIndex&
    return createIndex(row,0,modelItem->m_lChildren[row]);
 }
 
-bool Media::RecordingModel::addItemCallback(const Recording* item)
+bool media::RecordingModel::addItemCallback(const Recording* item)
 {
    Q_UNUSED(item)
 
@@ -305,13 +305,13 @@ bool Media::RecordingModel::addItemCallback(const Recording* item)
    return false;
 }
 
-bool Media::RecordingModel::removeItemCallback(const Recording* item)
+bool media::RecordingModel::removeItemCallback(const Recording* item)
 {
    Q_UNUSED(item)
    return false;
 }
 
-bool Media::RecordingModel::clearAllCollections() const
+bool media::RecordingModel::clearAllCollections() const
 {
     foreach (CollectionInterface* backend, collections(CollectionInterface::SupportedFeatures::CLEAR)) {
         backend->clear();
@@ -320,53 +320,53 @@ bool Media::RecordingModel::clearAllCollections() const
 }
 
 ///Deletes all recordings (which are possible to delete) and clears model
-void Media::RecordingModel::clear()
+void media::RecordingModel::clear()
 {
     beginResetModel();
     clearAllCollections();
     endResetModel();
 }
 
-void Media::RecordingModel::collectionAddedCallback(CollectionInterface* backend)
+void media::RecordingModel::collectionAddedCallback(CollectionInterface* backend)
 {
    Q_UNUSED(backend)
 }
 
 ///Set where the call recordings will be saved
-void Media::RecordingModel::setRecordPath(const QString& path)
+void media::RecordingModel::setRecordPath(const QString& path)
 {
    ConfigurationManagerInterface& configurationManager = ConfigurationManager::instance();
    configurationManager.setRecordPath(path);
 }
 
 ///Return the path where recordings are going to be saved
-QString Media::RecordingModel::recordPath() const
+QString media::RecordingModel::recordPath() const
 {
    ConfigurationManagerInterface& configurationManager = ConfigurationManager::instance();
    return configurationManager.getRecordPath();
 }
 
 ///are all calls recorded by default
-bool Media::RecordingModel::isAlwaysRecording() const
+bool media::RecordingModel::isAlwaysRecording() const
 {
    ConfigurationManagerInterface& configurationManager = ConfigurationManager::instance();
    return configurationManager.getIsAlwaysRecording();
 }
 
 ///Set if all calls needs to be recorded
-void Media::RecordingModel::setAlwaysRecording(bool record)
+void media::RecordingModel::setAlwaysRecording(bool record)
 {
    ConfigurationManagerInterface& configurationManager = ConfigurationManager::instance();
    configurationManager.setIsAlwaysRecording   ( record );
 }
 
-int  Media::RecordingModel::unreadCount() const
+int  media::RecordingModel::unreadCount() const
 {
     return d_ptr->m_UnreadCount;
 }
 
 ///Create or load the recording associated with the ContactMethod cm
-Media::TextRecording* Media::RecordingModel::createTextRecording(const ContactMethod* cm)
+media::TextRecording* media::RecordingModel::createTextRecording(const ContactMethod* cm)
 {
    TextRecording* r = d_ptr->m_pTextRecordingCollection->createFor(cm);
 
diff --git a/src/media/recordingmodel.h b/src/media/recordingmodel.h
index 22d0e060bcc72dcb2483b79c6af374ca80d8e7f4..12ecca65306093c614f66c5a74acfa2e72913260 100644
--- a/src/media/recordingmodel.h
+++ b/src/media/recordingmodel.h
@@ -30,7 +30,7 @@
 class RecordingModelPrivate;
 class ContactMethod;
 
-namespace Media {
+namespace media {
    class Recording;
    class TextRecording;
    class AVRecording;
@@ -87,7 +87,7 @@ public:
    static RecordingModel& instance();
 
 Q_SIGNALS:
-   void newTextMessage(::Media::TextRecording* t, ContactMethod* cm);
+   void newTextMessage(::media::TextRecording* t, ContactMethod* cm);
    void unreadMessagesCountChanged(int unreadCount);
 
 private:
diff --git a/src/media/text.cpp b/src/media/text.cpp
index 965985e7c48471a484599fa6438bcad63b4e256c..c6c2794b4c90c1976f57f447e34685d93a1c6831 100644
--- a/src/media/text.cpp
+++ b/src/media/text.cpp
@@ -59,10 +59,10 @@
 class MediaTextPrivate
 {
 public:
-   MediaTextPrivate(Media::Text* parent);
+   MediaTextPrivate(media::Text* parent);
 
    //Attributes
-   Media::TextRecording* m_pRecording;
+   media::TextRecording* m_pRecording;
    bool                  m_HasChecked;
    QHash<QString,bool>   m_hMimeTypes;
    QStringList           m_lMimeTypes;
@@ -71,7 +71,7 @@ public:
    void updateMimeList(const QMap<QString,QString>& payloads);
 
 private:
-   Media::Text* q_ptr;
+    media::Text* q_ptr;
 };
 
 class ProfileChunk
@@ -163,14 +163,14 @@ void IMConversationManagerPrivate::newMessage(const QString& callId, const QStri
       }
    }
 
-   Media::Text* media = call->firstMedia<Media::Text>(Media::Media::Direction::IN);
+   media::Text* media = call->firstMedia<media::Text>(media::Media::Direction::IN);
 
    if (!media) {
-      media = call->d_ptr->mediaFactory<Media::Text>(Media::Media::Direction::IN);
+      media = call->d_ptr->mediaFactory<media::Text>(media::Media::Direction::IN);
    }
 
    media->recording()->setCall(call);
-   media->recording()->d_ptr->insertNewMessage(message,call->peerContactMethod(),Media::Media::Direction::IN);
+   media->recording()->d_ptr->insertNewMessage(message,call->peerContactMethod(),media::Media::Direction::IN);
 
    media->d_ptr->updateMimeList(message);
 
@@ -181,7 +181,7 @@ void IMConversationManagerPrivate::newAccountMessage(const QString& accountId, c
 {
    if (auto cm = PhoneDirectoryModel::instance().getNumber(from, AccountModel::instance().getById(accountId.toLatin1()))) {
        auto txtRecording = cm->textRecording();
-       txtRecording->d_ptr->insertNewMessage(payloads, cm, Media::Media::Direction::IN);
+       txtRecording->d_ptr->insertNewMessage(payloads, cm, media::Media::Direction::IN);
    }
 }
 
@@ -193,26 +193,26 @@ void IMConversationManagerPrivate::accountMessageStatusChanged(const QString& ac
     }
 }
 
-MediaTextPrivate::MediaTextPrivate(Media::Text* parent) : q_ptr(parent),m_pRecording(nullptr),m_HasChecked(false)
+MediaTextPrivate::MediaTextPrivate(media::Text* parent) : q_ptr(parent),m_pRecording(nullptr),m_HasChecked(false)
 {
 }
 
-Media::Text::Text(Call* parent, const Media::Direction direction) : Media::Media(parent, direction), d_ptr(new MediaTextPrivate(this))
+media::Text::Text(Call* parent, const Media::Direction direction) : media::Media(parent, direction), d_ptr(new MediaTextPrivate(this))
 {
    Q_ASSERT(parent);
 }
 
-Media::Media::Type Media::Text::type()
+media::Media::Type media::Text::type()
 {
-   return Media::Media::Type::TEXT;
+   return media::Media::Type::TEXT;
 }
 
-Media::Text::~Text()
+media::Text::~Text()
 {
    delete d_ptr;
 }
 
-Media::TextRecording* Media::Text::recording() const
+media::TextRecording* media::Text::recording() const
 {
    const bool wasChecked = d_ptr->m_HasChecked;
    d_ptr->m_HasChecked = true;
@@ -239,12 +239,12 @@ Media::TextRecording* Media::Text::recording() const
 }
 
 
-bool Media::Text::hasMimeType( const QString& mimeType ) const
+bool media::Text::hasMimeType( const QString& mimeType ) const
 {
    return d_ptr->m_hMimeTypes.contains(mimeType);
 }
 
-QStringList Media::Text::mimeTypes() const
+QStringList media::Text::mimeTypes() const
 {
    return d_ptr->m_lMimeTypes;
 }
@@ -291,7 +291,7 @@ void MediaTextPrivate::updateMimeList(const QMap<QString,QString>& payloads)
  * "text/enriched" : (RTF) The rich text format used by older applications (like WordPad and OS X TextEdit)
  * "text/html"     : The format used by web browsers
  */
-void Media::Text::send(const QMap<QString,QString>& message, const bool isMixed)
+void media::Text::send(const QMap<QString,QString>& message, const bool isMixed)
 {
    CallManagerInterface& callManager = CallManager::instance();
    Q_NOREPLY callManager.sendTextMessage(call()->dringId(), message, isMixed);
diff --git a/src/media/text.h b/src/media/text.h
index 561e264923ce5bfb803cd7d2157f3acd4b7c6d16..c5f0efb31973384fb82f586b455b7149f2b0cf2b 100644
--- a/src/media/text.h
+++ b/src/media/text.h
@@ -26,11 +26,11 @@ class CallPrivate;
 class InstantMessagingModel;
 class IMConversationManagerPrivate;
 
-namespace Media {
+namespace media {
 
 class TextRecording;
 
-class LIB_EXPORT Text : public Media::Media
+class LIB_EXPORT Text : public media::Media
 {
    Q_OBJECT
    friend class ::CallPrivate;
diff --git a/src/media/textrecording.cpp b/src/media/textrecording.cpp
index 7c46e207441147b78caade28d6a062b7c4bf2e17..3361026fc2ed3b89c18b373ca528728883ee0108 100644
--- a/src/media/textrecording.cpp
+++ b/src/media/textrecording.cpp
@@ -154,15 +154,15 @@ Serializable::Peers* SerializableEntityManager::fromJson(const QJsonObject& json
    return p;
 }
 
-Media::TextRecordingPrivate::TextRecordingPrivate(TextRecording* r) : q_ptr(r),m_pImModel(nullptr),m_pCurrentGroup(nullptr),m_UnreadCount(0)
+media::TextRecordingPrivate::TextRecordingPrivate(TextRecording* r) : q_ptr(r),m_pImModel(nullptr),m_pCurrentGroup(nullptr),m_UnreadCount(0)
 {
 }
 
-Media::TextRecording::TextRecording() : Recording(Recording::Type::TEXT), d_ptr(new TextRecordingPrivate(this))
+media::TextRecording::TextRecording() : Recording(Recording::Type::TEXT), d_ptr(new TextRecordingPrivate(this))
 {
 }
 
-Media::TextRecording::~TextRecording()
+media::TextRecording::~TextRecording()
 {
    delete d_ptr;
 }
@@ -171,7 +171,7 @@ Media::TextRecording::~TextRecording()
  * Updates the message status and potentially the message id, if a new status is set.
  * Returns true if the Message object was modified, false otherwise.
  */
-bool Media::TextRecordingPrivate::updateMessageStatus(Serializable::Message* m, TextRecording::Status newSatus)
+bool media::TextRecordingPrivate::updateMessageStatus(Serializable::Message* m, TextRecording::Status newSatus)
 {
     bool modified = false;
 
@@ -198,7 +198,7 @@ bool Media::TextRecordingPrivate::updateMessageStatus(Serializable::Message* m,
     return modified;
 }
 
-void Media::TextRecordingPrivate::accountMessageStatusChanged(const uint64_t id, DRing::Account::MessageStates status)
+void media::TextRecordingPrivate::accountMessageStatusChanged(const uint64_t id, DRing::Account::MessageStates status)
 {
     if (auto node = m_hPendingMessages.value(id, nullptr)) {
         if (updateMessageStatus(node->m_pMessage, static_cast<TextRecording::Status>(status))) {
@@ -211,18 +211,18 @@ void Media::TextRecordingPrivate::accountMessageStatusChanged(const uint64_t id,
     }
 }
 
-bool Media::TextRecording::hasMimeType(const QString& mimeType) const
+bool media::TextRecording::hasMimeType(const QString& mimeType) const
 {
    return d_ptr->m_hMimeTypes.contains(mimeType);
 }
 
-QStringList Media::TextRecording::mimeTypes() const
+QStringList media::TextRecording::mimeTypes() const
 {
    return d_ptr->m_lMimeTypes;
 }
 
 ///Get the instant messaging model associated with this recording
-QAbstractItemModel* Media::TextRecording::instantMessagingModel() const
+QAbstractItemModel* media::TextRecording::instantMessagingModel() const
 {
    if (!d_ptr->m_pImModel) {
       d_ptr->m_pImModel = new InstantMessagingModel(const_cast<TextRecording*>(this));
@@ -232,7 +232,7 @@ QAbstractItemModel* Media::TextRecording::instantMessagingModel() const
 }
 
 ///Set all messages as read and then save the recording
-void Media::TextRecording::setAllRead()
+void media::TextRecording::setAllRead()
 {
     bool changed = false;
     for(int row = 0; row < d_ptr->m_lNodes.size(); ++row) {
@@ -257,7 +257,7 @@ void Media::TextRecording::setAllRead()
     }
 }
 
-QVector<ContactMethod*> Media::TextRecording::peers() const
+QVector<ContactMethod*> media::TextRecording::peers() const
 {
     QVector<ContactMethod*> cms;
 
@@ -291,7 +291,7 @@ public:
    {
       const QModelIndex srcIdx = sourceModel()->index(source_row, filterKeyColumn(), source_parent);
 
-      return srcIdx.data((int)Media::TextRecording::Role::HasText).toBool();
+      return srcIdx.data((int)media::TextRecording::Role::HasText).toBool();
    }
 };
 
@@ -299,7 +299,7 @@ public:
  * Subset of the instantMessagingModel() with only plain text and HTML
  * messages. This model can be displayed directly to the user.
  */
-QAbstractItemModel* Media::TextRecording::instantTextMessagingModel() const
+QAbstractItemModel* media::TextRecording::instantTextMessagingModel() const
 {
    if (!d_ptr->m_pTextMessagesModel) {
       auto p = new TextProxyModel(const_cast<TextRecording*>(this));
@@ -321,7 +321,7 @@ public:
     {
         const QModelIndex srcIdx = sourceModel()->index(source_row, filterKeyColumn(), source_parent);
 
-        return !srcIdx.data((int)Media::TextRecording::Role::IsRead).toBool();
+        return !srcIdx.data((int)media::TextRecording::Role::IsRead).toBool();
     }
 };
 
@@ -329,7 +329,7 @@ public:
  * Subset of the instantTextMessagingModel() with only unread plain text and HTML
  * messages. This model can be used to get the number of unread messages.
  */
-QAbstractItemModel* Media::TextRecording::unreadInstantTextMessagingModel() const
+QAbstractItemModel* media::TextRecording::unreadInstantTextMessagingModel() const
 {
     if (!d_ptr->m_pUnreadTextMessagesModel) {
        auto p = new UnreadProxyModel(instantTextMessagingModel());
@@ -341,20 +341,20 @@ QAbstractItemModel* Media::TextRecording::unreadInstantTextMessagingModel() cons
 }
 
 
-bool Media::TextRecording::isEmpty() const
+bool media::TextRecording::isEmpty() const
 {
    return !size();
 }
 
-int Media::TextRecording::size() const
+int media::TextRecording::size() const
 {
     return d_ptr->m_lNodes.size();
 }
 
 // Qt convention compat
-int Media::TextRecording::count() const { return size(); }
+int media::TextRecording::count() const { return size(); }
 
-QHash<QByteArray,QByteArray> Media::TextRecordingPrivate::toJsons() const
+QHash<QByteArray,QByteArray> media::TextRecordingPrivate::toJsons() const
 {
    QHash<QByteArray,QByteArray> ret;
    for (Serializable::Peers* p : m_lAssociatedPeers) {
@@ -372,7 +372,7 @@ QHash<QByteArray,QByteArray> Media::TextRecordingPrivate::toJsons() const
    return ret;
 }
 
-Media::TextRecording* Media::TextRecording::fromJson(const QList<QJsonObject>& items, const ContactMethod* cm, CollectionInterface* backend)
+media::TextRecording* media::TextRecording::fromJson(const QList<QJsonObject>& items, const ContactMethod* cm, CollectionInterface* backend)
 {
     TextRecording* t = new TextRecording();
     if (backend)
@@ -448,7 +448,7 @@ Media::TextRecording* Media::TextRecording::fromJson(const QList<QJsonObject>& i
     return t;
 }
 
-void Media::TextRecordingPrivate::insertNewMessage(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction, uint64_t id)
+void media::TextRecordingPrivate::insertNewMessage(const QMap<QString,QString>& message, ContactMethod* cm, media::Media::Direction direction, uint64_t id)
 {
     //Only create it if none was found on the disk
     if (!m_pCurrentGroup) {
@@ -475,7 +475,7 @@ void Media::TextRecordingPrivate::insertNewMessage(const QMap<QString,QString>&
    m->authorSha1= cm->sha1()                       ;
    m->id = id;
 
-   if (direction == Media::Media::Direction::OUT)
+   if (direction == media::Media::Direction::OUT)
       m->isRead = true; // assume outgoing messages are read, since we're sending them
 
    static const int profileSize = QString(RingMimes::PROFILE_VCF).size();
@@ -560,10 +560,10 @@ void Serializable::Message::read (const QJsonObject &json)
    timestamp  = json["timestamp" ].toInt                (                           );
    authorSha1 = json["authorSha1"].toString             (                           );
    isRead     = json["isRead"    ].toBool               (                           );
-   direction  = static_cast<Media::Media::Direction>    ( json["direction"].toInt() );
+   direction  = static_cast<media::Media::Direction>    ( json["direction"].toInt() );
    type       = static_cast<Serializable::Message::Type>( json["type"     ].toInt() );
    id         = json["id"        ].toVariant().value<uint64_t>(                     );
-   deliveryStatus = static_cast<Media::TextRecording::Status>(json["deliveryStatus"].toInt());
+   deliveryStatus = static_cast<media::TextRecording::Status>(json["deliveryStatus"].toInt());
 
    QJsonArray a = json["payloads"].toArray();
    for (int i = 0; i < a.size(); ++i) {
@@ -751,7 +751,7 @@ void Serializable::Peers::write(QJsonObject &json) const
 
 
 ///Constructor
-InstantMessagingModel::InstantMessagingModel(Media::TextRecording* recording) : QAbstractListModel(recording),m_pRecording(recording)
+InstantMessagingModel::InstantMessagingModel(media::TextRecording* recording) : QAbstractListModel(recording),m_pRecording(recording)
 {
 }
 
@@ -766,18 +766,18 @@ QHash<int,QByteArray> InstantMessagingModel::roleNames() const
    static bool initRoles = false;
    if (!initRoles) {
       initRoles = true;
-      roles.insert((int)Media::TextRecording::Role::Direction           , "direction"           );
-      roles.insert((int)Media::TextRecording::Role::AuthorDisplayname   , "authorDisplayname"   );
-      roles.insert((int)Media::TextRecording::Role::AuthorUri           , "authorUri"           );
-      roles.insert((int)Media::TextRecording::Role::AuthorPresenceStatus, "authorPresenceStatus");
-      roles.insert((int)Media::TextRecording::Role::Timestamp           , "timestamp"           );
-      roles.insert((int)Media::TextRecording::Role::IsRead              , "isRead"              );
-      roles.insert((int)Media::TextRecording::Role::FormattedDate       , "formattedDate"       );
-      roles.insert((int)Media::TextRecording::Role::IsStatus            , "isStatus"            );
-      roles.insert((int)Media::TextRecording::Role::DeliveryStatus      , "deliveryStatus"      );
-      roles.insert((int)Media::TextRecording::Role::FormattedHtml       , "formattedHtml"       );
-      roles.insert((int)Media::TextRecording::Role::LinkList            , "linkList"            );
-      roles.insert((int)Media::TextRecording::Role::Id                  , "id"                  );
+      roles.insert((int)media::TextRecording::Role::Direction           , "direction"           );
+      roles.insert((int)media::TextRecording::Role::AuthorDisplayname   , "authorDisplayname"   );
+      roles.insert((int)media::TextRecording::Role::AuthorUri           , "authorUri"           );
+      roles.insert((int)media::TextRecording::Role::AuthorPresenceStatus, "authorPresenceStatus");
+      roles.insert((int)media::TextRecording::Role::Timestamp           , "timestamp"           );
+      roles.insert((int)media::TextRecording::Role::IsRead              , "isRead"              );
+      roles.insert((int)media::TextRecording::Role::FormattedDate       , "formattedDate"       );
+      roles.insert((int)media::TextRecording::Role::IsStatus            , "isStatus"            );
+      roles.insert((int)media::TextRecording::Role::DeliveryStatus      , "deliveryStatus"      );
+      roles.insert((int)media::TextRecording::Role::FormattedHtml       , "formattedHtml"       );
+      roles.insert((int)media::TextRecording::Role::LinkList            , "linkList"            );
+      roles.insert((int)media::TextRecording::Role::Id                  , "id"                  );
    }
    return roles;
 }
@@ -791,13 +791,13 @@ QVariant InstantMessagingModel::data( const QModelIndex& idx, int role) const
          case Qt::DisplayRole:
             return QVariant(n->m_pMessage->m_PlainText);
          case Qt::DecorationRole         :
-            if (n->m_pMessage->direction == Media::Media::Direction::IN)
+            if (n->m_pMessage->direction == media::Media::Direction::IN)
                return GlobalInstances::pixmapManipulator().decorationRole(n->m_pContactMethod);
             else if (m_pRecording->call() && m_pRecording->call()->account()
               && m_pRecording->call()->account()->contactMethod()->contact()) {
                auto cm = m_pRecording->call()->account()->contactMethod();
                return GlobalInstances::pixmapManipulator().decorationRole(cm);
-            } else if (n->m_pMessage->direction == Media::Media::Direction::OUT && n->m_pContactMethod->account()){
+            } else if (n->m_pMessage->direction == media::Media::Direction::OUT && n->m_pContactMethod->account()){
                 return GlobalInstances::pixmapManipulator().decorationRole(n->m_pContactMethod->account());
             } else {
                 /* It's most likely an account that doesn't exist anymore
@@ -806,45 +806,45 @@ QVariant InstantMessagingModel::data( const QModelIndex& idx, int role) const
                 return GlobalInstances::pixmapManipulator().decorationRole((ContactMethod*)nullptr);
             }
             break;
-         case (int)Media::TextRecording::Role::Direction            :
+         case (int)media::TextRecording::Role::Direction            :
             return QVariant::fromValue(n->m_pMessage->direction);
-         case (int)Media::TextRecording::Role::AuthorDisplayname    :
+         case (int)media::TextRecording::Role::AuthorDisplayname    :
          case (int)Ring::Role::Name                                 :
-            if (n->m_pMessage->direction == Media::Media::Direction::IN)
+            if (n->m_pMessage->direction == media::Media::Direction::IN)
                return n->m_pContactMethod->roleData(static_cast<int>(Ring::Role::Name));
             else
                return tr("Me");
-         case (int)Media::TextRecording::Role::AuthorUri            :
+         case (int)media::TextRecording::Role::AuthorUri            :
          case (int)Ring::Role::Number                               :
             return n->m_pContactMethod->uri();
-         case (int)Media::TextRecording::Role::AuthorPresenceStatus :
+         case (int)media::TextRecording::Role::AuthorPresenceStatus :
             // Always consider "self" as present
-            if (n->m_pMessage->direction == Media::Media::Direction::OUT)
+            if (n->m_pMessage->direction == media::Media::Direction::OUT)
                return true;
             else
                return n->m_pContactMethod->contact() ?
                   n->m_pContactMethod->contact()->isPresent() : n->m_pContactMethod->isPresent();
-         case (int)Media::TextRecording::Role::Timestamp            :
+         case (int)media::TextRecording::Role::Timestamp            :
             return (uint)n->m_pMessage->timestamp;
-         case (int)Media::TextRecording::Role::IsRead               :
+         case (int)media::TextRecording::Role::IsRead               :
             return (int)n->m_pMessage->isRead;
-         case (int)Media::TextRecording::Role::FormattedDate        :
+         case (int)media::TextRecording::Role::FormattedDate        :
             return QDateTime::fromTime_t(n->m_pMessage->timestamp).toString();
-         case (int)Media::TextRecording::Role::IsStatus             :
+         case (int)media::TextRecording::Role::IsStatus             :
             return n->m_pMessage->type == Serializable::Message::Type::STATUS;
-         case (int)Media::TextRecording::Role::HTML                 :
+         case (int)media::TextRecording::Role::HTML                 :
             return QVariant(n->m_pMessage->m_HTML);
-         case (int)Media::TextRecording::Role::HasText              :
+         case (int)media::TextRecording::Role::HasText              :
             return n->m_pMessage->m_HasText;
-         case (int)Media::TextRecording::Role::ContactMethod        :
+         case (int)media::TextRecording::Role::ContactMethod        :
             return QVariant::fromValue(n->m_pContactMethod);
-         case (int)Media::TextRecording::Role::DeliveryStatus       :
+         case (int)media::TextRecording::Role::DeliveryStatus       :
             return QVariant::fromValue(n->m_pMessage->deliveryStatus);
-         case (int)Media::TextRecording::Role::FormattedHtml        :
+         case (int)media::TextRecording::Role::FormattedHtml        :
             return QVariant::fromValue(n->m_pMessage->getFormattedHtml());
-         case (int)Media::TextRecording::Role::LinkList             :
+         case (int)media::TextRecording::Role::LinkList             :
             return QVariant::fromValue(n->m_pMessage->m_LinkList);
-         case (int)Media::TextRecording::Role::Id                   :
+         case (int)media::TextRecording::Role::Id                   :
             return QVariant::fromValue(n->m_pMessage->id);
          default:
             break;
@@ -878,7 +878,7 @@ bool InstantMessagingModel::setData(const QModelIndex& idx, const QVariant &valu
 
     ::TextMessageNode* n = m_pRecording->d_ptr->m_lNodes[idx.row()];
     switch (role) {
-        case (int)Media::TextRecording::Role::IsRead               :
+        case (int)media::TextRecording::Role::IsRead               :
             if (n->m_pMessage->isRead != value.toBool()) {
                 n->m_pMessage->isRead = value.toBool();
                 if (n->m_pMessage->m_HasText) {
@@ -913,7 +913,7 @@ void InstantMessagingModel::addRowEnd()
    endInsertRows();
 }
 
-void Media::TextRecordingPrivate::clear()
+void media::TextRecordingPrivate::clear()
 {
     m_pImModel->clear();
 
diff --git a/src/media/textrecording.h b/src/media/textrecording.h
index 40dae9afcdbbef72a2b9ff8f3facc47c3e6e3ddb..acb970114366013cc82da8f68462107c53985bfd 100644
--- a/src/media/textrecording.h
+++ b/src/media/textrecording.h
@@ -31,7 +31,7 @@ class LocalTextRecordingEditor;
 class ContactMethod;
 class InstantMessagingModel;
 
-namespace Media {
+namespace media {
 
 class TextRecordingPrivate;
 class Text;
@@ -99,7 +99,7 @@ public:
    void setAllRead();
 
 Q_SIGNALS:
-   void messageInserted(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction);
+   void messageInserted(const QMap<QString,QString>& message, ContactMethod* cm, media::Media::Direction direction);
    void unreadCountChange(int count);
 
 private:
@@ -109,4 +109,4 @@ private:
 
 }
 
-Q_DECLARE_METATYPE(Media::TextRecording::Status)
+Q_DECLARE_METATYPE(media::TextRecording::Status)
diff --git a/src/media/video.cpp b/src/media/video.cpp
index 747ae7b31ac117c6a704a92b1d02919da8c4a125..9a851998be70ce2dab49559a6272cf7fd036b7f9 100644
--- a/src/media/video.cpp
+++ b/src/media/video.cpp
@@ -31,29 +31,29 @@ public:
     Video::SourceModel *m_pSourceModel = nullptr;
 };
 
-Media::Video::Video(Call* parent, const Media::Direction direction) : Media::Media(parent, direction), d_ptr(new MediaVideoPrivate())
+media::Video::Video(Call* parent, const Media::Direction direction) : media::Media(parent, direction), d_ptr(new MediaVideoPrivate())
 {
    Q_ASSERT(parent);
 }
 
-Media::Media::Type Media::Video::type()
+media::Media::Type media::Video::type()
 {
-   return Media::Media::Type::VIDEO;
+   return media::Media::Type::VIDEO;
 }
 
-bool Media::Video::mute()
+bool media::Video::mute()
 {
    CallManagerInterface& callManager = CallManager::instance();
    return callManager.muteLocalMedia(call()->dringId(),DRing::Media::Details::MEDIA_TYPE_VIDEO,true);
 }
 
-bool Media::Video::unmute()
+bool media::Video::unmute()
 {
    CallManagerInterface& callManager = CallManager::instance();
    return callManager.muteLocalMedia(call()->dringId(),DRing::Media::Details::MEDIA_TYPE_VIDEO,false);
 }
 
-Video::SourceModel* Media::Video::sourceModel() const
+Video::SourceModel* media::Video::sourceModel() const
 {
     if (!d_ptr->m_pSourceModel) {
         d_ptr->m_pSourceModel = new ::Video::SourceModel();
@@ -62,7 +62,7 @@ Video::SourceModel* Media::Video::sourceModel() const
     return d_ptr->m_pSourceModel;
 }
 
-Media::Video::~Video()
+media::Video::~Video()
 {
    delete d_ptr;
 }
diff --git a/src/media/video.h b/src/media/video.h
index a388325c010b7f44e424bb617de143af1d0eeb9d..22109b19c2a29bb9e985c98dc202d3f4dd7f977e 100644
--- a/src/media/video.h
+++ b/src/media/video.h
@@ -29,9 +29,9 @@ class MediaVideoPrivate;
 class Call;
 class CallPrivate;
 
-namespace Media {
+namespace media {
 
-class LIB_EXPORT Video : public Media::Media
+class LIB_EXPORT Video : public media::Media
 {
    friend class ::CallPrivate;
 public:
diff --git a/src/person.cpp b/src/person.cpp
index 5058c701e69371958d7bdd668b46cccde1a1cd55..99c435f147da84d54992db6c4e9f4218670da2ea 100644
--- a/src/person.cpp
+++ b/src/person.cpp
@@ -559,23 +559,23 @@ bool Person::hasBeenCalled() const
  * some ContactMethod level caching need to be implemented and connected to new\
  * recording signals.
  */
-bool Person::hasRecording(Media::Media::Type type, Media::Media::Direction direction) const
+bool Person::hasRecording(media::Media::Type type, media::Media::Direction direction) const
 {
    Q_UNUSED(direction) //TODO implement
 
    switch (type) {
-      case Media::Media::Type::AUDIO:
-      case Media::Media::Type::VIDEO:
+      case media::Media::Type::AUDIO:
+      case media::Media::Type::VIDEO:
          return false; //TODO implement
-      case Media::Media::Type::TEXT:
+      case media::Media::Type::TEXT:
          foreach( ContactMethod* cm, phoneNumbers()) {
             if (cm->textRecording() && !cm->textRecording()->isEmpty())
                return true;
          }
 
          return false;
-      case Media::Media::Type::FILE:
-      case Media::Media::Type::COUNT__:
+      case media::Media::Type::FILE:
+      case media::Media::Type::COUNT__:
          break;
    }
 
diff --git a/src/person.h b/src/person.h
index 96e2f7a2aae2a3731f1d98debd53b1fc90872d26..d8e565c77a0571c7d74dcac585f9f52493f6392a 100644
--- a/src/person.h
+++ b/src/person.h
@@ -158,7 +158,7 @@ public:
    bool isPlaceHolder              () const;
    bool hasBeenCalled              () const;
 
-   bool hasRecording(Media::Media::Type type, Media::Media::Direction direction) const;
+   bool hasRecording(media::Media::Type type, media::Media::Direction direction) const;
 
    //Setters
    void setContactMethods ( ContactMethods           );
diff --git a/src/private/call_p.h b/src/private/call_p.h
index b9ba3183736870c670c702a26a5edcd8138bb112..e66c53b0f897db41d90de276cffadc6e52782564 100644
--- a/src/private/call_p.h
+++ b/src/private/call_p.h
@@ -31,7 +31,6 @@
 //Qt
 class QTimer;
 
-
 //Ring
 class Account;
 class ContactMethod;
@@ -42,7 +41,7 @@ class Certificate;
 class CallPrivate;
 typedef  void (CallPrivate::*function)();
 
-namespace Media {
+namespace media {
    class Media;
    class Recording;
 }
@@ -178,11 +177,11 @@ public:
     */
    static const TypedStateMachine< Call::LifeCycleState , Call::State > metaStateMap;
 
-   Matrix2D<Media::Media::Type, Media::Media::Direction, QList<Media::Media*>* > m_mMedias;
+   Matrix2D<media::Media::Type, media::Media::Direction, QList<media::Media*>* > m_mMedias;
 
-   Matrix2D<Media::Media::Type, Media::Media::Direction, QList<Media::Recording*>* > m_mRecordings;
+   Matrix2D<media::Media::Type, media::Media::Direction, QList<media::Recording*>* > m_mRecordings;
 
-   Matrix2D<Media::Media::Type, Media::Media::Direction, bool > m_mIsRecording;
+   Matrix2D<media::Media::Type, media::Media::Direction, bool > m_mIsRecording;
 
    static const Matrix1D<Call::LifeCycleState,function> m_mLifeCycleStateChanges;
 
@@ -236,7 +235,7 @@ public:
    static MapStringString getCallDetailsCommon(const QString& callId);
    void peerHoldChanged(bool onPeerHold);
    template<typename T>
-   T* mediaFactory(Media::Media::Direction dir);
+   T* mediaFactory(media::Media::Direction dir);
    void updateOutgoingMedia(const MapStringString& details);
 
    //Static getters
diff --git a/src/private/contactmethod_p.h b/src/private/contactmethod_p.h
index 457f851175f474581d776a963674786982217cc2..c81eb4f1bf2435b892e450ea9345b6f7fe050c54 100644
--- a/src/private/contactmethod_p.h
+++ b/src/private/contactmethod_p.h
@@ -43,7 +43,7 @@ public:
    QByteArray         m_Sha1             ;
    ContactMethod::Type  m_Type           ;
    QList<URI>         m_lOtherURIs       ;
-   Media::TextRecording* m_pTextRecording;
+   media::TextRecording* m_pTextRecording;
    Certificate*       m_pCertificate;
    QString            m_RegisteredName   ;
    UsageStatistics    m_UsageStats       ;
@@ -63,7 +63,7 @@ public:
    void registeredNameSet(const QString& registeredName);
 
    //Helpers
-   void setTextRecording(Media::TextRecording* r);
+   void setTextRecording(media::TextRecording* r);
    void setCertificate (Certificate*);
    void setRegisteredName(const QString& registeredName);
 
diff --git a/src/private/imconversationmanagerprivate.h b/src/private/imconversationmanagerprivate.h
index 395265b5517206f546a708ed8959c702e849ccd3..60d8dbbe6da4a8551dcee24a017bbe3417dfe7b0 100644
--- a/src/private/imconversationmanagerprivate.h
+++ b/src/private/imconversationmanagerprivate.h
@@ -24,7 +24,7 @@ class Account;
 class Call;
 class ContactMethod;
 
-namespace Media {
+namespace media {
    class Text;
    class TextRecording;
 }
diff --git a/src/private/media_p.h b/src/private/media_p.h
index 9beabcebaf9226d9929e51d47fcc8fc0beff13db..15ced94c42a4146c0aeaa63baf9446f164f07c73 100644
--- a/src/private/media_p.h
+++ b/src/private/media_p.h
@@ -21,19 +21,19 @@
 #include "private/matrixutils.h"
 
 
-namespace Media {
+namespace media {
 class MediaPrivate;
 
 typedef bool (MediaPrivate::*MediaTransitionFct)();
 
 class MediaPrivate
 {
-   friend class Media::Media;
+   friend class media::Media;
 public:
    MediaPrivate(Media* parent);
 
-   static const Matrix2D<Media::Media::State, Media::Media::Action, bool> m_mValidTransitions;
-   static const Matrix2D<Media::Media::State, Media::Media::Action, MediaTransitionFct> m_mCallbacks;
+   static const Matrix2D<media::Media::State, media::Media::Action, bool> m_mValidTransitions;
+   static const Matrix2D<media::Media::State, media::Media::Action, MediaTransitionFct> m_mCallbacks;
 
    //Actions
    bool mute     ();
@@ -47,9 +47,9 @@ public:
 
 private:
    //Attributes
-   Media::Media::State m_State;
+   media::Media::State m_State;
    Call* m_pCall;
-   Media::Media::Direction m_Direction;
+   media::Media::Direction m_Direction;
 
    Media* q_ptr;
 };
diff --git a/src/private/textrecording_p.h b/src/private/textrecording_p.h
index 558beff13110e95e0e6347044b78f510563b20b2..a910b809086e8824f92bbc5aba548be3b4333f49 100644
--- a/src/private/textrecording_p.h
+++ b/src/private/textrecording_p.h
@@ -34,7 +34,7 @@ struct TextMessageNode;
 class InstantMessagingModel;
 class ContactMethod;
 
-namespace Media {
+namespace media {
    class TextRecording;
 }
 
@@ -69,7 +69,7 @@ public:
    ///The author display name
    QString                 authorSha1;
    ///The direction
-   Media::Media::Direction direction ;
+   media::Media::Direction direction ;
    ///The message Type
    Type                    type      ;
    ///If the message have been read
@@ -79,7 +79,7 @@ public:
    //The token of the message
    uint64_t                id        ;
    //Delivery Status
-   Media::TextRecording::Status deliveryStatus;
+   media::TextRecording::Status deliveryStatus;
 
    static const QRegularExpression m_linkRegex;
 
@@ -155,7 +155,7 @@ private:
 }
 //END Those classes are serializable to JSon
 
-namespace Media {
+namespace media {
 
 /**
  * The Media::Recording private class. This is where the reconstructed
@@ -179,7 +179,7 @@ public:
    QHash<uint64_t, TextMessageNode*> m_hPendingMessages;
 
    //Helper
-   void insertNewMessage(const QMap<QString,QString>& message, ContactMethod* cm, Media::Media::Direction direction, uint64_t id = 0);
+   void insertNewMessage(const QMap<QString,QString>& message, ContactMethod* cm, media::Media::Direction direction, uint64_t id = 0);
    QHash<QByteArray,QByteArray> toJsons() const;
    void accountMessageStatusChanged(const uint64_t id, DRing::Account::MessageStates status);
    bool updateMessageStatus(Serializable::Message* m, TextRecording::Status status);
@@ -235,7 +235,7 @@ class InstantMessagingModel final : public QAbstractListModel
 public:
 
    //Constructor
-   explicit InstantMessagingModel(Media::TextRecording*);
+   explicit InstantMessagingModel(media::TextRecording*);
    virtual ~InstantMessagingModel();
 
    //Abstract model function
@@ -248,7 +248,7 @@ public:
    void clear();
 
    //Attributes
-   Media::TextRecording* m_pRecording;
+   media::TextRecording* m_pRecording;
 
    //Helper
    void addRowBegin();
diff --git a/src/private/useractions.h b/src/private/useractions.h
index 09165cc60805d63bf47a22e2ee079f299865f686..ae832fbbabcc2370717be7333861059bb9c748d5 100644
--- a/src/private/useractions.h
+++ b/src/private/useractions.h
@@ -266,7 +266,7 @@ bool muteAudio(Call* call, bool state)
       qDebug() << "Error : Muting audio when no item selected. Should not happen.";
       return false;
    }
-   auto audioOut = call->firstMedia<Media::Audio>(Media::Media::Direction::OUT);
+   auto audioOut = call->firstMedia<media::Audio>(media::Media::Direction::OUT);
    if (!audioOut) {
       qDebug() << "Error : No audio media for this call";
       return false;
@@ -291,7 +291,7 @@ bool muteVideo(Call* call, bool state)
       qDebug() << "Error : Muting video when no item selected. Should not happen.";
       return false;
    }
-   auto videoOut = call->firstMedia<Media::Video>(Media::Media::Direction::OUT);
+   auto videoOut = call->firstMedia<media::Video>(media::Media::Direction::OUT);
    if (!videoOut) {
       qDebug() << "Error : No video media for this call";
       return false;
diff --git a/src/securityevaluationmodel.cpp b/src/securityevaluationmodel.cpp
index 74973cf5888ef5dfca0e1ee1f9d7039895d00afe..2f5ff7ba5a5ef305edb936178883f07f0b3427ab 100644
--- a/src/securityevaluationmodel.cpp
+++ b/src/securityevaluationmodel.cpp
@@ -243,7 +243,7 @@ private:
    };
 
    ///This model expect a certain size, get each sections size
-   constexpr static const short sizes[] = {
+   constexpr static const int sizes[] = {
       enum_class_size< Certificate             :: Checks                > (),
       enum_class_size< Certificate             :: Checks                > (),
       enum_class_size< SecurityEvaluationModel :: AccountSecurityChecks > (),
@@ -270,7 +270,7 @@ private:
 
 };
 
-constexpr const short CombinaisonProxyModel::sizes[];
+constexpr const int CombinaisonProxyModel::sizes[];
 
 ///Create a callback map for signals to avoid a large switch(){} in the code
 static const Matrix1D<SecurityEvaluationModel::Severity, void(SecurityEvaluationModel::*)()> m_lSignalMap = {{
diff --git a/src/typedefs.h b/src/typedefs.h
index 116e5c8a3f18226155b7795df2ffd7cec52cd772..dd7c383d1755440076cc7d0ee9b6ba74604cfbb3 100644
--- a/src/typedefs.h
+++ b/src/typedefs.h
@@ -73,8 +73,12 @@ template<typename A> constexpr int enum_class_size() {
 #ifdef LRC_IMPORT
 #define LIB_EXPORT Q_DECL_IMPORT
 #else
+#if defined(_MSC_VER)
+#define LIB_EXPORT
+#else
 #define LIB_EXPORT Q_DECL_EXPORT
 #endif
+#endif
 
 //Doesn't work
 #if ((__GNUC_MINOR__ > 8) || (__GNUC_MINOR__ == 8))
@@ -175,7 +179,13 @@ private:
    uint m_Flags;
 };
 
+#ifdef _MSC_VER
+#define DO_PRAGMA(x) /*do nothing*/
+#define __attribute__(A) /*do nothing*/
+#include <ciso646>
+#else
 #define DO_PRAGMA(x) _Pragma (#x)
+#endif // _MSC_VER
 
 //Globally disable the "-Wunused-function" warning for GCC
 //refs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55578
diff --git a/src/useractionmodel.cpp b/src/useractionmodel.cpp
index 96711008d4d34ea0e06813464ad819892f9d9624..5ba9ee1b5e61db63d6e42cf19d5f4f0bbd43a6bd 100644
--- a/src/useractionmodel.cpp
+++ b/src/useractionmodel.cpp
@@ -447,8 +447,8 @@ const Matrix1D< UAM::Action, bool(*)(const Person*)> UserActionModelPrivate::per
    { UAMA::BOOKMARK          , nullptr                                         },
    { UAMA::VIEW_CHAT_HISTORY , P_CB {
       return p->hasRecording(
-        Media::Media::Type::TEXT,
-        Media::Media::Direction::OUT
+        media::Media::Type::TEXT,
+        media::Media::Direction::OUT
       );
    }},
    { UAMA::ADD_CONTACT_METHOD, nullptr                                         },
@@ -705,20 +705,20 @@ void UserActionModelPrivate::updateCheckMask(int& ret, UserActionModel::Action a
          ret += c->state() == Call::State::HOLD? 100 : 1;
          break;
       case UserActionModel::Action::MUTE_AUDIO      : {
-         auto a = c->firstMedia<Media::Audio>(Media::Media::Direction::OUT);
-         ret += a && a->state() == Media::Media::State::MUTED ? 100 : 1;
+         auto a = c->firstMedia<media::Audio>(media::Media::Direction::OUT);
+         ret += a && a->state() == media::Media::State::MUTED ? 100 : 1;
          }
          break;
       case UserActionModel::Action::MUTE_VIDEO      : {
-         auto v = c->firstMedia<Media::Video>(Media::Media::Direction::OUT);
-         ret += v && v->state() == Media::Media::State::MUTED ? 100 : 1;
+         auto v = c->firstMedia<media::Video>(media::Media::Direction::OUT);
+         ret += v && v->state() == media::Media::State::MUTED ? 100 : 1;
          }
          break;
       case UserActionModel::Action::SERVER_TRANSFER :
          ret += c->state() == Call::State::TRANSFERRED? 100 : 1;
          break;
       case UserActionModel::Action::RECORD          :
-         ret += c->isRecording(Media::Media::Type::AUDIO,Media::Media::Direction::OUT) ? 100 : 1;
+         ret += c->isRecording(media::Media::Type::AUDIO,media::Media::Direction::OUT) ? 100 : 1;
          break;
       case UserActionModel::Action::HANGUP          :
          ret += 0;
diff --git a/src/video/device.cpp b/src/video/device.cpp
index 25070eda66850c10238009b8ba946b337714e2ee..790ee623e5418eebdfff26654877a4b17c4e57d5 100644
--- a/src/video/device.cpp
+++ b/src/video/device.cpp
@@ -85,7 +85,6 @@ d_ptr(new VideoDevicePrivate(this))
       });
       chan->d_ptr->m_lValidResolutions = validResolutions;
    }
-   Q_UNUSED(cap)
 }
 
 ///Destructor
diff --git a/src/video/devicemodel.cpp b/src/video/devicemodel.cpp
index ad02599c2b42ff0b3863bde9cd5f6ab2821f6043..17fde4fd013e2321b89baaa53ca1ac390e49a96d 100644
--- a/src/video/devicemodel.cpp
+++ b/src/video/devicemodel.cpp
@@ -137,7 +137,7 @@ void Video::DeviceModel::setActive(const QModelIndex& idx)
       emit currentIndexChanged(idx.row());
 
       //If the only renderer is the preview, reload it
-      if (Video::PreviewManager::instance().isPreviewing() && VideoRendererManager::instance().size() == 1) {
+      if (Video::PreviewManager::instance().isPreviewing() && ::VideoRendererManager::instance().size() == 1) {
          Video::PreviewManager::instance().stopPreview();
          Video::PreviewManager::instance().startPreview();
       }
diff --git a/src/video/previewmanager.cpp b/src/video/previewmanager.cpp
index b7d373f2ffef1dd2493b31b0ef8eca073f028ea3..a9ada6cf8087f63c44874c2910a611fb2e30b852 100644
--- a/src/video/previewmanager.cpp
+++ b/src/video/previewmanager.cpp
@@ -29,23 +29,23 @@ Video::PreviewManager& Video::PreviewManager::instance()
 //Getters
 bool Video::PreviewManager::isPreviewing()
 {
-   return VideoRendererManager::instance().isPreviewing();
+   return ::VideoRendererManager::instance().isPreviewing();
 }
 
 Video::Renderer* Video::PreviewManager::previewRenderer()
 {
-   return VideoRendererManager::instance().previewRenderer();
+   return ::VideoRendererManager::instance().previewRenderer();
 }
 
-Video::PreviewManager::PreviewManager() : QObject(&VideoRendererManager::instance())
+Video::PreviewManager::PreviewManager() : QObject(&::VideoRendererManager::instance())
 {
-   connect(&VideoRendererManager::instance(), &VideoRendererManager::previewStateChanged, [this](bool startStop) {
+   connect(&::VideoRendererManager::instance(), &::VideoRendererManager::previewStateChanged, [this](bool startStop) {
       emit previewStateChanged(startStop);
    });
-   connect(&VideoRendererManager::instance(), &VideoRendererManager::previewStarted     , [this](Video::Renderer* renderer) {
+   connect(&::VideoRendererManager::instance(), &::VideoRendererManager::previewStarted     , [this](Video::Renderer* renderer) {
       emit previewStarted(renderer);
    });
-   connect(&VideoRendererManager::instance(), &VideoRendererManager::previewStopped     , [this](Video::Renderer* renderer) {
+   connect(&::VideoRendererManager::instance(), &::VideoRendererManager::previewStopped     , [this](Video::Renderer* renderer) {
       emit previewStopped(renderer);
    });
 }
@@ -57,10 +57,10 @@ Video::PreviewManager::~PreviewManager()
 
 void Video::PreviewManager::stopPreview()
 {
-   return VideoRendererManager::instance().stopPreview();
+   return ::VideoRendererManager::instance().stopPreview();
 }
 
 void Video::PreviewManager::startPreview()
 {
-   return VideoRendererManager::instance().startPreview();
+   return ::VideoRendererManager::instance().startPreview();
 }