  @end /* WOHttpAdaptor */
  
  @implementation WOCoreApplication(SimpleParserSelection)
+Index: sope-appserver/NGObjWeb/Defaults.plist
+===================================================================
+--- sope-appserver/NGObjWeb/Defaults.plist	(révision 1623)
++++ sope-appserver/NGObjWeb/Defaults.plist	(copie de travail)
+@@ -216,7 +216,7 @@
+   SoWebDAVDisableCrossHostMoveCheck = NO;
+   
+   SoWebDAVDefaultAllowMethods = (
+-    GET, HEAD, POST, OPTIONS, MKCOL, DELETE, PUT,
++    GET, HEAD, POST, OPTIONS, MKCOL, MKCALENDAR, DELETE, PUT,
+     LOCK, UNLOCK, COPY, MOVE
+     /* , NOTIFY, POLL, SUBSCRIBE, UNSUBSCRIBE */
+   );
+@@ -224,6 +224,7 @@
+   SoWebDAVDetectionMethods = (
+     OPTIONS,
+     MKCOL,
++    MKCALENDAR,
+     PROPFIND,
+     PROPPATCH,
+     DELETE,
 Index: sope-appserver/NGObjWeb/NGHttp/NGHttpRequest.h
 ===================================================================
 --- sope-appserver/NGObjWeb/NGHttp/NGHttpRequest.h	(révision 1623)

     }
   }
   
Index: sope-appserver/NGObjWeb/WOHttpAdaptor/WOHttpTransaction.m
===================================================================
--- sope-appserver/NGObjWeb/WOHttpAdaptor/WOHttpTransaction.m	(révision 1623)

     return [self httpException:400 /* invalid request */
 		 reason:@"XML entity expected for WebDAV REPORT."];
   }
@@ -1601,8 +1601,60 @@
 /* CalDAV */
 
 - (id)doMKCALENDAR:(WOContext *)_ctx {
-  return [self httpException:405 /* method not allowed */
-	       reason:@"CalDAV calendar creation not yet implemented."];
+  SoSecurityManager *sm;
+  NSException       *e;
+  NSString          *pathInfo;
+  
+  pathInfo = [_ctx pathInfo];
+  if (![pathInfo isNotEmpty]) {
+    /* MKCALENDAR target already exists ... */
+    WOResponse *r;
+
+    [self logWithFormat:@"MKCALENDAR target exists !"];
+    
+    r = [_ctx response];
+    [r setStatus:405 /* method not allowed */];
+    [r appendContentString:@"calendar collection already exists !"];
+    return r;
+  }
+  
+  /* check permissions */
+  
+  sm = [_ctx soSecurityManager];
+  e  = [sm validatePermission:SoPerm_AddFolders 
+	   onObject:self->object
+	   inContext:_ctx];
+  if (e != nil) return e;
+
+  /* check whether all the parent collections are available */
+  if ([pathInfo rangeOfString:@"/"].length > 0) {
+    return [self httpException:409 /* Conflict */
+                 reason:
+                   @"invalid WebDAV MKCALENDAR request, first create all "
+		   @"parent collections !"];
+  }
+  
+  /* check whether the object supports creating collections */
+
+  if (![self->object respondsToSelector:
+              @selector(davCreateCalendarCollection:inContext:)]) {
+    /* Note: this should never happen, as this is implemented on NSObject */
+    
+    [self logWithFormat:@"MKCALENDAR: object '%@' path-info '%@'", 
+            self->object, pathInfo];
+    return [self httpException:405 /* not allowed */
+                 reason:
+                   @"this object cannot create a new calendar collection with MKCALENDAR"];
+  }
+  
+  if ((e = [self->object davCreateCalendarCollection:pathInfo inContext:_ctx])) {
+    [self debugWithFormat:@"creation of calendar collection '%@' failed: %@",
+            pathInfo, e];
+    return e;
+  }
+  
+  [self debugWithFormat:@"created calendar collection."];
+  return [NSNumber numberWithBool:YES];
 }
 
 /* DAV access control lists */
Index: sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m
===================================================================
--- sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m	(révision 1623)
+++ sope-appserver/NGObjWeb/WebDAV/SoWebDAVRenderer.m	(copie de travail)
@@ -277,7 +277,8 @@
       ok = [self renderLockToken:_object inContext:_ctx];
     break;
   case 'M':
-    if ([m isEqualToString:@"MKCOL"])
+    if ([m isEqualToString:@"MKCOL"]
+	|| [m isEqualToString:@"MKCALENDAR"])
       ok = [self renderMkColResult:_object inContext:_ctx];
     else if ([m isEqualToString:@"MOVE"]) {
       ok = [self renderStatusResult:_object 
Index: sope-appserver/NGObjWeb/WebDAV/SoObject+SoDAV.h
===================================================================
--- sope-appserver/NGObjWeb/WebDAV/SoObject+SoDAV.h	(révision 1623)
+++ sope-appserver/NGObjWeb/WebDAV/SoObject+SoDAV.h	(copie de travail)
@@ -62,6 +62,7 @@
   properties:(NSDictionary *)_props
   inContext:(id)_ctx;
 - (NSException *)davCreateCollection:(NSString *)_name inContext:(id)_ctx;
+- (NSException *)davCreateCalendarCollection:(NSString *)_name inContext:(id)_ctx;
 
 - (NSException *)davMoveToTargetObject:(id)_target newName:(NSString *)_name
   inContext:(id)_ctx;
Index: sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.m
===================================================================
--- sope-appserver/NGObjWeb/DynamicElements/WOHyperlinkInfo.m	(révision 1623)
