diff --git a/AUTHORS.md b/AUTHORS.md
index fd0b877d..d61ad812 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -49,6 +49,7 @@ Resque Scheduler authors
 - Nickolas Means
 - Olek Janiszewski
 - Olivier Brisse
+- Peter Retzlaff
 - Petteri Räty
 - Phil Cohen
 - Rob Olson
diff --git a/lib/resque/scheduler.rb b/lib/resque/scheduler.rb
index 8ca91367..24491819 100644
--- a/lib/resque/scheduler.rb
+++ b/lib/resque/scheduler.rb
@@ -225,18 +225,9 @@ def handle_shutdown
       # Enqueues a job based on a config hash
       def enqueue_from_config(job_config)
         args = job_config['args'] || job_config[:args]
-
-        klass_name = job_config['class'] || job_config[:class]
-        begin
-          klass = Resque::Scheduler::Util.constantize(klass_name)
-        rescue NameError
-          klass = klass_name
-        end
-
         params = args.is_a?(Hash) ? [args] : Array(args)
-        queue = job_config['queue'] ||
-                job_config[:queue] ||
-                Resque.queue_from_class(klass)
+        klass, klass_name, queue = queue_info_from(job_config)
+
         # Support custom job classes like those that inherit from
         # Resque::JobWithStatus (resque-status)
         job_klass = job_config['custom_job_class']
@@ -419,11 +410,42 @@ def logger
 
       private
 
+      def queue_info_from(config)
+        klass_name = config['class'] || config[:class]
+        begin
+          klass = Resque::Scheduler::Util.constantize(klass_name)
+        rescue NameError
+          klass = klass_name
+        end
+
+        queue_name = config['queue'] || config[:queue] || Resque.queue_from_class(klass)
+        [klass, klass_name, queue_name]
+      end
+
+      def in_progress?(queue_name)
+        currently_processing = Resque.working.map(&:job).any? do |job|
+          job['queue'] == queue_name.to_s
+        end
+
+        currently_processing || (Resque.size(queue_name.to_s) > 0)
+      end
+
+      def should_enqueue?(config)
+        allow_overlap = (config[:overlap] != false && config['overlap'] != false)
+        _, _, queue_name = queue_info_from(config)
+
+        allow_overlap || !in_progress?(queue_name)
+      end
+
       def enqueue_recurring(name, config)
         if master?
-          log! "queueing #{config['class']} (#{name})"
-          Resque.last_enqueued_at(name, Time.now.to_s)
-          enqueue(config)
+          if should_enqueue?(config)
+            log! "queueing #{config['class']} (#{name})"
+            Resque.last_enqueued_at(name, Time.now.to_s)
+            enqueue(config)
+          else
+            log! "No overlap allowed. Not enqueueing #{config['class']} (#{name})"
+          end
         end
       end