Update the example code and doxygen comments to use the new-style install() methods.
diff --git a/examples/annotated_injection/car.cpp b/examples/annotated_injection/car.cpp
index ad7595b..53d4ce1 100644
--- a/examples/annotated_injection/car.cpp
+++ b/examples/annotated_injection/car.cpp
@@ -39,10 +39,9 @@
     }
 };
 
-const fruit::Component<Car>& getCarComponent() {
-    static const fruit::Component<Car> comp = fruit::createComponent()
+fruit::Component<Car> getCarComponent() {
+    return fruit::createComponent()
         .bind<Car, CarImpl>()
-        .install(getMainBrakeComponent())
-        .install(getEmergencyBrakeComponent());
-    return comp;
+        .install(getMainBrakeComponent)
+        .install(getEmergencyBrakeComponent);
 }
diff --git a/examples/annotated_injection/car.h b/examples/annotated_injection/car.h
index f0d66ac..45a9662 100644
--- a/examples/annotated_injection/car.h
+++ b/examples/annotated_injection/car.h
@@ -24,6 +24,6 @@
   virtual void brake() = 0;
 };
 
-const fruit::Component<Car>& getCarComponent();
+fruit::Component<Car> getCarComponent();
 
 #endif // CAR_H
diff --git a/examples/annotated_injection/emergency_brake.cpp b/examples/annotated_injection/emergency_brake.cpp
index 977e921..8fe69aa 100644
--- a/examples/annotated_injection/emergency_brake.cpp
+++ b/examples/annotated_injection/emergency_brake.cpp
@@ -25,8 +25,7 @@
   }
 };
 
-const fruit::Component<fruit::Annotated<EmergencyBrake, Brake>>& getEmergencyBrakeComponent() {
-  static const fruit::Component<fruit::Annotated<EmergencyBrake, Brake>> comp = fruit::createComponent()
+fruit::Component<fruit::Annotated<EmergencyBrake, Brake>> getEmergencyBrakeComponent() {
+  return fruit::createComponent()
       .bind<fruit::Annotated<EmergencyBrake, Brake>, EmergencyBrakeImpl>();
-  return comp;
 }
diff --git a/examples/annotated_injection/emergency_brake.h b/examples/annotated_injection/emergency_brake.h
index 7400d2e..335d9f1 100644
--- a/examples/annotated_injection/emergency_brake.h
+++ b/examples/annotated_injection/emergency_brake.h
@@ -25,6 +25,6 @@
 // This marks a the Brake instance that represents the main brake.
 struct EmergencyBrake {};
 
-const fruit::Component<fruit::Annotated<EmergencyBrake, Brake>>& getEmergencyBrakeComponent();
+fruit::Component<fruit::Annotated<EmergencyBrake, Brake>> getEmergencyBrakeComponent();
 
 #endif // EMERGENCY_BRAKE_H
diff --git a/examples/annotated_injection/main_brake.cpp b/examples/annotated_injection/main_brake.cpp
index 1bd62cb..9383305 100644
--- a/examples/annotated_injection/main_brake.cpp
+++ b/examples/annotated_injection/main_brake.cpp
@@ -25,8 +25,7 @@
     }
 };
 
-const fruit::Component<fruit::Annotated<MainBrake, Brake>>& getMainBrakeComponent() {
-    static const fruit::Component<fruit::Annotated<MainBrake, Brake>> comp = fruit::createComponent()
+fruit::Component<fruit::Annotated<MainBrake, Brake>> getMainBrakeComponent() {
+    return fruit::createComponent()
         .bind<fruit::Annotated<MainBrake, Brake>, MainBrakeImpl>();
-    return comp;
 }
diff --git a/examples/annotated_injection/main_brake.h b/examples/annotated_injection/main_brake.h
index ee8beda..6b96f10 100644
--- a/examples/annotated_injection/main_brake.h
+++ b/examples/annotated_injection/main_brake.h
@@ -25,6 +25,6 @@
 // This marks a the Brake instance that represents the main brake.
 struct MainBrake {};
 
-const fruit::Component<fruit::Annotated<MainBrake, Brake>>& getMainBrakeComponent();
+fruit::Component<fruit::Annotated<MainBrake, Brake>> getMainBrakeComponent();
 
 #endif // MAIN_BRAKE_H
diff --git a/examples/hello_world/main.cpp b/examples/hello_world/main.cpp
index b31ca8e..de1ac91 100644
--- a/examples/hello_world/main.cpp
+++ b/examples/hello_world/main.cpp
@@ -42,11 +42,10 @@
   }
 };
 
