diff --git a/xmlsitemap.generate.inc b/xmlsitemap.generate.inc
index c6b564a..e0ed57a 100644
--- a/xmlsitemap.generate.inc
+++ b/xmlsitemap.generate.inc
@@ -79,6 +79,12 @@ function _xmlsitemap_get_optimal_memory_limit() {
   if (!isset($optimal_limit)) {
     // Set the base memory amount from the provided core constant.
     $optimal_limit = parse_size(DRUPAL_MINIMUM_PHP_MEMORY_LIMIT);
+    
+    // Base our new limit on current memory usage if it is
+    // greater than Drupal's minimum.
+    if (memory_get_usage() > $optimal_limit) {
+      $optimal_limit = memory_get_usage();
+    }
 
     // Add memory based on the chunk size.
     $optimal_limit += xmlsitemap_get_chunk_size() * 500;
@@ -102,7 +108,7 @@ function _xmlsitemap_get_optimal_memory_limit() {
 function _xmlsitemap_set_memory_limit($new_limit = NULL) {
   $current_limit = @ini_get('memory_limit');
   if ($current_limit && $current_limit != -1) {
-    if (!is_null($new_limit)) {
+    if (is_null($new_limit)) {
       $new_limit = _xmlsitemap_get_optimal_memory_limit();
     }
     if (parse_size($current_limit) < $new_limit) {
