diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index c89abe2539006751d53237bbd5763fc3a8047ab8..8335cf96f1025db55a45d2c862c03c10451644ed 100644
--- a/Library/Homebrew/formula.rb
+++ b/Library/Homebrew/formula.rb
@@ -624,22 +624,22 @@ class Formula
 
   # an array of all core {Formula} names
   def self.core_names
-    Dir["#{HOMEBREW_LIBRARY}/Formula/*.rb"].map{ |f| File.basename f, ".rb" }.sort
+    @core_names ||= Dir["#{HOMEBREW_LIBRARY}/Formula/*.rb"].map{ |f| File.basename f, ".rb" }.sort
   end
 
   # an array of all tap {Formula} names
   def self.tap_names
-    Tap.map(&:formula_names).flatten.sort
+    @tap_names ||= Tap.map(&:formula_names).flatten.sort
   end
 
   # an array of all {Formula} names
   def self.names
-    (core_names + tap_names.map { |name| name.split("/")[-1] }).sort.uniq
+    @names ||= (core_names + tap_names.map { |name| name.split("/")[-1] }).sort.uniq
   end
 
   # an array of all {Formula} names, which the tap formulae have the fully-qualified name
   def self.full_names
-    core_names + tap_names
+    @full_names ||= core_names + tap_names
   end
 
   def self.each
@@ -657,14 +657,16 @@ class Formula
 
   # An array of all installed {Formula}
   def self.installed
-    return [] unless HOMEBREW_CELLAR.directory?
-
-    HOMEBREW_CELLAR.subdirs.map do |rack|
-      begin
-        Formulary.from_rack(rack)
-      rescue FormulaUnavailableError, TapFormulaAmbiguityError
-      end
-    end.compact
+    @installed ||= if HOMEBREW_CELLAR.directory?
+      HOMEBREW_CELLAR.subdirs.map do |rack|
+        begin
+          Formulary.from_rack(rack)
+        rescue FormulaUnavailableError, TapFormulaAmbiguityError
+        end
+      end.compact
+    else
+      []
+    end
   end
 
   def self.aliases