diff --git a/src/Configuration/ConsulConfiguration.cs b/src/Configuration/ConsulConfiguration.cs
index 7ede10169bed0b28fc6e259f74dbc3adb7587b08..2e6d59c07361165d1c8e7f90b74f4e80a1c157c7 100644
--- a/src/Configuration/ConsulConfiguration.cs
+++ b/src/Configuration/ConsulConfiguration.cs
@@ -39,6 +39,24 @@ namespace Coscine.Configuration
             }
         }
 
+
+        public bool PutAndWait(string key, byte[] value)
+        {
+            var putPair = new KVPair(key)
+            {
+                Value = value
+            };
+
+            using (var client = new ConsulClient(Configuration))
+            {
+                var putAttempt = client.KV.Put(putPair);
+
+                putAttempt.Wait();
+
+                return putAttempt.Result.Response;
+            }
+        }
+
         public async Task<byte[]> GetAsync(string key)
         {
             using (var client = new ConsulClient(Configuration))
@@ -57,6 +75,26 @@ namespace Coscine.Configuration
             }
         }
 
+        public byte[] GetAndWait(string key)
+        {
+            using (var client = new ConsulClient(Configuration))
+            {
+                var getPair = client.KV.Get(key);
+
+                getPair.Wait();
+
+                if (getPair.Result.Response?.Value != null)
+                {
+                    return getPair.Result.Response.Value;
+                }
+                else
+                {
+                    return null;
+                }
+
+            }
+        }
+
         public async Task<string> GetStringAsync(string key)
         {
             var value = await GetAsync(key);
@@ -70,6 +108,19 @@ namespace Coscine.Configuration
             }
         }
 
+        public string GetStringAndWait(string key)
+        {
+            var value = GetAndWait(key);
+            if (value != null)
+            {
+                return Encoding.UTF8.GetString(value, 0, value.Length);
+            }
+            else
+            {
+                return null;
+            }
+        }
+
         public async Task<string[]> KeysAsync(string prefix)
         {
             using (var client = new ConsulClient(Configuration))
@@ -79,6 +130,16 @@ namespace Coscine.Configuration
             }
         }
 
+        public string[] KeysAndWait(string prefix)
+        {
+            using (var client = new ConsulClient(Configuration))
+            {
+                var keys = client.KV.Keys(prefix);
+                keys.Wait();
+                return keys.Result.Response;
+            }
+        }
+
         public async Task<bool> DeleteAsync(string key)
         {
             using (var client = new ConsulClient(Configuration))
@@ -88,6 +149,16 @@ namespace Coscine.Configuration
             }
         }
 
+        public bool DeleteAndWait(string key)
+        {
+            using (var client = new ConsulClient(Configuration))
+            {
+                var deleteRequest = client.KV.Delete(key);
+                deleteRequest.Wait();
+                return deleteRequest.Result.Response;
+            }
+        }
+
         public bool Put(string key, string value)
         {
             return PutAsync(key, value).GetAwaiter().GetResult();
diff --git a/src/Configuration/EnvironmentConfiguration.cs b/src/Configuration/EnvironmentConfiguration.cs
index f0ba9e99272bb95b093b11ea4454632b613a5b30..1f49bae621ed208f1d4ee607cedda726fc38cc92 100644
--- a/src/Configuration/EnvironmentConfiguration.cs
+++ b/src/Configuration/EnvironmentConfiguration.cs
@@ -34,6 +34,11 @@ namespace Coscine.Configuration
             return true;
         }
 
+        public bool DeleteAndWait(string key)
+        {
+            return Delete(key);
+        }
+
         public Task<bool> DeleteAsync(string key)
         {
             return Task.Factory.StartNew(() =>
@@ -55,6 +60,11 @@ namespace Coscine.Configuration
             }
         }
 
+        public byte[] GetAndWait(string key)
+        {
+            return Get(key);
+        }
+
         public Task<byte[]> GetAsync(string key)
         {
             return Task.Factory.StartNew(() =>
@@ -75,6 +85,11 @@ namespace Coscine.Configuration
             }
         }
 
+        public string GetStringAndWait(string key)
+        {
+            return GetString(key);
+        }
+
         public Task<string> GetStringAsync(string key)
         {
             return Task.Factory.StartNew(() =>
@@ -97,6 +112,11 @@ namespace Coscine.Configuration
             return filteredKeys.ToArray();
         }
 
+        public string[] KeysAndWait(string prefix)
+        {
+            return Keys(prefix);
+        }
+
         public Task<string[]> KeysAsync(string prefix)
         {
             return Task.Factory.StartNew(() =>
@@ -123,6 +143,11 @@ namespace Coscine.Configuration
             return Put(key, new System.Text.ASCIIEncoding().GetString(value));
         }
 
+        public bool PutAndWait(string key, byte[] value)
+        {
+            return Put(key, value);
+        }
+
         public Task<bool> PutAsync(string key, string value)
         {
             return Task.Factory.StartNew(() =>
diff --git a/src/Configuration/IConfiguration.cs b/src/Configuration/IConfiguration.cs
index ee53c6b4b95beab62946d025e9247cf4d8b8e156..5abcfcc04e1306a2f6a24e4f3616426d0a37c465 100644
--- a/src/Configuration/IConfiguration.cs
+++ b/src/Configuration/IConfiguration.cs
@@ -8,14 +8,24 @@ namespace Coscine.Configuration
 
         Task<bool> PutAsync(string key, byte[] value);
 
+        bool PutAndWait(string key, byte[] value);
+
         Task<byte[]> GetAsync(string key);
 
+        byte[] GetAndWait(string key);
+
         Task<string> GetStringAsync(string key);
 
+        string GetStringAndWait(string key);
+
         Task<string[]> KeysAsync(string prefix);
 
+        string[] KeysAndWait(string prefix);
+
         Task<bool> DeleteAsync(string key);
 
+        bool DeleteAndWait(string key);
+
         bool Put(string key, string value);
 
         bool Put(string key, byte[] value);