         case .basic:
             return [.activityIndicator]
         case .message:
-            return [.messagTextView]
+            return [.messageTextView]
         case .messageWithIndicator:
-            return [.messagTextView, .activityIndicator]
+            return [.messageTextView, .activityIndicator]
         case .messageWithIndicatorAndCancelButton:
             if self.loadingViewWindowMode == ALLVWindowMode.windowed {
-                return [.messagTextView, .activityIndicator, .cancelButton]
+                return [.messageTextView, .activityIndicator, .cancelButton]
             } else {
-                return [.messagTextView, .activityIndicator, .cancelButton]
+                return [.messageTextView, .activityIndicator, .cancelButton]
             }
         case .progress:
-            return [.messagTextView, .progressBar]
+            return [.messageTextView, .progressBar]
+        case .progressWithCancelButton:
+            return [.messageTextView, .progressBar, .cancelButton]
         }
     }
     

    }
    
    public func updateMessageLabel(withText message: String) {
        assert(loadingViewType == .message ||
            loadingViewType == .messageWithIndicator ||
            loadingViewType == .messageWithIndicatorAndCancelButton, "ALLoadingView Update Error. Set .Message, .MessageWithIndicator and .MessageWithIndicatorAndCancelButton type to access message label.")
        
        DispatchQueue.main.async {
            self.progress_updateProgressControls(withData: ["message": message])

// building blocks
private enum ALLVViewType {
    case blankSpace
    case messageTextView
    case progressBar
    case cancelButton
    case activityIndicator
