Index: branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs
===================================================================
--- branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs	(revision 16040)
+++ branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.Designer.cs	(revision 16043)
@@ -153,5 +153,5 @@
       this.startDateTimePicker.Size = new System.Drawing.Size(200, 20);
       this.startDateTimePicker.TabIndex = 9;
-      this.startDateTimePicker.ValueChanged += new System.EventHandler(this.startDateTimePicker_ValueChanged);
+      this.startDateTimePicker.ValueChanged += new System.EventHandler(this.startDateTimePicker_ValueChanged);      
       // 
       // startLabel
Index: branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs
===================================================================
--- branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs	(revision 16040)
+++ branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectView.cs	(revision 16043)
@@ -67,6 +67,27 @@
     }
 
+    protected void RegisterControlEvents() {
+      nameTextBox.TextChanged += nameTextBox_TextChanged;
+      nameTextBox.Validating += nameTextBox_Validating;
+      descriptionTextBox.TextChanged += descriptionTextBox_TextChanged;
+      ownerComboBox.SelectedIndexChanged += ownerComboBox_SelectedIndexChanged;
+      startDateTimePicker.ValueChanged += startDateTimePicker_ValueChanged;
+      endDateTimePicker.ValueChanged += endDateTimePicker_ValueChanged;
+      indefiniteCheckBox.CheckedChanged += indefiniteCheckBox_CheckedChanged;
+    }
+
+    protected void DeregisterControlEvents() {
+      nameTextBox.TextChanged -= nameTextBox_TextChanged;
+      nameTextBox.Validating -= nameTextBox_Validating;
+      descriptionTextBox.TextChanged -= descriptionTextBox_TextChanged;
+      ownerComboBox.SelectedIndexChanged -= ownerComboBox_SelectedIndexChanged;
+      startDateTimePicker.ValueChanged -= startDateTimePicker_ValueChanged;
+      endDateTimePicker.ValueChanged -= endDateTimePicker_ValueChanged;
+      indefiniteCheckBox.CheckedChanged -= indefiniteCheckBox_CheckedChanged;
+    }
+
     protected override void OnContentChanged() {
       base.OnContentChanged();
+      DeregisterControlEvents();
       if (Content == null) {
         idTextBox.Clear();
@@ -98,4 +119,5 @@
         endDateTimePicker.Enabled = !indefiniteCheckBox.Checked;
       }
+      RegisterControlEvents();
     }
 
@@ -112,10 +134,17 @@
       indefiniteCheckBox.Enabled = enabled;
 
-      if (!IsAdmin() && !HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id)) {
-        ownerComboBox.Enabled = false;
-        startDateTimePicker.Enabled = false;
-        endDateTimePicker.Enabled = false;
-        indefiniteCheckBox.Enabled = false;
-      } 
+      if(Content != null) {
+        var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault();
+        if (parentProject == null || parentProject.EndDate.HasValue) {
+          indefiniteCheckBox.Enabled = false;
+        }
+
+        if (!IsAdmin() && !HiveAdminClient.Instance.CheckOwnershipOfParentProject(Content, UserInformation.Instance.User.Id)) {
+          ownerComboBox.Enabled = false;
+          startDateTimePicker.Enabled = false;
+          endDateTimePicker.Enabled = false;
+          indefiniteCheckBox.Enabled = false;
+        }
+      }
     }
     #endregion
@@ -187,11 +216,17 @@
 
     private void nameTextBox_TextChanged(object sender, EventArgs e) {
-      if (Content != null && Content.Name != nameTextBox.Text)
+      if (Content != null && Content.Name != nameTextBox.Text) {
+        DeregisterContentEvents();
         Content.Name = nameTextBox.Text;
+        RegisterContentEvents();
+      }        
     }
 
     private void descriptionTextBox_TextChanged(object sender, EventArgs e) {
-      if (Content != null && Content.Description != descriptionTextBox.Text)
+      if (Content != null && Content.Description != descriptionTextBox.Text) {
+        DeregisterContentEvents();
         Content.Description = descriptionTextBox.Text;
+        RegisterContentEvents();
+      }        
     }
 
