       #if os(iOS) || os(tvOS)
         return Storyboard(name: mainStoryboardName, bundle: Bundle.main)
       #elseif os(macOS)
-         return Storyboard(name: NSStoryboard.Name(rawValue: mainStoryboardName), bundle: Bundle.main)
+        return Storyboard(name: NSStoryboard.Name(rawValue: mainStoryboardName), bundle: Bundle.main)
       #endif
 
     }
   }
 
-  // MARK: - StoryboardIdentifiable
-
-  /// **Mechanica**
-  ///
-  /// Objects adopting the `StoryboardIdentifiable` protocol have an unique Storyboard ID.
-  public protocol StoryboardIdentifiable: class {
+  // MARK: - StoryboardInitializable
+
+  /// **Mechanica**
+  ///
+  /// The protocol `StoryboardInitializable` can be used to fetch the appropriate storyboard and construct a view/window controller instance.
+  public protocol StoryboardInitializable: class {
+    /// **Mechanica**
+    ///
+    /// The name of the storyboard resource file without the filename extension.
+    /// By default the *storyboardName* is *Main*.
+    static var storyboardName: String { get }
+
+    /// **Mechanica**
+    ///
+    /// The bundle containing the storyboard file and its related resources.
+    /// By default the *storyboardBundle* is *nil*.
+    static var storyboardBundle: Bundle? { get }
+
+    /// **Mechanica**
+    ///
+    /// An identifier string that uniquely identifies the view/window controller in the storyboard file.
+    /// By default the *storyboardIdentifier* (**Storyboard ID**) is the name of the class.
     static var storyboardIdentifier: String { get }
-  }
-
-  extension StoryboardIdentifiable {
-
-    /// **Mechanica**
-    ///
-    /// By default the *storyboardIdentifier* (**Storyboard ID**) is the name of the class.
+
+    //static func makeFromStoryboard() -> Self
+  }
+
+  extension StoryboardInitializable {
+
+    public static var storyboardName: String {
+      return "Main"
+    }
+
+    public static var storyboardBundle: Bundle? {
+      return nil
+    }
+
     public static var storyboardIdentifier: String {
       return String(describing: self)
     }
 
+    /// **Mechanica**
+    ///
+    /// Constructs a view/window controller instance fetching the appropriate storyboard.
+    public static func makeFromStoryboard() -> Self {
+      let storyboard = UIStoryboard(name: storyboardName, bundle: storyboardBundle)
+      return storyboard.instantiateViewController (
+        withIdentifier: storyboardIdentifier) as! Self
+    }
+
   }
 
 #if os(iOS) || os(tvOS)
-  extension UIViewController : StoryboardIdentifiable {}
+  extension UIViewController : StoryboardInitializable {}
   #elseif os(macOS)
-  extension NSViewController : StoryboardIdentifiable {}
-  extension NSWindowController : StoryboardIdentifiable {}
+  extension NSViewController : StoryboardInitializable {}
+  extension NSWindowController : StoryboardInitializable {}
 #endif
 
   extension Storyboard {

    ///     let mainStoryboard = Storyboard(storyboard: Storyboard.StoryboardName.main)
    ///
    fileprivate convenience init<T: RawRepresentable>(storyboard: T, bundle: Bundle? = nil) where T.RawValue == String {
       #if os(iOS) || os(tvOS)
        self.init(name: storyboard.rawValue, bundle: bundle)
      #elseif os(macOS)
        self.init(name: NSStoryboard.Name(rawValue: storyboard.rawValue), bundle: bundle)


    /// **Mechanica**
    ///
    ///   Instantiates and returns a NSWindowController conforming to `StoryboardInitializable`.
    ///   - Note: In Xcode, set the NSWindowController class name as **Storyboard ID**.
    ///
    ///   ```
