         if additionalButtons.count > 0 {
             scrollViewContainer.addSubview(additionalButtonsTable)
         }
-        
+    }
+
+    private func createAndAddTableHeaderLabel(scrollViewContainer scrollViewContainer: UIView) -> UILabel {
         let tableHeaderLabel = UILabel()
         tableHeaderLabel.translatesAutoresizingMaskIntoConstraints = false
         tableHeaderLabel.font = UIFont.systemFontOfSize(sizeForPercent(4.375), weight: -1)
-
+        
         if let theFont = fontHeaderLabel {
             tableHeaderLabel.font = theFont
         }

        headerView.addSubview(appNameLabel)
        appNameLabel.sizeToFit()
        appNameLabel.layoutIfNeeded()
        
        let copyrightInfo = UILabel()
        copyrightInfo.translatesAutoresizingMaskIntoConstraints = false
        copyrightInfo.font = UIFont.systemFontOfSize(sizeForPercent(4.375), weight: -1)

        if let theFont = fontCopyrightInfo {
            copyrightInfo.font = theFont
        }

            }
        }
        
        let mainScrollView = createMainScrollView()
        view.addSubview(mainScrollView)
        
        let scrollViewContainer = createScrollViewContainer()
        mainScrollView.addSubview(scrollViewContainer)
        
        let headerView = createHeaderView()
        scrollViewContainer.addSubview(headerView)
        
        let headerBackground = createHeaderBackground(headerView: headerView)
        headerView.addSubview(headerBackground)
        
        let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: blurStyle))
        visualEffectView.translatesAutoresizingMaskIntoConstraints = true
        visualEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        
        if headerBackgroundImage != nil {
            headerBackground.addSubview(visualEffectView)
        }
        
        let appNameLabel = createAndAddNameLabel(headerView: headerView)
        let copyrightInfo = createAndAddCopyrightLabel(headerView: headerView)
        
        let websiteButton = UIButton(type: .Custom)
        
        if let _ = websiteURL {
            var buttonFont = UIFont.systemFontOfSize(sizeForPercent(4.375), weight: -1)
            if let theFont = fontWebsiteButton {
                buttonFont = theFont
            }
            setupAndAddHeaderButton(websiteButton, title: websiteURLTitle, font: buttonFont, target: "goToWebsite", headerView: headerView)
        }
        
        let eMailButton = UIButton(type: .Custom)
        
        if let _ = contactEmail {
            var buttonFont = UIFont.systemFontOfSize(sizeForPercent(4.375), weight: -1)
            if let theFont = fontEmailButton {
                buttonFont = theFont
            }
            setupAndAddHeaderButton(eMailButton, title: contactEmailTitle, font: buttonFont, target: "email", headerView: headerView)
        }

        createAndAddAdditionalButtonsTable(scrollViewContainer: scrollViewContainer)
        
        let tableHeaderLabel = createAndAddTableHeaderLabel(scrollViewContainer: scrollViewContainer)
        
        createAndAddAcknowledgementsTableView(scrollViewContainer: scrollViewContainer)
        
        setConstraints(mainScrollView: mainScrollView, scrollViewContainer: scrollViewContainer, headerView: headerView, appNameLabel: appNameLabel, copyrightInfo: copyrightInfo, eMailButton: eMailButton, websiteButton: websiteButton, tableHeaderLabel: tableHeaderLabel)
    }
    
    public override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        
        navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: navigationBarTitleTextColor]
        if navigationController?.viewControllers.first == self {
            let leftItem = UIBarButtonItem(image:closeButtonImage, style: .Plain, target: self, action: Selector("close"))
            navigationItem.leftBarButtonItem = leftItem
        }
        navigationItem.title = NSLocalizedString("About", comment:"UINavigationBar Title")
    }
    
    //MARK:- UITableView Delegate & Data Source
    
    public func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        switch tableView {
        case additionalButtonsTable:
            return additionalButtons.count
        case acknowledgementsTableView:
            return acknowledgements.count
        default:
            return 0
        }
    }
    
    public func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    
    public func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCellWithIdentifier("Cell")
        
        if cell==nil {
            cell = UITableViewCell(style: .Default, reuseIdentifier: "Cell")
            cell?.textLabel?.font = UIFont.systemFontOfSize(sizeForPercent(4.688), weight: -1)

            if let theFont = fontTableCellText {
                cell?.textLabel?.font = theFont
            }
            cell?.selectionStyle = .Default
            
            if let cellBGColor = tableViewSelectionColor {
                let bgColorView = UIView()
                bgColorView.backgroundColor = cellBGColor
                cell?.selectedBackgroundView = bgColorView
            }
            
            var title = ""
            if tableView == additionalButtonsTable {
                title = (additionalButtons[indexPath.row].keys.first)!
            } else {
                title = (acknowledgements[indexPath.row].keys.first)!
            }
            cell?.textLabel?.textColor = tableViewTextColor
            cell?.backgroundColor = tableViewBackgroundColor
            cell?.textLabel!.text = title
            cell?.accessoryType = .DisclosureIndicator
        }
        
        return cell!
    }
    
    public func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        let cell = tableView.cellForRowAtIndexPath(indexPath)
        cell!.selected = false
        
        var theDict = [String: String]()
        
        if tableView == additionalButtonsTable {
            theDict = additionalButtons[indexPath.row]
        } else {
            theDict = acknowledgements[indexPath.row]
        }
        showDetailViewController(theDict)
    }
    
    private func showDetailViewController(infoDictionary: [String:String]) {
        let viewController = RFAboutViewDetailViewController(infoDictionary: infoDictionary)
        viewController.showsScrollIndicator = showsScrollIndicator
        viewController.backgroundColor = backgroundColor
        viewController.tintColor = tintColor
        viewController.fontLicenseText = fontLicenseText
        viewController.textColor = acknowledgementsHeaderColor
        navigationItem.backBarButtonItem = UIBarButtonItem(title: nil, style: .Plain, target: nil, action: nil)
        navigationController?.pushViewController(viewController, animated: true)
    }
    
    private func createMainScrollView() -> UIScrollView {
        let mainScrollView = UIScrollView()
        mainScrollView.translatesAutoresizingMaskIntoConstraints = false
        mainScrollView.backgroundColor = .clearColor()
        mainScrollView.showsHorizontalScrollIndicator = false
        mainScrollView.showsVerticalScrollIndicator = showsScrollIndicator
        return mainScrollView
    }
    
    private func createScrollViewContainer() -> UIView {
        let scrollViewContainer = UIView()
        scrollViewContainer.translatesAutoresizingMaskIntoConstraints = false
        scrollViewContainer.backgroundColor = .clearColor()
        return scrollViewContainer
    }
    
    private func createHeaderView() -> UIView {
        let headerView = UIView()
        headerView.translatesAutoresizingMaskIntoConstraints = false
        headerView.backgroundColor = headerBackgroundColor
        headerView.layer.borderColor = headerBorderColor.CGColor
        headerView.layer.borderWidth = 0.5
        headerView.clipsToBounds = true
        return headerView
    }
    
    private func createHeaderBackground(headerView headerView: UIView) -> UIImageView {
        let headerBackground = UIImageView()
        headerBackground.translatesAutoresizingMaskIntoConstraints = true
        headerBackground.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        headerBackground.image = headerBackgroundImage
        headerBackground.contentMode = .ScaleAspectFill
        headerBackground.frame = headerView.bounds
        return headerBackground
    }
    
    private func createAndAddNameLabel(headerView headerView: UIView) -> UILabel {
        let appNameLabel = UILabel()
        appNameLabel.translatesAutoresizingMaskIntoConstraints = false
        appNameLabel.font = UIFont.systemFontOfSize(sizeForPercent(5.625), weight: -0.5)
        
        if let theFont = fontAppName {
            appNameLabel.font = theFont
        }
