Index: branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs
===================================================================
--- branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs	(revision 15412)
+++ branches/HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs	(revision 15422)
@@ -34,5 +34,4 @@
   public partial class ProjectView : ItemView {
     private readonly object locker = new object();
-    private bool updatingUsers = false;
 
     public new Project Content {
@@ -91,5 +90,5 @@
     protected override void SetEnabledStateOfControls() {
       base.SetEnabledStateOfControls();
-      bool enabled = Content != null;
+      bool enabled = Content != null && !ReadOnly;
       nameTextBox.Enabled = enabled;
       descriptionTextBox.Enabled = enabled;
@@ -138,6 +137,6 @@
     private async void refreshButton_Click(object sender, EventArgs e) {
       lock (locker) {
-        if (updatingUsers) return;
-        updatingUsers = true;
+        if (!refreshButton.Enabled) return;
+        refreshButton.Enabled = false;
       }
 
@@ -149,5 +148,5 @@
           ownerComboBox.SelectedItem = AccessClient.Instance.UsersAndGroups.FirstOrDefault(x => x.Id == Content.OwnerUserId);
           ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;
-          updatingUsers = false;
+          refreshButton.Enabled = true;
         });
     }
@@ -161,30 +160,45 @@
           MessageBoxIcon.Error);
         e.Cancel = true;
-      } else Content.Name = nameTextBox.Text;
-    }
-
-    private void descriptionTextBox_Validating(object sender, CancelEventArgs e) {
-      Content.Description = descriptionTextBox.Text;
+      }
+    }
+
+    private void nameTextBox_TextChanged(object sender, EventArgs e) {
+      if (Content != null && Content.Name != nameTextBox.Text)
+        Content.Name = nameTextBox.Text;
+    }
+
+    private void descriptionTextBox_TextChanged(object sender, EventArgs e) {
+      if (Content != null && Content.Description != descriptionTextBox.Text)
+        Content.Description = descriptionTextBox.Text;
     }
 
     private void ownerComboBox_SelectedIndexChanged(object sender, EventArgs e) {
       var selectedItem = (LightweightUser)ownerComboBox.SelectedItem;
-      Content.OwnerUserId = selectedItem != null ? selectedItem.Id : Guid.Empty;
-    }
-
-    private void startDateTimePicker_Validating(object sender, CancelEventArgs e) {
+      var selectedOwnerUserId = selectedItem != null ? selectedItem.Id : Guid.Empty;
+      if (Content != null && Content.OwnerUserId != selectedOwnerUserId)
+        Content.OwnerUserId = selectedOwnerUserId;
+    }
+
+    private void startDateTimePicker_ValueChanged(object sender, EventArgs e) {
+      if (Content == null) return;
       if (!Content.EndDate.HasValue || startDateTimePicker.Value > Content.EndDate)
         endDateTimePicker.Value = startDateTimePicker.Value;
-      Content.StartDate = startDateTimePicker.Value;
-    }
-
-    private void endDateTimePicker_Validating(object sender, CancelEventArgs e) {
+      if (Content.StartDate != startDateTimePicker.Value)
+        Content.StartDate = startDateTimePicker.Value;
+    }
+
+    private void endDateTimePicker_ValueChanged(object sender, EventArgs e) {
+      if (Content == null) return;
       if (endDateTimePicker.Value < startDateTimePicker.Value)
         endDateTimePicker.Value = startDateTimePicker.Value;
-      Content.EndDate = endDateTimePicker.Value;
+      if (Content.EndDate != endDateTimePicker.Value)
+        Content.EndDate = endDateTimePicker.Value;
     }
 
     private void indefiniteCheckBox_CheckedChanged(object sender, EventArgs e) {
-      Content.EndDate = indefiniteCheckBox.Checked ? (DateTime?)null : Content.StartDate;
+      if (Content == null) return;
+      var newEndDate = indefiniteCheckBox.Checked ? (DateTime?)null : Content.StartDate;
+      if (Content.EndDate != newEndDate)
+        Content.EndDate = newEndDate;
     }
     #endregion
