diff --git a/apis/management.cattle.io/v3/alerting_types.go b/apis/management.cattle.io/v3/alerting_types.go
index 1f839ac2..3a608daf 100644
--- a/apis/management.cattle.io/v3/alerting_types.go
+++ b/apis/management.cattle.io/v3/alerting_types.go
@@ -161,6 +161,7 @@ type ClusterAlertRuleSpec struct {
 	EventRule         *EventRule         `json:"eventRule,omitempty"`
 	SystemServiceRule *SystemServiceRule `json:"systemServiceRule,omitempty"`
 	MetricRule        *MetricRule        `json:"metricRule,omitempty"`
+	ClusterScanRule   *ClusterScanRule   `json:"clusterScanRule,omitempty"`
 }
 
 type ProjectAlertRule struct {
@@ -199,6 +200,11 @@ type CommonRuleField struct {
 	TimingField
 }
 
+type ClusterScanRule struct {
+	ScanRunType  ClusterScanRunType `json:"scanRunType,omitempty" norman:"required,options=manual|scheduled,default=scheduled"`
+	FailuresOnly bool               `json:"failuresOnly,omitempty"`
+}
+
 type MetricRule struct {
 	Expression     string  `json:"expression,omitempty" norman:"required"`
 	Description    string  `json:"description,omitempty"`
diff --git a/apis/management.cattle.io/v3/cluster_scan_types.go b/apis/management.cattle.io/v3/cluster_scan_types.go
index e3f1e8e7..5a6cbc87 100644
--- a/apis/management.cattle.io/v3/cluster_scan_types.go
+++ b/apis/management.cattle.io/v3/cluster_scan_types.go
@@ -9,11 +9,15 @@ import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
+type ClusterScanRunType string
+type CisScanProfileType string
+
 const (
 	ClusterScanConditionCreated      condition.Cond = typescond.Created
 	ClusterScanConditionRunCompleted condition.Cond = typescond.RunCompleted
 	ClusterScanConditionCompleted    condition.Cond = typescond.Completed
 	ClusterScanConditionFailed       condition.Cond = typescond.Failed
+	ClusterScanConditionAlerted      condition.Cond = typescond.Alerted
 
 	ClusterScanTypeCis         = "cis"
 	DefaultNamespaceForCis     = "security-scan"
@@ -23,6 +27,14 @@ const (
 	RunCisScanAnnotation         = "field.cattle.io/runCisScan"
 	SonobuoyCompletionAnnotation = "field.cattle.io/sonobuoyDone"
 	CisHelmChartOwner            = "field.cattle.io/clusterScanOwner"
+
+	ClusterScanRunTypeManual    ClusterScanRunType = "manual"
+	ClusterScanRunTypeScheduled ClusterScanRunType = "scheduled"
+
+	CisScanProfileTypePermissive CisScanProfileType = "permissive"
+	CisScanProfileTypeHardened   CisScanProfileType = "hardened"
+
+	DefaultScanOutputFileName string = "output.json"
 )
 
 type CisScanConfig struct {
@@ -30,12 +42,22 @@ type CisScanConfig struct {
 	OverrideSkip []string `json:"overrideSkip"`
 	// Override the CIS benchmark version to use for the scan (instead of latest)
 	OverrideBenchmarkVersion string `json:"overrideBenchmarkVersion,omitempty"`
+	// scan profile to use
+	Profile CisScanProfileType `json:"profile,omitempty" norman:"required,options=permissive|hardened,default=permissive"`
 	// Internal flag for debugging master component of the scan
 	DebugMaster bool `json:"debugMaster"`
 	// Internal flag for debugging worker component of the scan
 	DebugWorker bool `json:"debugWorker"`
 }
 
+type CisScanStatus struct {
+	Total         int `json:"total"`
+	Pass          int `json:"pass"`
+	Fail          int `json:"fail"`
+	Skip          int `json:"skip"`
+	NotApplicable int `json:"notApplicable"`
+}
+
 type ClusterScanConfig struct {
 	CisScanConfig *CisScanConfig `json:"cisScanConfig"`
 }
@@ -59,14 +81,15 @@ type ClusterScanSpec struct {
 	ScanType string `json:"scanType"`
 	// cluster ID
 	ClusterID string `json:"clusterId,omitempty" norman:"required,type=reference[cluster]"`
-	// manual flag
-	Manual bool `yaml:"manual" json:"manual,omitempty"`
+	// Run type
+	RunType ClusterScanRunType `json:"runType,omitempty"`
 	// scanConfig
 	ScanConfig ClusterScanConfig `yaml:",omitempty" json:"scanConfig,omitempty"`
 }
 
 type ClusterScanStatus struct {
-	Conditions []ClusterScanCondition `json:"conditions"`
+	Conditions    []ClusterScanCondition `json:"conditions"`
+	CisScanStatus *CisScanStatus         `json:"cisScanStatus"`
 }
 
 type ClusterScan struct {
@@ -80,7 +103,10 @@ type ClusterScan struct {
 }
 
 type CisBenchmarkVersionInfo struct {
-	MinKubernetesVersion string `yaml:"min_kubernetes_version" json:"minKubernetesVersion"`
+	Managed              bool              `yaml:"managed" json:"managed"`
+	MinKubernetesVersion string            `yaml:"min_kubernetes_version" json:"minKubernetesVersion"`
+	SkippedChecks        map[string]string `yaml:"skipped_checks" json:"skippedChecks"`
+	NotApplicableChecks  map[string]string `yaml:"not_applicable_checks" json:"notApplicableChecks"`
 }
 
 type CisConfigParams struct {
@@ -104,3 +130,22 @@ type CisBenchmarkVersion struct {
 
 	Info CisBenchmarkVersionInfo `json:"info" yaml:"info"`
 }
+
+type ScheduledClusterScanConfig struct {
+	// Cron Expression for Schedule
+	CronSchedule string `yaml:"cron_schedule" json:"cronSchedule,omitempty"`
+	// Number of past scans to keep
+	Retention int `yaml:"retention" json:"retention,omitempty"`
+}
+
+type ScheduledClusterScan struct {
+	// Enable or disable scheduled scans
+	Enabled        bool                        `yaml:"enabled" json:"enabled,omitempty" norman:"default=false"`
+	ScheduleConfig *ScheduledClusterScanConfig `yaml:"schedule_config" json:"scheduleConfig,omitempty"`
+	ScanConfig     *ClusterScanConfig          `yaml:"scan_config,omitempty" json:"scanConfig,omitempty"`
+}
+
+type ScheduledClusterScanStatus struct {
+	Enabled          bool   `yaml:"enabled" json:"enabled,omitempty"`
+	LastRunTimestamp string `yaml:"last_run_timestamp" json:"lastRunTimestamp"`
+}
diff --git a/apis/management.cattle.io/v3/cluster_types.go b/apis/management.cattle.io/v3/cluster_types.go
index 17c1d599..5a66b083 100644
--- a/apis/management.cattle.io/v3/cluster_types.go
+++ b/apis/management.cattle.io/v3/cluster_types.go
@@ -103,6 +103,7 @@ type ClusterSpecBase struct {
 	EnableClusterMonitoring              bool                           `json:"enableClusterMonitoring" norman:"default=false"`
 	WindowsPreferedCluster               bool                           `json:"windowsPreferedCluster" norman:"noupdate"`
 	LocalClusterAuthEndpoint             LocalClusterAuthEndpoint       `json:"localClusterAuthEndpoint,omitempty"`
+	ScheduledClusterScan                 *ScheduledClusterScan          `json:"scheduledClusterScan,omitempty"`
 }
 
 type ClusterSpec struct {
@@ -131,27 +132,28 @@ type ClusterStatus struct {
 	Conditions []ClusterCondition `json:"conditions,omitempty"`
 	// Component statuses will represent cluster's components (etcd/controller/scheduler) health
 	// https://kubernetes.io/docs/api-reference/v1.8/#componentstatus-v1-core
-	Driver                               string                    `json:"driver"`
-	AgentImage                           string                    `json:"agentImage"`
-	AgentFeatures                        map[string]bool           `json:"agentFeatures,omitempty"`
-	AuthImage                            string                    `json:"authImage"`
-	ComponentStatuses                    []ClusterComponentStatus  `json:"componentStatuses,omitempty"`
-	APIEndpoint                          string                    `json:"apiEndpoint,omitempty"`
-	ServiceAccountToken                  string                    `json:"serviceAccountToken,omitempty"`
-	CACert                               string                    `json:"caCert,omitempty"`
-	Capacity                             v1.ResourceList           `json:"capacity,omitempty"`
-	Allocatable                          v1.ResourceList           `json:"allocatable,omitempty"`
-	AppliedSpec                          ClusterSpec               `json:"appliedSpec,omitempty"`
-	FailedSpec                           *ClusterSpec              `json:"failedSpec,omitempty"`
-	Requested                            v1.ResourceList           `json:"requested,omitempty"`
-	Limits                               v1.ResourceList           `json:"limits,omitempty"`
-	Version                              *version.Info             `json:"version,omitempty"`
-	AppliedPodSecurityPolicyTemplateName string                    `json:"appliedPodSecurityPolicyTemplateId"`
-	AppliedEnableNetworkPolicy           bool                      `json:"appliedEnableNetworkPolicy" norman:"nocreate,noupdate,default=false"`
-	Capabilities                         Capabilities              `json:"capabilities,omitempty"`
-	MonitoringStatus                     *MonitoringStatus         `json:"monitoringStatus,omitempty" norman:"nocreate,noupdate"`
-	IstioEnabled                         bool                      `json:"istioEnabled,omitempty" norman:"nocreate,noupdate,default=false"`
-	CertificatesExpiration               map[string]CertExpiration `json:"certificatesExpiration,omitempty"`
+	Driver                               string                      `json:"driver"`
+	AgentImage                           string                      `json:"agentImage"`
+	AgentFeatures                        map[string]bool             `json:"agentFeatures,omitempty"`
+	AuthImage                            string                      `json:"authImage"`
+	ComponentStatuses                    []ClusterComponentStatus    `json:"componentStatuses,omitempty"`
+	APIEndpoint                          string                      `json:"apiEndpoint,omitempty"`
+	ServiceAccountToken                  string                      `json:"serviceAccountToken,omitempty"`
+	CACert                               string                      `json:"caCert,omitempty"`
+	Capacity                             v1.ResourceList             `json:"capacity,omitempty"`
+	Allocatable                          v1.ResourceList             `json:"allocatable,omitempty"`
+	AppliedSpec                          ClusterSpec                 `json:"appliedSpec,omitempty"`
+	FailedSpec                           *ClusterSpec                `json:"failedSpec,omitempty"`
+	Requested                            v1.ResourceList             `json:"requested,omitempty"`
+	Limits                               v1.ResourceList             `json:"limits,omitempty"`
+	Version                              *version.Info               `json:"version,omitempty"`
+	AppliedPodSecurityPolicyTemplateName string                      `json:"appliedPodSecurityPolicyTemplateId"`
+	AppliedEnableNetworkPolicy           bool                        `json:"appliedEnableNetworkPolicy" norman:"nocreate,noupdate,default=false"`
+	Capabilities                         Capabilities                `json:"capabilities,omitempty"`
+	MonitoringStatus                     *MonitoringStatus           `json:"monitoringStatus,omitempty" norman:"nocreate,noupdate"`
+	IstioEnabled                         bool                        `json:"istioEnabled,omitempty" norman:"nocreate,noupdate,default=false"`
+	CertificatesExpiration               map[string]CertExpiration   `json:"certificatesExpiration,omitempty"`
+	ScheduledClusterScanStatus           *ScheduledClusterScanStatus `json:"scheduledClusterScanStatus,omitempty"`
 }
 
 type ClusterComponentStatus struct {
diff --git a/condition/constants.go b/condition/constants.go
index f0d94bd6..e5210e45 100644
--- a/condition/constants.go
+++ b/condition/constants.go
@@ -18,4 +18,9 @@ const (
 	// error type
 
 	Failed cond.Cond = "Failed"
+
+	// generic type
+	// these will not trigger any state change on the object
+
+	Alerted cond.Cond = "Alerted"
 )