diff --git a/configure.ac b/configure.ac
index 3a042cd..3fb15c9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -67,6 +67,10 @@
 AS_IF([test x$BMC_DUMP_MAX_SIZE == x], [BMC_DUMP_MAX_SIZE=200])
 AC_DEFINE_UNQUOTED([BMC_DUMP_MAX_SIZE], [$BMC_DUMP_MAX_SIZE], [Maximum size of one bmc dump in kilo bytes])
 
+AC_ARG_VAR(BMC_DUMP_MIN_SPACE_REQD, [Minimum space required for one bmc dump in kilo bytes])
+AS_IF([test x$BMC_DUMP_MIN_SPACE_REQD == x], [BMC_DUMP_MIN_SPACE_REQD=20])
+AC_DEFINE_UNQUOTED([BMC_DUMP_MIN_SPACE_REQD], [$BMC_DUMP_MIN_SPACE_REQD], [Minimum space required for one bmc dump in kilo bytes])
+
 AC_ARG_VAR(BMC_DUMP_TOTAL_SIZE, [Total size of the bmc dump in kilo bytes])
 AS_IF([test x$BMC_DUMP_TOTAL_SIZE == x], [BMC_DUMP_TOTAL_SIZE=1024])
 AC_DEFINE_UNQUOTED([BMC_DUMP_TOTAL_SIZE], [$BMC_DUMP_TOTAL_SIZE], [Total size of the dump in kilo bytes])
diff --git a/dump_manager.cpp b/dump_manager.cpp
index 80e117b..ef840f3 100644
--- a/dump_manager.cpp
+++ b/dump_manager.cpp
@@ -81,17 +81,11 @@
         elog<InternalFailure>();
     }
 
-    //Increment active dump count.
-    activeDumpCount++;
-
     return ++lastEntryId;
 }
 
 void Manager::createEntry(const fs::path& file)
 {
-    //Decrement the Dump in progress counter.
-    activeDumpCount = (activeDumpCount == 0 ? 0 : activeDumpCount - 1);
-
     //Dump File Name format obmcdump_ID_EPOCHTIME.EXT
     static constexpr auto ID_POS         = 1;
     static constexpr auto EPOCHTIME_POS  = 2;
@@ -214,22 +208,33 @@
 
     auto size = 0;
 
-    // Maximum number of dump is based on total dump size
-    // and individual dump Max size configured in the system.
-    // Set the new dump size to max, in case sum of available
-    // dump and active dumps is less than maximum number of dumps.
-
-    constexpr auto dumpCount = BMC_DUMP_TOTAL_SIZE / BMC_DUMP_MAX_SIZE;
-
-    if ((entries.size() + activeDumpCount) < dumpCount)
+    //Get current size of the dump directory.
+    for (const auto& p : fs::recursive_directory_iterator(BMC_DUMP_PATH))
     {
-        size = BMC_DUMP_MAX_SIZE;
+        if (!fs::is_directory(p))
+        {
+            size += fs::file_size(p);
+        }
     }
-    else
+
+    //Convert size into KB
+    size = size / 1024;
+
+    //Set the Dump size to Maximum  if the free space is greater than
+    //Dump max size otherwise return the available size.
+
+    size = (size > BMC_DUMP_TOTAL_SIZE ? 0 : BMC_DUMP_TOTAL_SIZE - size);
+
+    if (size < BMC_DUMP_MIN_SPACE_REQD)
     {
         //Reached to maximum limit
         elog<QuotaExceeded>(Reason("Not enough space: Delete old dumps"));
     }
+    if (size > BMC_DUMP_MAX_SIZE)
+    {
+        size = BMC_DUMP_MAX_SIZE;
+    }
+
     return size;
 }
 
diff --git a/dump_manager.hpp b/dump_manager.hpp
index 9856f1e..ef3cd22 100644
--- a/dump_manager.hpp
+++ b/dump_manager.hpp
@@ -64,7 +64,6 @@
             bus(bus),
             eventLoop(event.get()),
             lastEntryId(0),
-            activeDumpCount(0),
             dumpWatch(eventLoop,
                   IN_NONBLOCK,
                   IN_CLOSE_WRITE | IN_CREATE,
@@ -137,11 +136,9 @@
           */
         void removeWatch(const fs::path& path);
 
-        /** @brief Calculate per dump allowed size based on number of
-          *        existing dumps and total dump size. Returns
-          *        allowed size for a dump in kilo bytes.
-          *  @returns 0 indicates no space is available in dump location
-          *           non zero value indicates size of one dump.
+        /** @brief Calculate per dump allowed size based on the available
+          *        size in the dump location.
+          *  @returns dump size in kilobytes.
           */
         size_t getAllowedSize();
 
@@ -157,9 +154,6 @@
         /** @brief Id of the last Dump entry */
         uint32_t lastEntryId;
 
-        /** @brief active dump count */
-        uint32_t activeDumpCount;
-
         /** @brief Dump main watch object */
         Watch dumpWatch;
 