@@ -199,24 +234,60 @@
       var selectedItem = (LightweightUser)ownerComboBox.SelectedItem;
       var selectedOwnerUserId = selectedItem != null ? selectedItem.Id : Guid.Empty;
-      if (Content != null && Content.OwnerUserId != selectedOwnerUserId)
+      if (Content != null && Content.OwnerUserId != selectedOwnerUserId) {
+        DeregisterContentEvents();
         Content.OwnerUserId = selectedOwnerUserId;
+        RegisterContentEvents();
+      }        
     }
 
     private void startDateTimePicker_ValueChanged(object sender, EventArgs e) {
       if (Content == null) return;
- 
+      startDateTimePicker.ValueChanged -= startDateTimePicker_ValueChanged;
+
+      if (!IsAdmin()) {
+        var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault();
+        if (parentProject != null) {
+          if(startDateTimePicker.Value < parentProject.StartDate)
+            startDateTimePicker.Value = parentProject.StartDate;
+        } else {
+          startDateTimePicker.Value = Content.StartDate;
+        }
+      }
+
       if (!Content.EndDate.HasValue || startDateTimePicker.Value > Content.EndDate)
         endDateTimePicker.Value = startDateTimePicker.Value;
-      if (Content.StartDate != startDateTimePicker.Value)
+      if (Content.StartDate != startDateTimePicker.Value) {
+        DeregisterContentEvents();
         Content.StartDate = startDateTimePicker.Value;
+        RegisterContentEvents();
+      }        
+
+      startDateTimePicker.ValueChanged += startDateTimePicker_ValueChanged;
     }
 
     private void endDateTimePicker_ValueChanged(object sender, EventArgs e) {
       if (Content == null) return;
+      endDateTimePicker.ValueChanged -= endDateTimePicker_ValueChanged;
+
+      if (!IsAdmin()) {
+        var parentProject = HiveAdminClient.Instance.GetAvailableProjectAncestors(Content.Id).LastOrDefault();
+        if (parentProject != null) {
+          if (parentProject.EndDate.HasValue && endDateTimePicker.Value > parentProject.EndDate.Value) {
+            endDateTimePicker.Value = parentProject.EndDate.Value;
+          }
+        } else if(Content.EndDate.HasValue) {
+          endDateTimePicker.Value = Content.EndDate.Value;
+        }
+      }
 
       if (endDateTimePicker.Value < startDateTimePicker.Value)
         endDateTimePicker.Value = startDateTimePicker.Value;
-      if (Content.EndDate != endDateTimePicker.Value)
+      if (Content.EndDate != endDateTimePicker.Value) {
+        DeregisterContentEvents();
         Content.EndDate = endDateTimePicker.Value;
+        RegisterContentEvents();
+      }        
+
+      endDateTimePicker.ValueChanged += endDateTimePicker_ValueChanged;
     }
 
Index: branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs
===================================================================
--- branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs	(revision 16040)
+++ branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectsView.cs	(revision 16043)
@@ -197,8 +197,7 @@
     }
 
-    private void addButton_Click(object sender, EventArgs e) {
-      Guid? parentProjectId = null;
-
-      if(selectedProject == null && !IsAdmin()) {
+    private void addButton_Click(object sender, EventArgs e) {      
+
+      if (selectedProject == null && !IsAdmin()) {
         MessageBox.Show(
           "You are not allowed to add a root project - please select a parent project.",
@@ -218,10 +217,12 @@
       }
 
-      if (selectedProject != null) parentProjectId = selectedProject.Id;
       var project = new Project {
         Name = "New Project",
-        OwnerUserId = UserInformation.Instance.User.Id,
-        ParentProjectId = parentProjectId
+        OwnerUserId = UserInformation.Instance.User.Id,        
       };
+      if(selectedProject != null) {
+        project.ParentProjectId = selectedProject.Id;
+        project.EndDate = selectedProject.EndDate;
+      }
 
       SelectedProject = project;
@@ -508,5 +509,8 @@
 
       bool addEnabled = !locked;
-      if (!IsAdmin() && project == null) addEnabled = false;
+      if(addEnabled) {
+        var now = DateTime.Now;
+        if (now < project.StartDate || now > project.EndDate) addEnabled = false;
+      }
 
       bool saveEnabled = project != null;
