Index: openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl,v
diff -u -r1.48 -r1.49
--- openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl	28 Oct 2006 16:51:50 -0000	1.48
+++ openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl	1 Nov 2006 18:53:44 -0000	1.49
@@ -382,7 +382,6 @@
     
     @error 
 } {
-    set community_id [dotlrn_community::get_community_id]
 
     # Try to retrieve the project_id from the folder
     set project_id [db_string get_project_id_from_folder {
@@ -406,10 +405,14 @@
 
     if {[empty_string_p $project_id]} {
 	# no project -> mail to all organization contacts
-	set contact_organizations [application_data_link::get_linked -from_object_id $community_id -to_object_type "organization"]
-	set contact_list ""
-	foreach party_id $contact_organizations {
-	    set contact_list [concat $contact_list [contact::util::get_employees -organization_id $party_id]]
+	# This only works if we have the whole setup with .LRN
+	if {[apm_package_installed_p "dotlrn"]} {
+	    set community_id [dotlrn_community::get_community_id]
+	    set contact_organizations [application_data_link::get_linked -from_object_id $community_id -to_object_type "organization"]
+	    set contact_list ""
+	    foreach party_id $contact_organizations {
+		set contact_list [concat $contact_list [contact::util::get_employees -organization_id $party_id]]
+	    }
 	}
     } else {
 	# project -> mail to project contact
Index: openacs-4/packages/contacts/tcl/contacts-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/tcl/contacts-procs.tcl,v
diff -u -r1.96 -r1.97
--- openacs-4/packages/contacts/tcl/contacts-procs.tcl	28 Oct 2006 16:51:14 -0000	1.96
+++ openacs-4/packages/contacts/tcl/contacts-procs.tcl	1 Nov 2006 18:53:44 -0000	1.97
@@ -35,7 +35,7 @@
     if { [string is true [parameter::get -package_id $package_id -parameter "UseSubsiteAsDefaultGroup" -default "0"]] } {
 	# we cannot trust ad_conn subsite_id because instances may be asking for subsites of numerous other packages.
         set node_id [site_node::get_node_id_from_object_id -object_id $package_id]
-        set package_id [db_string get_parent_subsite_id {}]
+        set package_id [site_node::closest_ancestor_package -node_id $node_id -package_key "acs-subsite"]
     }
 
     set group_id [application_group::group_id_from_package_id -no_complain -package_id $package_id]
@@ -93,15 +93,34 @@
     associated item_id and live_revisions.
 } {
     
-    set package_id [lindex [apm_package_id_from_key "contacts"] 0]
+    set contact_package_ids [apm_package_ids_from_key -package_key "contacts" -mounted]
+    foreach contact_package_id $contact_package_ids {
+	set default_group_id [contacts::default_group -package_id $contact_package_id]
+	set contact_package($default_group_id) $contact_package_id
+	lappend default_groups $default_group_id
+    }
+
     db_foreach get_persons_without_items {} {
-	ns_log notice "contacts::sweeper creating content_item and content_revision for party_id: $person_id"
-	contact::revision::new -party_id $person_id -package_id $package_id
+	foreach group_id $default_groups {
+	    if {[group::party_member_p -party_id $person_id -group_id $group_id]} {
+		ns_log notice "contacts::sweeper creating content_item and content_revision for party_id: $person_id"
+		contact::revision::new -party_id $person_id -package_id $contact_package($group_id)
+		break
+	    }
+	}
     }
     db_foreach get_organizations_without_items {} {
+	foreach group_id $default_groups {
+	    if {[group::party_member_p -party_id $organization_id -group_id $group_id]} {
+		ns_log notice "contacts::sweeper creating content_item and content_revision for party_id: $organization_id"
+		contact::revision::new -party_id $organization_id -package_id $contact_package($group_id)
+		break
+	    }
+	}
 	ns_log notice "contacts::sweeper creating content_item and content_revision for organization_id: $organization_id"
 	contact::revision::new -party_id $organization_id -package_id $package_id
     }
+
     if { ![info exists person_id] && ![info exists organization_id] } {
 	ns_log Debug "contacts::create_revisions_sweeper no person or organization objects exist that do not have associated content_items"
     }
@@ -637,7 +656,7 @@
     }
 
     set extra_vars [ns_set create]
-    oacs_util::vars_to_ns_set -ns_set $extra_vars -var_list {party_id party_revision_id}
+    oacs_util::vars_to_ns_set -ns_set $extra_vars -var_list {party_id party_revision_id package_id}
     set party_revision_id [package_instantiate_object \
 		-extra_vars $extra_vars contact_party_revision]
     db_dml update_package_id "update acs_objects set package_id = :package_id where object_id = :party_revision_id"