-const Component<Greeter>& getGreeterComponent() {
-  static const Component<Greeter> comp = fruit::createComponent()
+Component<Greeter> getGreeterComponent() {
+  return fruit::createComponent()
     .bind<Writer, StdoutWriter>()
     .bind<Greeter, GreeterImpl>();
-  return comp;
 }
 
 int main() {
diff --git a/examples/multibindings/main.cpp b/examples/multibindings/main.cpp
index 578f89c..2621d09 100644
--- a/examples/multibindings/main.cpp
+++ b/examples/multibindings/main.cpp
@@ -63,13 +63,12 @@
   }
 };
 
-const Component<>& getListenersComponent() {
+Component<> getListenersComponent() {
   // Here they are in the same component to keep it simple, but Fruit collects all multibindings in installed components.
-  static const Component<> comp = fruit::createComponent()
+  return fruit::createComponent()
       .bind<Writer, StdoutWriter>()
       .addMultibinding<Listener, Listener1>()
       .addMultibinding<Listener, Listener2>();
-  return comp;
 }
 
 int main() {
diff --git a/examples/scaling_doubles/multiplier.cpp b/examples/scaling_doubles/multiplier.cpp
index 6b063ad..24b2d2a 100644
--- a/examples/scaling_doubles/multiplier.cpp
+++ b/examples/scaling_doubles/multiplier.cpp
@@ -23,9 +23,8 @@
   }
 };
 
-const fruit::Component<Multiplier>& getMultiplierComponent() {
-  static const fruit::Component<Multiplier> comp = fruit::createComponent()
+fruit::Component<Multiplier> getMultiplierComponent() {
+  return fruit::createComponent()
     .bind<Multiplier, MultiplierImpl>()
     .registerConstructor<MultiplierImpl()>();
-  return comp;
 }
diff --git a/examples/scaling_doubles/multiplier.h b/examples/scaling_doubles/multiplier.h
index a312e4f..9baeb28 100644
--- a/examples/scaling_doubles/multiplier.h
+++ b/examples/scaling_doubles/multiplier.h
@@ -25,6 +25,6 @@
   virtual double multiply(double x, double y) = 0;
 };
 
-const fruit::Component<Multiplier>& getMultiplierComponent();
+fruit::Component<Multiplier> getMultiplierComponent();
 
 #endif // MULTIPLIER_H
diff --git a/examples/scaling_doubles/scaler.cpp b/examples/scaling_doubles/scaler.cpp
index bd2863f..da27794 100644
--- a/examples/scaling_doubles/scaler.cpp
+++ b/examples/scaling_doubles/scaler.cpp
@@ -37,9 +37,8 @@
 };
 
 
-const Component<ScalerFactory>& getScalerComponent() {
-  static const Component<ScalerFactory> comp = createComponent()
+Component<ScalerFactory> getScalerComponent() {
+  return createComponent()
     .bind<Scaler, ScalerImpl>()
-    .install(getMultiplierComponent());
-  return comp;
+    .install(getMultiplierComponent);
 }
diff --git a/examples/scaling_doubles/scaler.h b/examples/scaling_doubles/scaler.h
index 5261a26..036b8e6 100644
--- a/examples/scaling_doubles/scaler.h
+++ b/examples/scaling_doubles/scaler.h
@@ -26,6 +26,6 @@
 
 using ScalerFactory = std::function<std::unique_ptr<Scaler>(double)>;
 
-const fruit::Component<ScalerFactory>& getScalerComponent();
+fruit::Component<ScalerFactory> getScalerComponent();
 
 #endif // SCALER_H
diff --git a/examples/server/bar_handler.cpp b/examples/server/bar_handler.cpp
index 4c743d3..0644492 100644
--- a/examples/server/bar_handler.cpp
+++ b/examples/server/bar_handler.cpp
@@ -36,9 +36,8 @@
   }
 };
 
