diff --git a/lib/sorted_set.rb b/lib/sorted_set.rb
deleted file mode 100644
index fbdcdf0..0000000
--- a/lib/sorted_set.rb
+++ /dev/null
@@ -1,135 +0,0 @@
-#
-# SortedSet implements a Set that guarantees that its elements are
-# yielded in sorted order (according to the return values of their
-# #<=> methods) when iterating over them.
-#
-# All elements that are added to a SortedSet must respond to the <=>
-# method for comparison.
-#
-# Also, all elements must be mutually comparable: el1 <=>
-# el2 must not return nil for any elements el1
-# and el2, else an ArgumentError will be raised when
-# iterating over the SortedSet.
-#
-# == Example
-#
-# require "set"
-#
-# set = SortedSet.new([2, 1, 5, 6, 4, 5, 3, 3, 3])
-# ary = []
-#
-# set.each do |obj|
-# ary << obj
-# end
-#
-# p ary # => [1, 2, 3, 4, 5, 6]
-#
-# set2 = SortedSet.new([1, 2, "3"])
-# set2.each { |obj| } # => raises ArgumentError: comparison of Fixnum with String failed
-#
-class SortedSet < Set
- @@setup = false
- @@mutex = Mutex.new
-
- class << self
- def [](*ary) # :nodoc:
- new(ary)
- end
-
- def setup # :nodoc:
- @@setup and return
-
- @@mutex.synchronize do
- # a hack to shut up warning
- alias_method :old_init, :initialize
-
- begin
- require 'rbtree'
-
- module_eval <<-END, __FILE__, __LINE__+1
- def initialize(*args)
- @hash = RBTree.new
- super
- end
- def add(o)
- o.respond_to?(:<=>) or raise ArgumentError, "value must respond to <=>"
- super
- end
- alias << add
- END
- rescue LoadError
- module_eval <<-END, __FILE__, __LINE__+1
- def initialize(*args)
- @keys = nil
- super
- end
- def clear
- @keys = nil
- super
- end
- def replace(enum)
- @keys = nil
- super
- end
- def add(o)
- o.respond_to?(:<=>) or raise ArgumentError, "value must respond to <=>"
- @keys = nil
- super
- end
- alias << add
- def delete(o)
- @keys = nil
- @hash.delete(o)
- self
- end
- def delete_if
- block_given? or return enum_for(__method__) { size }
- n = @hash.size
- super
- @keys = nil if @hash.size != n
- self
- end
- def keep_if
- block_given? or return enum_for(__method__) { size }
- n = @hash.size
- super
- @keys = nil if @hash.size != n
- self
- end
- def merge(enum)
- @keys = nil
- super
- end
- def each(&block)
- block or return enum_for(__method__) { size }
- to_a.each(&block)
- self
- end
- def to_a
- (@keys = @hash.keys).sort! unless @keys
- @keys.dup
- end
- def freeze
- to_a
- super
- end
- def rehash
- @keys = nil
- super
- end
- END
- end
- # a hack to shut up warning
- remove_method :old_init
-
- @@setup = true
- end
- end
- end
-
- def initialize(*args, &block) # :nodoc:
- SortedSet.setup
- @keys = nil
- super
- end
-end
diff --git a/lib/workers.rb b/lib/workers.rb
index 0aea38b..2dbda26 100644
--- a/lib/workers.rb
+++ b/lib/workers.rb
@@ -1,8 +1,8 @@
require 'thread'
require 'monitor'
require 'set'
-require 'sorted_set'
+require 'workers/sorted_set'
require 'workers/version'
require 'workers/exceptions'
require 'workers/helpers'
diff --git a/lib/workers/sorted_set.rb b/lib/workers/sorted_set.rb
new file mode 100644
index 0000000..42b44d6
--- /dev/null
+++ b/lib/workers/sorted_set.rb
@@ -0,0 +1,131 @@
+#
+# SortedSet implements a Set that guarantees that its elements are
+# yielded in sorted order (according to the return values of their
+# #<=> methods) when iterating over them.
+#
+# All elements that are added to a SortedSet must respond to the <=>
+# method for comparison.
+#
+# Also, all elements must be mutually comparable: el1 <=>
+# el2 must not return nil for any elements el1
+# and el2, else an ArgumentError will be raised when
+# iterating over the SortedSet.
+#
+# == Example
+#
+# require "set"
+#
+# set = SortedSet.new([2, 1, 5, 6, 4, 5, 3, 3, 3])
+# ary = []
+#
+# set.each do |obj|
+# ary << obj
+# end
+#
+# p ary # => [1, 2, 3, 4, 5, 6]
+#
+# set2 = SortedSet.new([1, 2, "3"])
+# set2.each { |obj| } # => raises ArgumentError: comparison of Fixnum with String failed
+#
+module Workers
+ class SortedSet < Set
+ @@setup = false
+ @@mutex = Mutex.new
+
+ class << self
+ def [](*ary) # :nodoc:
+ new(ary)
+ end
+
+ def setup # :nodoc:
+ @@setup and return
+
+ @@mutex.synchronize do
+ # a hack to shut up warning
+ alias_method :old_init, :initialize
+
+ def initialize(*args)
+ @keys = nil
+ super
+ end
+
+ def clear
+ @keys = nil
+ super
+ end
+
+ def replace(enum)
+ @keys = nil
+ super
+ end
+
+ def add(o)
+ o.respond_to?(:<=>) or raise ArgumentError, "value must respond to <=>"
+ @keys = nil
+ super
+ end
+ alias << add
+
+ def delete(o)
+ @keys = nil
+ @hash.delete(o)
+ self
+ end
+
+ def delete_if
+ block_given? or return enum_for(__method__) { size }
+ n = @hash.size
+ super
+ @keys = nil if @hash.size != n
+ self
+ end
+
+ def keep_if
+ block_given? or return enum_for(__method__) { size }
+ n = @hash.size
+ super
+ @keys = nil if @hash.size != n
+ self
+ end
+
+ def merge(enum)
+ @keys = nil
+ super
+ end
+
+ def each(&block)
+ block or return enum_for(__method__) { size }
+ to_a.each(&block)
+ self
+ end
+
+ def to_a
+ (@keys = @hash.keys).sort! unless @keys
+ @keys.dup
+ end
+
+ def freeze
+ to_a
+ super
+ end
+
+ def rehash
+ @keys = nil
+ super
+ end
+
+ # a hack to shut up warning
+ remove_method :old_init
+
+ @@setup = true
+ end
+ end
+ end
+
+ def initialize(*args, &block) # :nodoc:
+ SortedSet.setup
+ @keys = nil
+ super
+ end
+ end
+end