             output += "    func instantiateViewController<T: \(returnType) where T: IdentifiableProtocol>(type: T.Type) -> T? {\n"
             output += "        let instance = type.init()\n"
             output += "        if let identifier = instance.storyboardIdentifier {\n"
-            output += "            return self.instantiate\(signatureType)WithIdentifier(identifier) as? T\n"
+            output += "            return self.instantiate\(signatureType)(withIdentifier: identifier) as? T\n"
             output += "        }\n"
             output += "        return nil\n"
             output += "    }\n"

            output += "\n\n"
            output += "extension UICollectionView {\n"
            output += "\n\n"
            output += "    func dequeueReusableCell<T: ReusableViewProtocol>(reusable: T, forIndexPath: NSIndexPath!) -> UICollectionViewCell? {\n"
            output += "        if let identifier = reusable.storyboardIdentifier {\n"
            output += "            return dequeueReusableCellWithReuseIdentifier(identifier, forIndexPath: forIndexPath)\n"
            output += "        }\n"
            output += "        return nil\n"
            output += "    }\n"
            output += "\n\n"
            output += "    func registerReusableCell<T: ReusableViewProtocol>(reusable: T) {\n"
            output += "        if let type = reusable.viewType, identifier = reusable.storyboardIdentifier {\n"
            output += "            registerClass(type, forCellWithReuseIdentifier: identifier)\n"
            output += "        }\n"
            output += "    }\n"
            output += "\n\n"
            output += "    func dequeueReusableSupplementaryViewOfKind<T: ReusableViewProtocol>(elementKind: String, withReusable reusable: T, forIndexPath: NSIndexPath!) -> UICollectionReusableView? {\n"
            output += "        if let identifier = reusable.storyboardIdentifier {\n"
            output += "            return dequeueReusableSupplementaryViewOfKind(elementKind, withReuseIdentifier: identifier, forIndexPath: forIndexPath)\n"
            output += "        }\n"
            output += "        return nil\n"
            output += "    }\n"
            output += "\n\n"
            output += "    func registerReusable<T: ReusableViewProtocol>(reusable: T, forSupplementaryViewOfKind elementKind: String) {\n"
            output += "        if let type = reusable.viewType, identifier = reusable.storyboardIdentifier {\n"
            output += "            registerClass(type, forSupplementaryViewOfKind: elementKind, withReuseIdentifier: identifier)\n"
            output += "        }\n"
            output += "    }\n"
            output += "}\n"

        for controllerType in os.storyboardControllerTypes {
            output += "//MARK: - \(controllerType) extension\n"
            output += "extension \(controllerType) {\n"
            output += "    func perform<T: SegueProtocol>(segue: T, sender: AnyObject?) {\n"
            output += "        if let identifier = segue.identifier {\n"
            output += "            performSegue(withIdentifier: identifier, sender: sender)\n"
            output += "        }\n"
            output += "    }\n"
            output += "\n\n"
            output += "    func perform<T: SegueProtocol>(segue: T) {\n"
            output += "        perform(segue: segue, sender: nil)\n"
            output += "    }\n"
            output += "}\n"
            output += "\n\n"