-const Component<Required<Request, ServerContext>, BarHandler>& getBarHandlerComponent() {
-  static const Component<Required<Request, ServerContext>, BarHandler> comp = fruit::createComponent()
+Component<Required<Request, ServerContext>, BarHandler> getBarHandlerComponent() {
+  return fruit::createComponent()
       .bind<BarHandler, BarHandlerImpl>();
-  return comp;
 }
 
diff --git a/examples/server/bar_handler.h b/examples/server/bar_handler.h
index a1220d8..e86ec58 100644
--- a/examples/server/bar_handler.h
+++ b/examples/server/bar_handler.h
@@ -29,6 +29,6 @@
   virtual void handleRequest() = 0;
 };
 
-const fruit::Component<fruit::Required<Request, ServerContext>, BarHandler>& getBarHandlerComponent();
+fruit::Component<fruit::Required<Request, ServerContext>, BarHandler> getBarHandlerComponent();
 
 #endif // BAR_HANDLER_H
diff --git a/examples/server/foo_handler.cpp b/examples/server/foo_handler.cpp
index cff388a..e2aabb3 100644
--- a/examples/server/foo_handler.cpp
+++ b/examples/server/foo_handler.cpp
@@ -36,9 +36,8 @@
   }
 };
 
-const Component<Required<Request, ServerContext>, FooHandler>& getFooHandlerComponent() {
-  static const Component<Required<Request, ServerContext>, FooHandler> comp = fruit::createComponent()
+Component<Required<Request, ServerContext>, FooHandler> getFooHandlerComponent() {
+  return fruit::createComponent()
       .bind<FooHandler, FooHandlerImpl>();
-  return comp;
 }
 
diff --git a/examples/server/foo_handler.h b/examples/server/foo_handler.h
index 0fbbc53..6d85bdd 100644
--- a/examples/server/foo_handler.h
+++ b/examples/server/foo_handler.h
@@ -29,6 +29,6 @@
   virtual void handleRequest() = 0;
 };
 
-const fruit::Component<fruit::Required<Request, ServerContext>, FooHandler>& getFooHandlerComponent();
+fruit::Component<fruit::Required<Request, ServerContext>, FooHandler> getFooHandlerComponent();
 
 #endif // FOO_HANDLER_H
diff --git a/examples/server/main.cpp b/examples/server/main.cpp
index c6e637c..633ab2e 100644
--- a/examples/server/main.cpp
+++ b/examples/server/main.cpp
@@ -25,7 +25,7 @@
   Injector<Server> injector(getServerComponent());
   
   Server* server(injector);
-  server->run(getRequestDispatcherComponent());
+  server->run(getRequestDispatcherComponent);
   
   return 0;
 }
diff --git a/examples/server/request_dispatcher.cpp b/examples/server/request_dispatcher.cpp
index 061bf88..2901a3b 100644
--- a/examples/server/request_dispatcher.cpp
+++ b/examples/server/request_dispatcher.cpp
@@ -58,10 +58,9 @@
   }  
 };
 
-const Component<Required<Request, ServerContext>, RequestDispatcher>& getRequestDispatcherComponent() {
-  static const Component<Required<Request, ServerContext>, RequestDispatcher> comp = createComponent()
+Component<Required<Request, ServerContext>, RequestDispatcher> getRequestDispatcherComponent() {
+  return createComponent()
     .bind<RequestDispatcher, RequestDispatcherImpl>()
-    .install(getFooHandlerComponent())
-    .install(getBarHandlerComponent());
-  return comp;
+    .install(getFooHandlerComponent)
+    .install(getBarHandlerComponent);
 }
diff --git a/examples/server/request_dispatcher.h b/examples/server/request_dispatcher.h
index ecfe936..7cb0214 100644
--- a/examples/server/request_dispatcher.h
+++ b/examples/server/request_dispatcher.h
@@ -29,6 +29,6 @@
   virtual void handleRequest() = 0;
 };
 
-const fruit::Component<fruit::Required<Request, ServerContext>, RequestDispatcher>& getRequestDispatcherComponent();
+fruit::Component<fruit::Required<Request, ServerContext>, RequestDispatcher> getRequestDispatcherComponent();
 
 #endif // REQUEST_DISPATCHER_H
