diff --git a/pkg/phase/client.go b/pkg/phase/client.go
index ad4e7b64d..fd256b681 100644
--- a/pkg/phase/client.go
+++ b/pkg/phase/client.go
@@ -246,6 +246,20 @@ func (p *plan) Run(ro ifc.RunOptions) error {
 	return nil
 }
 
+// Status returns the status of phases in a given plan
+func (p *plan) Status(options ifc.StatusOptions) (ifc.PlanStatus, error) {
+	for _, step := range p.apiObj.Phases {
+		phase, err := p.phaseClient.PhaseByID(ifc.ID{Name: step.Name})
+		if err != nil {
+			return ifc.PlanStatus{}, err
+		}
+		if _, err = phase.Status(); err != nil {
+			return ifc.PlanStatus{}, err
+		}
+	}
+	return ifc.PlanStatus{}, nil
+}
+
 var _ ifc.Client = &client{}
 
 type client struct {
diff --git a/pkg/phase/ifc/phase.go b/pkg/phase/ifc/phase.go
index 618689292..827215fdc 100644
--- a/pkg/phase/ifc/phase.go
+++ b/pkg/phase/ifc/phase.go
@@ -41,8 +41,15 @@ type PhaseStatus struct {
 type Plan interface {
 	Validate() error
 	Run(RunOptions) error
+	Status(StatusOptions) (PlanStatus, error)
 }
 
+// StatusOptions is used to define status options
+type StatusOptions struct{}
+
+// PlanStatus is a struct which defines status of PLAN
+type PlanStatus struct{}
+
 // ID uniquely identifies the phase
 type ID struct {
 	Name      string