diff --git a/masterelection/masterelection.go b/masterelection/masterelection.go
index da2f9fd4a2f4c3a6442fe91194bd084e9ef348d3..a979db42efb9289fa8fba6ae229daf91dbedae1b 100644
--- a/masterelection/masterelection.go
+++ b/masterelection/masterelection.go
@@ -156,19 +156,8 @@ func (m *MasterElection) Run() {
 	// Start as a slave.
 	m.setState(STATE_SLAVE)
 
-	var watchIndex uint64
-
 	for !m.stopped {
 
-		// Since a failed Create does not return the
-		// RAFT index, let's optimistically query the lock
-		// before starting just to set a baseline for the
-		// following Watch().
-		if iresponse, err := m.client.Get(m.Path, false, false); err == nil {
-			log.Printf("lock already exists: %+v", iresponse)
-			watchIndex = iresponse.EtcdIndex
-		}
-
 		// Try to acquire the lock. This call will only succeed
 		// if the lockfile does not exist (either because it
 		// expired, or the previous master exited gracefully and
@@ -180,11 +169,15 @@ func (m *MasterElection) Run() {
 			// and renew our TTL.
 			log.Printf("masterelection: we are the master")
 			m.runMaster(response.EtcdIndex)
-		} else {
+		} else if etcdErr, ok := err.(*etcd.EtcdError); ok {
 			// We're not the master. Wait until the lock
 			// is deleted or expires.
-			log.Printf("masterelection: running as slave (%s)", err)
-			m.runSlave(watchIndex)
+			log.Printf("masterelection: running as slave (%v)", etcdErr)
+			m.runSlave(etcdErr.Index)
+		} else {
+			// An error of some other sort! Retry.
+			log.Printf("masterelection: unexpected error: %v", err)
 		}
+
 	}
 }