diff --git a/examples/server/server.cpp b/examples/server/server.cpp
index 4edc3f6..8702492 100644
--- a/examples/server/server.cpp
+++ b/examples/server/server.cpp
@@ -37,13 +37,13 @@
     }
   }
   
-  void run(Component<Required<Request, ServerContext>, RequestDispatcher> requestDispatcherComponent) override {
+  void run(Component<Required<Request, ServerContext>, RequestDispatcher>(*getRequestDispatcherComponent)()) override {
     ServerContext serverContext;
     serverContext.startupTime = getTime();
     
     const NormalizedComponent<Required<Request>, RequestDispatcher> requestDispatcherNormalizedComponent(
       createComponent()
-          .install(std::move(requestDispatcherComponent))
+          .install(getRequestDispatcherComponent)
           .bindInstance(serverContext));
     
     cerr << "Server started." << endl;
@@ -90,8 +90,7 @@
   }
 };
 
-const fruit::Component<Server>& getServerComponent() {
-  static const fruit::Component<Server> comp = fruit::createComponent()
+fruit::Component<Server> getServerComponent() {
+  return fruit::createComponent()
     .bind<Server, ServerImpl>();
-  return comp;
 }
diff --git a/examples/server/server.h b/examples/server/server.h
index 2ecee62..be3ae2b 100644
--- a/examples/server/server.h
+++ b/examples/server/server.h
@@ -26,9 +26,9 @@
 
 class Server {
 public:
-  virtual void run(fruit::Component<fruit::Required<Request, ServerContext>, RequestDispatcher> requestDispatcherComponent) = 0;
+  virtual void run(fruit::Component<fruit::Required<Request, ServerContext>, RequestDispatcher>(*getrequestDispatcherComponent)()) = 0;
 };
 
-const fruit::Component<Server>& getServerComponent();
+fruit::Component<Server> getServerComponent();
 
 #endif // SERVER_H
diff --git a/examples/simple_injection/checked_adder.cpp b/examples/simple_injection/checked_adder.cpp
index f184aca..ff50d56 100644
--- a/examples/simple_injection/checked_adder.cpp
+++ b/examples/simple_injection/checked_adder.cpp
@@ -70,8 +70,7 @@
   }
 };
 
