diff --git a/src/account.cpp b/src/account.cpp
index d64a6e4e865cd8f7dd227ec8bee846d2a2351e41..5ed2b5c8197bd8be660b0832d7305af6f7920bbe 100644
--- a/src/account.cpp
+++ b/src/account.cpp
@@ -106,8 +106,15 @@ Account::Account(const std::string &accountID)
     , mailBox_()
     , upnp_(new upnp::Controller())
 {
+#ifndef _WIN32
     std::random_device rdev;
     std::seed_seq seed {rdev(), rdev()};
+#else
+    int seed_data[std::mt19937::state_size];
+    std::default_random_engine dre(std::chrono::system_clock::now().time_since_epoch().count());
+    std::generate_n(seed_data, std::mt19937::state_size, std::ref(dre));
+    std::seed_seq seed(std::begin(seed_data), std::end(seed_data));
+#endif
     rand_.seed(seed);
 
     // Initialize the codec order, used when creating a new account
diff --git a/src/manager.cpp b/src/manager.cpp
index 335c94d34a5d244087d275a1d77694649b8f11cb..43fba280664136a35415a2ee86f1f51f7b9b6f73 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -225,8 +225,15 @@ Manager::Manager() :
 {
     // initialize random generator
     // mt19937_64 should be seeded with 2 x 32 bits
+#ifndef _WIN32
     std::random_device rdev;
     std::seed_seq seed {rdev(), rdev()};
+#else
+    int seed_data[std::mt19937::state_size];
+    std::default_random_engine dre(std::chrono::system_clock::now().time_since_epoch().count());
+    std::generate_n(seed_data, std::mt19937::state_size, std::ref(dre));
+    std::seed_seq seed(std::begin(seed_data), std::end(seed_data));
+#endif
     rand_.seed(seed);
 
     ring::libav_utils::ring_avcodec_init();
diff --git a/src/sip/sdp.cpp b/src/sip/sdp.cpp
index 2075e74ab7f4b772051dda821a19e04ecf104fbf..7727d642d8cdeae08c804eadf1dc7d131fd3dbb8 100644
--- a/src/sip/sdp.cpp
+++ b/src/sip/sdp.cpp
@@ -132,7 +132,11 @@ static void
 randomFill(std::vector<uint8_t>& dest)
 {
     std::uniform_int_distribution<uint8_t> rand_byte(0, 255);
+#ifndef _WIN32
     std::random_device rdev;
+#else
+    std::default_random_engine rdev(std::chrono::system_clock::now().time_since_epoch().count());
+#endif
     std::generate(dest.begin(), dest.end(), std::bind(rand_byte, std::ref(rdev)));
 }