diff --git a/pkg/tiller/release_update.go b/pkg/tiller/release_update.go
index e94de705d529b88f17746dcf7cb60c559b4cc3c4..28fcf391b4e7f33e53f8bc17608018dd30889e5f 100644
--- a/pkg/tiller/release_update.go
+++ b/pkg/tiller/release_update.go
@@ -161,6 +161,10 @@ func (s *ReleaseServer) performUpdateForce(req *services.UpdateReleaseRequest) (
 		Timeout:      req.Timeout,
 		Wait:         req.Wait,
 	})
+
+	// update new release with next revision number so as to append to the old release's history
+	newRelease.Version = oldRelease.Version + 1
+
 	res := &services.UpdateReleaseResponse{Release: newRelease}
 	if err != nil {
 		s.Log("failed update prepare step: %s", err)
@@ -172,6 +176,12 @@ func (s *ReleaseServer) performUpdateForce(req *services.UpdateReleaseRequest) (
 		return res, err
 	}
 
+	if req.DryRun {
+		s.Log("dry run for %s", newRelease.Name)
+		res.Release.Info.Description = "Dry run complete"
+		return res, nil
+	}
+
 	// From here on out, the release is considered to be in Status_DELETING or Status_DELETED
 	// state. There is no turning back.
 	oldRelease.Info.Status.Code = release.Status_DELETING
@@ -218,8 +228,6 @@ func (s *ReleaseServer) performUpdateForce(req *services.UpdateReleaseRequest) (
 		}
 	}
 
-	// update new release with next revision number so as to append to the old release's history
-	newRelease.Version = oldRelease.Version + 1
 	s.recordRelease(newRelease, false)
 	if err := s.ReleaseModule.Update(oldRelease, newRelease, req, s.env); err != nil {
 		msg := fmt.Sprintf("Upgrade %q failed: %s", newRelease.Name, err)