-const fruit::Component<Adder>& getCheckedAdderComponent() {
-  static const fruit::Component<Adder> comp = fruit::createComponent()
+fruit::Component<Adder> getCheckedAdderComponent() {
+  return fruit::createComponent()
     .bind<Adder, CheckedAdder>();
-  return comp;
 }
diff --git a/examples/simple_injection/checked_adder.h b/examples/simple_injection/checked_adder.h
index 240a898..c18ed0b 100644
--- a/examples/simple_injection/checked_adder.h
+++ b/examples/simple_injection/checked_adder.h
@@ -20,6 +20,6 @@
 #include <fruit/fruit.h>
 #include "adder.h"
 
-const fruit::Component<Adder>& getCheckedAdderComponent();
+fruit::Component<Adder> getCheckedAdderComponent();
 
 #endif // CHECKED_ADDER_H
diff --git a/examples/simple_injection/checked_incrementer.cpp b/examples/simple_injection/checked_incrementer.cpp
index 647715d..7f27a35 100644
--- a/examples/simple_injection/checked_incrementer.cpp
+++ b/examples/simple_injection/checked_incrementer.cpp
@@ -19,9 +19,8 @@
 #include "incrementer_impl.h"
 #include "checked_adder.h"
 
-const fruit::Component<Incrementer>& getCheckedIncrementerComponent() {
-  static const fruit::Component<Incrementer> comp = fruit::createComponent()
-    .install(getIncrementerImplComponent())
-    .install(getCheckedAdderComponent());
-  return comp;
+fruit::Component<Incrementer> getCheckedIncrementerComponent() {
+  return fruit::createComponent()
+    .install(getIncrementerImplComponent)
+    .install(getCheckedAdderComponent);
 }
diff --git a/examples/simple_injection/checked_incrementer.h b/examples/simple_injection/checked_incrementer.h
index 6097ce2..3efccdd 100644
--- a/examples/simple_injection/checked_incrementer.h
+++ b/examples/simple_injection/checked_incrementer.h
@@ -20,6 +20,6 @@
 #include <fruit/fruit.h>
 #include "incrementer.h"
 
-const fruit::Component<Incrementer>& getCheckedIncrementerComponent();
+fruit::Component<Incrementer> getCheckedIncrementerComponent();
 
 #endif // CHECKED_INCREMENTER_H
diff --git a/examples/simple_injection/incrementer_component.cpp b/examples/simple_injection/incrementer_component.cpp
index 4939145..603f3fb 100644
--- a/examples/simple_injection/incrementer_component.cpp
+++ b/examples/simple_injection/incrementer_component.cpp
@@ -19,7 +19,7 @@
 #include "simple_incrementer.h"
 #include "checked_incrementer.h"
 
-const fruit::Component<Incrementer>& getIncrementerComponent(bool checked) {
+fruit::Component<Incrementer> getIncrementerComponent(bool checked) {
   if (checked)
     return getCheckedIncrementerComponent();
   else
diff --git a/examples/simple_injection/incrementer_component.h b/examples/simple_injection/incrementer_component.h
index b5d9580..be1741d 100644
--- a/examples/simple_injection/incrementer_component.h
+++ b/examples/simple_injection/incrementer_component.h
@@ -21,6 +21,6 @@
 
 #include <fruit/fruit.h>
 
-const fruit::Component<Incrementer>& getIncrementerComponent(bool checked);
+fruit::Component<Incrementer> getIncrementerComponent(bool checked);
 
 #endif // INCREMENTER_COMPONENT_H
diff --git a/examples/simple_injection/incrementer_impl.cpp b/examples/simple_injection/incrementer_impl.cpp
index a4ccf8b..712a525 100644
--- a/examples/simple_injection/incrementer_impl.cpp
+++ b/examples/simple_injection/incrementer_impl.cpp
@@ -30,8 +30,7 @@
   }
 };
 
-const fruit::Component<fruit::Required<Adder>, Incrementer>& getIncrementerImplComponent() {
-  static const fruit::Component<fruit::Required<Adder>, Incrementer> comp = fruit::createComponent()
+fruit::Component<fruit::Required<Adder>, Incrementer> getIncrementerImplComponent() {
+  return fruit::createComponent()
     .bind<Incrementer, IncrementerImpl>();
-  return comp;
 }
diff --git a/examples/simple_injection/incrementer_impl.h b/examples/simple_injection/incrementer_impl.h
index fc2aee1..71ee82d 100644
--- a/examples/simple_injection/incrementer_impl.h
+++ b/examples/simple_injection/incrementer_impl.h
@@ -21,6 +21,6 @@
 #include "incrementer.h"
 #include "adder.h"
 
-const fruit::Component<fruit::Required<Adder>, Incrementer>& getIncrementerImplComponent();
+fruit::Component<fruit::Required<Adder>, Incrementer> getIncrementerImplComponent();
 
 #endif // INCREMENTER_IMPL_H
diff --git a/examples/simple_injection/simple_adder.cpp b/examples/simple_injection/simple_adder.cpp
index ccb54d6..5cc4d9f 100644
--- a/examples/simple_injection/simple_adder.cpp
+++ b/examples/simple_injection/simple_adder.cpp
@@ -25,8 +25,7 @@
   }
 };
 
-const fruit::Component<Adder>& getSimpleAdderComponent() {
-  static const fruit::Component<Adder> comp = fruit::createComponent()
+fruit::Component<Adder> getSimpleAdderComponent() {
+  return fruit::createComponent()
     .bind<Adder, SimpleAdder>();
-  return comp;
 }
diff --git a/examples/simple_injection/simple_adder.h b/examples/simple_injection/simple_adder.h
index 3f779f8..564b8f0 100644
--- a/examples/simple_injection/simple_adder.h
+++ b/examples/simple_injection/simple_adder.h
@@ -20,6 +20,6 @@
 #include <fruit/fruit.h>
 #include "adder.h"
 
-const fruit::Component<Adder>& getSimpleAdderComponent();
+fruit::Component<Adder> getSimpleAdderComponent();
 
 #endif // SIMPLE_ADDER_H
diff --git a/examples/simple_injection/simple_incrementer.cpp b/examples/simple_injection/simple_incrementer.cpp
index e27f199..9a0b869 100644
--- a/examples/simple_injection/simple_incrementer.cpp
+++ b/examples/simple_injection/simple_incrementer.cpp
@@ -19,9 +19,8 @@
 #include "incrementer_impl.h"
 #include "simple_adder.h"
 
-const fruit::Component<Incrementer>& getSimpleIncrementerComponent() {
-  static const fruit::Component<Incrementer> comp = fruit::createComponent()
-    .install(getIncrementerImplComponent())
-    .install(getSimpleAdderComponent());
-  return comp;
+fruit::Component<Incrementer> getSimpleIncrementerComponent() {
+  return fruit::createComponent()
+    .install(getIncrementerImplComponent)
+    .install(getSimpleAdderComponent);
 }
diff --git a/examples/simple_injection/simple_incrementer.h b/examples/simple_injection/simple_incrementer.h
index 47481d5..6ff18ce 100644
--- a/examples/simple_injection/simple_incrementer.h
+++ b/examples/simple_injection/simple_incrementer.h
@@ -20,6 +20,6 @@
 #include <fruit/fruit.h>
 #include "incrementer.h"
 
-const fruit::Component<Incrementer>& getSimpleIncrementerComponent();
+fruit::Component<Incrementer> getSimpleIncrementerComponent();
 
 #endif // SIMPLE_INCREMENTER_H
diff --git a/extras/benchmark/compile_time_benchmark.cpp b/extras/benchmark/compile_time_benchmark.cpp
index 951e957..92f55d7 100644
--- a/extras/benchmark/compile_time_benchmark.cpp
+++ b/extras/benchmark/compile_time_benchmark.cpp
@@ -126,7 +126,7 @@
 struct Z##N {                                         \
 };                                                    \
                                                       \
-const Component<Required<Y##N>, Z##N>& getZ##N##Component(); \
+Component<Required<Y##N>, Z##N> getZ##N##Component(); \
 
 #define REQUIREMENTS(N)                               \
 C##N,
@@ -137,14 +137,13 @@
 #define BINDINGS(N)                                   \
     .bind<I##N, X##N>()                               \
     .bindInstance(b##N)                               \
-    .install(getZ##N##Component())                    \
+    .install(getZ##N##Component)                      \
     .registerProvider([](){return Y##N();})
 
 EVAL(REPEAT(DEFINITIONS))
 
-const Component<Required<EVAL(REPEAT(REQUIREMENTS)) int>>& getComponent(EVAL(REPEAT(PARAMETERS)) int) {
-  static const Component<Required<EVAL(REPEAT(REQUIREMENTS)) int>> comp = createComponent()
+Component<Required<EVAL(REPEAT(REQUIREMENTS)) int>> getComponent(EVAL(REPEAT(PARAMETERS)) int) {
+  return createComponent()
     EVAL(REPEAT(BINDINGS))
     ;
-  return comp;
 }
diff --git a/include/fruit/component.h b/include/fruit/component.h
index 9e35907..5f37262 100644
--- a/include/fruit/component.h
+++ b/include/fruit/component.h
@@ -104,8 +104,8 @@
  * 
  * const fruit::Component<Foo>& getFooComponent() {
  *   static const fruit::Component<Foo> comp = fruit::createComponent()
- *      .install(getComponent1())
- *      .install(getComponent2())
+ *      .install(getComponent1)
+ *      .install(getComponent2)
  *      .bind<Foo, FooImpl>();
  *   return comp;
  * }
@@ -141,8 +141,8 @@
  * 
  * fruit::Component<Foo> getFooComponent() {
  *   return fruit::createComponent()
- *      .install(getComponent1())
- *      .install(getComponent2())
+ *      .install(getComponent1)
+ *      .install(getComponent2)
  *      .bind<Foo, FooImpl>();
  * }
  * 
@@ -478,8 +478,8 @@
    * Example usage:
    * 
    * createComponent()
-   *    .install(getComponent1())
-   *    .install(getComponent2())
+   *    .install(getComponent1)
+   *    .install(getComponent2)
    * 
    * As in the example, the template parameters will be inferred by the compiler, it's not necessary to specify them explicitly.
    */