diff --git a/src/api/newvideo.h b/src/api/newvideo.h
index 7e024df68973eaa83e3a5560a8bffcc242c272f2..5630f1ed0518808d3bde5ba35345578dde2022f9 100644
--- a/src/api/newvideo.h
+++ b/src/api/newvideo.h
@@ -44,14 +44,14 @@ namespace api
 namespace video
 {
 
-
 constexpr static const char PREVIEW_RENDERER_ID[] = "local";
 
 using Channel = std::string;
 using Resolution = std::string;
 using Framerate = float;
 using FrameratesList = std::vector<Framerate>;
-using Capabilities = std::map<Channel, std::map<Resolution, FrameratesList>>;
+using ResRateList = std::vector<std::pair<Resolution, FrameratesList>>;
+using Capabilities = std::map<Channel, ResRateList>;
 
 /**
  * This class is used by Renderer class to expose video data frame
diff --git a/src/avmodel.cpp b/src/avmodel.cpp
index b099d403a28be67ce6a21df4cc2c190106e84293..edb159ff0a75cce6c446e9ae645decdb1e5420db 100644
--- a/src/avmodel.cpp
+++ b/src/avmodel.cpp
@@ -237,16 +237,24 @@ AVModel::getDeviceCapabilities(const std::string& name) const
         VideoManager::instance().getCapabilities(name.c_str());
     video::Capabilities result;
     for (auto& channel : capabilites.toStdMap()) {
-        std::map<video::Resolution, video::FrameratesList> channelCapabilities;
+        video::ResRateList channelCapabilities;
         for (auto& resToRates : channel.second.toStdMap()) {
             video::FrameratesList rates;
             QVectorIterator<QString> itRates(resToRates.second);
             while (itRates.hasNext()) {
                 rates.emplace_back(itRates.next().toFloat());
             }
-            channelCapabilities.insert(
+            channelCapabilities.emplace_back(
                 std::make_pair(resToRates.first.toStdString(), rates));
         }
+        // sort by resolution widths
+        std::sort(channelCapabilities.begin(), channelCapabilities.end(),
+            [](const std::pair<video::Resolution, video::FrameratesList>& lhs,
+               const std::pair<video::Resolution, video::FrameratesList>& rhs) {
+                auto lhsWidth = stoull(lhs.first.substr(0, lhs.first.find("x")));
+                auto rhsWidth = stoull(rhs.first.substr(0, rhs.first.find("x")));
+                return lhsWidth > rhsWidth;
+            });
         result.insert(
             std::make_pair(channel.first.toStdString(), channelCapabilities));
     }