Bug 263838 [rfc 120] conditional permission admin API changes
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/composites/CompositeSecurityTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/composites/CompositeSecurityTests.java
index 6f1eaf4..88f3254 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/composites/CompositeSecurityTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/composites/CompositeSecurityTests.java
@@ -116,8 +116,8 @@
 			assertEquals("Wrong exception type", BundleException.RESOLVE_ERROR, e.getType()); //$NON-NLS-1$
 		}
 
-		ConditionalPermissionsUpdate update = childCondAdmin.createConditionalPermissionsUpdate();
-		List infos = update.getConditionalPermissionInfoBases();
+		ConditionalPermissionUpdate update = childCondAdmin.newConditionalPermissionUpdate();
+		List infos = update.getConditionalPermissionInfos();
 		assertEquals("Wrong number of infos", 1, infos.size()); //$NON-NLS-1$
 		infos.clear();
 
@@ -125,7 +125,7 @@
 		PermissionInfo servicePerm = new PermissionInfo(ServicePermission.class.getName(), "*", ServicePermission.GET + ',' + ServicePermission.REGISTER); //$NON-NLS-1$
 		PermissionInfo allPerm = new PermissionInfo(AllPermission.class.getName(), "*", "*"); //$NON-NLS-1$ //$NON-NLS-2$
 		PermissionInfo[] permissions = new PermissionInfo[] {packagePerm};
-		infos.add(childCondAdmin.createConditionalPermissionInfoBase("test.link.d", conditions, permissions, ConditionalPermissionInfoBase.ALLOW)); //$NON-NLS-1$
+		infos.add(childCondAdmin.newConditionalPermissionInfo("test.link.d", conditions, permissions, ConditionalPermissionInfo.ALLOW)); //$NON-NLS-1$
 		update.commit();
 
 		try {
@@ -136,12 +136,12 @@
 			assertEquals("Unexpected exception message", "Missing Service Permission", e.getCause().getMessage()); //$NON-NLS-1$//$NON-NLS-2$
 		}
 
-		update = childCondAdmin.createConditionalPermissionsUpdate();
-		infos = update.getConditionalPermissionInfoBases();
+		update = childCondAdmin.newConditionalPermissionUpdate();
+		infos = update.getConditionalPermissionInfos();
 		assertEquals("Wrong number of infos", 1, infos.size()); //$NON-NLS-1$
 		infos.clear();
 		permissions = new PermissionInfo[] {packagePerm, servicePerm};
-		infos.add(childCondAdmin.createConditionalPermissionInfoBase("test.link.d", conditions, permissions, ConditionalPermissionInfoBase.ALLOW)); //$NON-NLS-1$
+		infos.add(childCondAdmin.newConditionalPermissionInfo("test.link.d", conditions, permissions, ConditionalPermissionInfo.ALLOW)); //$NON-NLS-1$
 		update.commit();
 
 		try {
@@ -152,12 +152,12 @@
 			assertEquals("Unexpected exception message", "Missing AllPermissions", e.getCause().getMessage()); //$NON-NLS-1$//$NON-NLS-2$
 		}
 
-		update = childCondAdmin.createConditionalPermissionsUpdate();
-		infos = update.getConditionalPermissionInfoBases();
+		update = childCondAdmin.newConditionalPermissionUpdate();
+		infos = update.getConditionalPermissionInfos();
 		assertEquals("Wrong number of infos", 1, infos.size()); //$NON-NLS-1$
 		infos.clear();
 		permissions = new PermissionInfo[] {allPerm};
-		infos.add(childCondAdmin.createConditionalPermissionInfoBase("test.link.d", conditions, permissions, ConditionalPermissionInfoBase.ALLOW)); //$NON-NLS-1$
+		infos.add(childCondAdmin.newConditionalPermissionInfo("test.link.d", conditions, permissions, ConditionalPermissionInfo.ALLOW)); //$NON-NLS-1$
 		update.commit();
 
 		try {
@@ -191,8 +191,8 @@
 			assertEquals("Wrong exception type", BundleException.RESOLVE_ERROR, e.getType()); //$NON-NLS-1$
 		}
 
-		ConditionalPermissionsUpdate update = childCondAdmin.createConditionalPermissionsUpdate();
-		List infos = update.getConditionalPermissionInfoBases();
+		ConditionalPermissionUpdate update = childCondAdmin.newConditionalPermissionUpdate();
+		List infos = update.getConditionalPermissionInfos();
 		assertEquals("Wrong number of infos", 1, infos.size()); //$NON-NLS-1$
 		infos.clear();
 
@@ -200,7 +200,7 @@
 		PermissionInfo servicePerm = new PermissionInfo(ServicePermission.class.getName(), "*", ServicePermission.GET + ',' + ServicePermission.REGISTER); //$NON-NLS-1$
 		PermissionInfo allPerm = new PermissionInfo(AllPermission.class.getName(), "*", "*"); //$NON-NLS-1$ //$NON-NLS-2$
 		PermissionInfo[] permissions = new PermissionInfo[] {packagePerm};
-		infos.add(childCondAdmin.createConditionalPermissionInfoBase("test.link.d", conditions, permissions, ConditionalPermissionInfoBase.ALLOW)); //$NON-NLS-1$
+		infos.add(childCondAdmin.newConditionalPermissionInfo("test.link.d", conditions, permissions, ConditionalPermissionInfo.ALLOW)); //$NON-NLS-1$
 		update.commit();
 
 		try {
@@ -211,12 +211,12 @@
 			assertEquals("Unexpected exception message", "Missing Service Permission", e.getCause().getMessage()); //$NON-NLS-1$//$NON-NLS-2$
 		}
 
-		update = childCondAdmin.createConditionalPermissionsUpdate();
-		infos = update.getConditionalPermissionInfoBases();
+		update = childCondAdmin.newConditionalPermissionUpdate();
+		infos = update.getConditionalPermissionInfos();
 		assertEquals("Wrong number of infos", 1, infos.size()); //$NON-NLS-1$
 		infos.clear();
 		permissions = new PermissionInfo[] {packagePerm, servicePerm};
-		infos.add(childCondAdmin.createConditionalPermissionInfoBase("test.link.d", conditions, permissions, ConditionalPermissionInfoBase.ALLOW)); //$NON-NLS-1$
+		infos.add(childCondAdmin.newConditionalPermissionInfo("test.link.d", conditions, permissions, ConditionalPermissionInfo.ALLOW)); //$NON-NLS-1$
 		update.commit();
 
 		try {
@@ -227,12 +227,12 @@
 			assertEquals("Unexpected exception message", "Missing AllPermissions", e.getCause().getMessage()); //$NON-NLS-1$//$NON-NLS-2$
 		}
 
-		update = childCondAdmin.createConditionalPermissionsUpdate();
-		infos = update.getConditionalPermissionInfoBases();
+		update = childCondAdmin.newConditionalPermissionUpdate();
+		infos = update.getConditionalPermissionInfos();
 		assertEquals("Wrong number of infos", 1, infos.size()); //$NON-NLS-1$
 		infos.clear();
 		permissions = new PermissionInfo[] {allPerm};
-		infos.add(childCondAdmin.createConditionalPermissionInfoBase("test.link.d", conditions, permissions, ConditionalPermissionInfoBase.ALLOW)); //$NON-NLS-1$
+		infos.add(childCondAdmin.newConditionalPermissionInfo("test.link.d", conditions, permissions, ConditionalPermissionInfo.ALLOW)); //$NON-NLS-1$
 		update.commit();
 
 		try {
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityAdminUnitTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityAdminUnitTests.java
index 1dab969..e39864c 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityAdminUnitTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityAdminUnitTests.java
@@ -274,17 +274,17 @@
 
 	public void testUpdate01() {
 		SecurityAdmin securityAdmin = createSecurityAdmin(null);
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
 		assertTrue("table is not empty", rows.isEmpty()); //$NON-NLS-1$
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 	}
 
 	public void testUpdate02() {
 		SecurityAdmin securityAdmin = createSecurityAdmin(null);
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		ConditionalPermissionInfoBase info = securityAdmin.createConditionalPermissionInfoBase(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW);
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		ConditionalPermissionInfo info = securityAdmin.newConditionalPermissionInfo(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfo.ALLOW);
 		rows.add(info);
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 
@@ -294,8 +294,8 @@
 		testPermission(pd, new FilePermission("test", "read"), true); //$NON-NLS-1$ //$NON-NLS-2$
 		testPermission(pd, new AllPermission(), false);
 
-		update = securityAdmin.createConditionalPermissionsUpdate();
-		rows = update.getConditionalPermissionInfoBases();
+		update = securityAdmin.newConditionalPermissionUpdate();
+		rows = update.getConditionalPermissionInfos();
 		rows.clear();
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 		testPermission(pd, new FilePermission("test", "write"), true); //$NON-NLS-1$ //$NON-NLS-2$
@@ -305,10 +305,10 @@
 
 	public void testUpdate03() {
 		SecurityAdmin securityAdmin = createSecurityAdmin(null);
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		ConditionalPermissionInfoBase info1 = securityAdmin.createConditionalPermissionInfoBase(null, ALLLOCATION_CONDS, READWRITE_INFOS, ConditionalPermissionInfoBase.DENY);
-		ConditionalPermissionInfoBase info2 = securityAdmin.createConditionalPermissionInfoBase(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW);
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		ConditionalPermissionInfo info1 = securityAdmin.newConditionalPermissionInfo(null, ALLLOCATION_CONDS, READWRITE_INFOS, ConditionalPermissionInfo.DENY);
+		ConditionalPermissionInfo info2 = securityAdmin.newConditionalPermissionInfo(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfo.ALLOW);
 		rows.add(info1);
 		rows.add(info2);
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
@@ -319,16 +319,16 @@
 		testPermission(pd, new FilePermission("test", "read"), false); //$NON-NLS-1$ //$NON-NLS-2$
 		testPermission(pd, new AllPermission(), false);
 
-		update = securityAdmin.createConditionalPermissionsUpdate();
-		rows = update.getConditionalPermissionInfoBases();
+		update = securityAdmin.newConditionalPermissionUpdate();
+		rows = update.getConditionalPermissionInfos();
 		rows.remove(0);
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 		testPermission(pd, new FilePermission("test", "write"), false); //$NON-NLS-1$ //$NON-NLS-2$
 		testPermission(pd, new FilePermission("test", "read"), true); //$NON-NLS-1$ //$NON-NLS-2$
 		testPermission(pd, new AllPermission(), false);
 
-		update = securityAdmin.createConditionalPermissionsUpdate();
-		rows = update.getConditionalPermissionInfoBases();
+		update = securityAdmin.newConditionalPermissionUpdate();
+		rows = update.getConditionalPermissionInfos();
 		rows.remove(0);
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 		testPermission(pd, new FilePermission("test", "write"), true); //$NON-NLS-1$ //$NON-NLS-2$
@@ -338,20 +338,20 @@
 
 	public void testUpdate04() {
 		SecurityAdmin securityAdmin = createSecurityAdmin(null);
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		ConditionalPermissionInfoBase info1 = securityAdmin.createConditionalPermissionInfoBase(null, ALLLOCATION_CONDS, READWRITE_INFOS, ConditionalPermissionInfoBase.DENY);
-		ConditionalPermissionInfoBase info2 = securityAdmin.createConditionalPermissionInfoBase(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW);
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		ConditionalPermissionInfo info1 = securityAdmin.newConditionalPermissionInfo(null, ALLLOCATION_CONDS, READWRITE_INFOS, ConditionalPermissionInfo.DENY);
+		ConditionalPermissionInfo info2 = securityAdmin.newConditionalPermissionInfo(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfo.ALLOW);
 		rows.add(info1);
 		rows.add(info2);
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 
-		ConditionalPermissionsUpdate update1 = securityAdmin.createConditionalPermissionsUpdate();
-		List rows1 = update1.getConditionalPermissionInfoBases();
+		ConditionalPermissionUpdate update1 = securityAdmin.newConditionalPermissionUpdate();
+		List rows1 = update1.getConditionalPermissionInfos();
 		rows1.remove(0);
 
-		ConditionalPermissionsUpdate update2 = securityAdmin.createConditionalPermissionsUpdate();
-		List rows2 = update2.getConditionalPermissionInfoBases();
+		ConditionalPermissionUpdate update2 = securityAdmin.newConditionalPermissionUpdate();
+		List rows2 = update2.getConditionalPermissionInfos();
 		rows2.remove(0);
 		assertTrue("failed to commit", update2.commit()); //$NON-NLS-1$
 
@@ -363,8 +363,8 @@
 
 		assertFalse("succeeded commit", update1.commit()); //$NON-NLS-1$
 
-		update = securityAdmin.createConditionalPermissionsUpdate();
-		rows = update.getConditionalPermissionInfoBases();
+		update = securityAdmin.newConditionalPermissionUpdate();
+		rows = update.getConditionalPermissionInfos();
 		rows.remove(0);
 
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
@@ -375,9 +375,9 @@
 
 	public void testSecurityManager01() {
 		SecurityAdmin securityAdmin = createSecurityAdmin(null);
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		ConditionalPermissionInfoBase info = securityAdmin.createConditionalPermissionInfoBase(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW);
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		ConditionalPermissionInfo info = securityAdmin.newConditionalPermissionInfo(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfo.ALLOW);
 		rows.add(info);
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 
@@ -389,8 +389,8 @@
 		testSMPermission(sm, pds, new FilePermission("test", "read"), true); //$NON-NLS-1$ //$NON-NLS-2$
 		testSMPermission(sm, pds, new AllPermission(), false);
 
-		update = securityAdmin.createConditionalPermissionsUpdate();
-		rows = update.getConditionalPermissionInfoBases();
+		update = securityAdmin.newConditionalPermissionUpdate();
+		rows = update.getConditionalPermissionInfos();
 		rows.clear();
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 		testSMPermission(sm, pds, new FilePermission("test", "write"), true); //$NON-NLS-1$ //$NON-NLS-2$
@@ -409,11 +409,11 @@
 		ProtectionDomain pd2 = securityAdmin.createProtectionDomain((AbstractBundle) test2);
 		ProtectionDomain[] pds = new ProtectionDomain[] {pd1, pd2};
 
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfoBase.DENY));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfoBase.DENY));
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfo.DENY));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfo.DENY));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$);
 
 		testSMPermission(sm, pds, new FilePermission("test", "read"), false); //$NON-NLS-1$ //$NON-NLS-2$
@@ -436,8 +436,8 @@
 
 		tc1sat.setSatisfied(true);
 		tc2sat.setSatisfied(true);
-		update = securityAdmin.createConditionalPermissionsUpdate();
-		rows = update.getConditionalPermissionInfoBases();
+		update = securityAdmin.newConditionalPermissionUpdate();
+		rows = update.getConditionalPermissionInfos();
 		rows.remove(0);
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$);
 		testSMPermission(sm, pds, new FilePermission("test", "read"), true); //$NON-NLS-1$ //$NON-NLS-2$
@@ -446,8 +446,8 @@
 		tc2unsat.setSatisfied(false);
 		testSMPermission(sm, pds, new FilePermission("test", "read"), false); //$NON-NLS-1$ //$NON-NLS-2$
 
-		update = securityAdmin.createConditionalPermissionsUpdate();
-		rows = update.getConditionalPermissionInfoBases();
+		update = securityAdmin.newConditionalPermissionUpdate();
+		rows = update.getConditionalPermissionInfos();
 		rows.remove(0);
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$);
 		testSMPermission(sm, pds, new FilePermission("test", "read"), false); //$NON-NLS-1$ //$NON-NLS-2$
@@ -464,12 +464,12 @@
 		ProtectionDomain pd2 = securityAdmin.createProtectionDomain((AbstractBundle) test2);
 		ProtectionDomain[] pds = new ProtectionDomain[] {pd1, pd2};
 
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfoBase.DENY));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfoBase.DENY));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfoBase.DENY));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfoBase.DENY));
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfo.DENY));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfo.DENY));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfo.DENY));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfo.DENY));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$);
 
 		testSMPermission(sm, pds, new FilePermission("test", "read"), false); //$NON-NLS-1$ //$NON-NLS-2$
@@ -500,12 +500,12 @@
 		ProtectionDomain pd2 = securityAdmin.createProtectionDomain((AbstractBundle) test2);
 		ProtectionDomain[] pds = new ProtectionDomain[] {pd1, pd2};
 
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$);
 
 		testSMPermission(sm, pds, new FilePermission("test", "read"), true); //$NON-NLS-1$ //$NON-NLS-2$
@@ -538,11 +538,11 @@
 		ProtectionDomain pd2 = securityAdmin.createProtectionDomain((AbstractBundle) test2);
 		ProtectionDomain[] pds = new ProtectionDomain[] {pd1, pd2};
 
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfoBase.DENY));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfoBase.DENY));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfoBase.DENY));
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfo.DENY));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfo.DENY));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfo.DENY));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$);
 
 		testSMPermission(sm, pds, new FilePermission("test", "read"), false); //$NON-NLS-1$ //$NON-NLS-2$
@@ -573,13 +573,13 @@
 		ProtectionDomain pd2 = securityAdmin.createProtectionDomain((AbstractBundle) test2);
 		ProtectionDomain[] pds = new ProtectionDomain[] {pd1, pd2};
 
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfoBase.DENY));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfo.DENY));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_SAT}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {POST_MUT_UNSAT}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, ALLLOCATION_CONDS, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$);
 
 		testSMPermission(sm, pds, new FilePermission("test", "read"), false); //$NON-NLS-1$ //$NON-NLS-2$
@@ -602,9 +602,9 @@
 	public void testAccessControlContext01() {
 		// test single row with signer condition
 		SecurityAdmin securityAdmin = createSecurityAdmin(null);
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {SIGNER_CONDITION1}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {SIGNER_CONDITION1}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 
 		AccessControlContext acc = securityAdmin.getAccessControlContext(new String[] {"cn=t1,cn=FR;cn=test1,c=US"}); //$NON-NLS-1$
@@ -624,11 +624,11 @@
 	public void testAccessControlContext02() {
 		// test with DENY row
 		SecurityAdmin securityAdmin = createSecurityAdmin(null);
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {SIGNER_CONDITION1}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {SIGNER_CONDITION1}, READWRITE_INFOS, ConditionalPermissionInfoBase.DENY));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {SIGNER_CONDITION1}, READWRITE_INFOS, ConditionalPermissionInfoBase.ALLOW));
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {SIGNER_CONDITION1}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {SIGNER_CONDITION1}, READWRITE_INFOS, ConditionalPermissionInfo.DENY));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {SIGNER_CONDITION1}, READWRITE_INFOS, ConditionalPermissionInfo.ALLOW));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 
 		AccessControlContext acc = securityAdmin.getAccessControlContext(new String[] {"cn=t1,cn=FR;cn=test1,c=US"}); //$NON-NLS-1$
@@ -648,9 +648,9 @@
 	public void testAccessControlContext03() {
 		// test multiple signer conditions
 		SecurityAdmin securityAdmin = createSecurityAdmin(null);
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {SIGNER_CONDITION1}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {SIGNER_CONDITION1}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 
 		AccessControlContext acc = securityAdmin.getAccessControlContext(new String[] {"cn=t1,cn=FR;cn=test2,c=US"}); //$NON-NLS-1$
@@ -667,9 +667,9 @@
 			// expected
 		}
 
-		update = securityAdmin.createConditionalPermissionsUpdate();
-		rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {SIGNER_CONDITION2}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
+		update = securityAdmin.newConditionalPermissionUpdate();
+		rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {SIGNER_CONDITION2}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 		acc = securityAdmin.getAccessControlContext(new String[] {"cn=t1,cn=FR;cn=test2,c=US"}); //$NON-NLS-1$
 		try {
@@ -688,10 +688,10 @@
 	public void testAccessControlContext04() {
 		// test multiple signer conditions
 		SecurityAdmin securityAdmin = createSecurityAdmin(null);
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {SIGNER_CONDITION1, SIGNER_CONDITION2}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {SIGNER_CONDITION1}, READWRITE_INFOS, ConditionalPermissionInfoBase.ALLOW));
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {SIGNER_CONDITION1, SIGNER_CONDITION2}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {SIGNER_CONDITION1}, READWRITE_INFOS, ConditionalPermissionInfo.ALLOW));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 
 		AccessControlContext acc = securityAdmin.getAccessControlContext(new String[] {"cn=t1,cn=FR;cn=test2,c=US"}); //$NON-NLS-1$
@@ -753,10 +753,10 @@
 	public void testAccessControlContext06() {
 		// test with empty condition rows
 		SecurityAdmin securityAdmin = createSecurityAdmin(null);
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {SIGNER_CONDITION1}, READWRITE_INFOS, ConditionalPermissionInfoBase.ALLOW));
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {SIGNER_CONDITION1}, READWRITE_INFOS, ConditionalPermissionInfo.ALLOW));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 
 		AccessControlContext acc = securityAdmin.getAccessControlContext(new String[] {"cn=t1,cn=FR;cn=test2,c=US"}); //$NON-NLS-1$
@@ -776,9 +776,9 @@
 	public void testAccessControlContext07() {
 		// test ! signer condition
 		SecurityAdmin securityAdmin = createSecurityAdmin(null);
-		ConditionalPermissionsUpdate update = securityAdmin.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(securityAdmin.createConditionalPermissionInfoBase(null, new ConditionInfo[] {NOT_SIGNER_CONDITION1}, READONLY_INFOS, ConditionalPermissionInfoBase.ALLOW));
+		ConditionalPermissionUpdate update = securityAdmin.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(securityAdmin.newConditionalPermissionInfo(null, new ConditionInfo[] {NOT_SIGNER_CONDITION1}, READONLY_INFOS, ConditionalPermissionInfo.ALLOW));
 		assertTrue("failed to commit", update.commit()); //$NON-NLS-1$
 		AccessControlContext acc = securityAdmin.getAccessControlContext(new String[] {"cn=t1,cn=FR;cn=test1,c=US"}); //$NON-NLS-1$
 		try {
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityManagerTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityManagerTests.java
index 0c4a8a5..4cfe6fa 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityManagerTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityManagerTests.java
@@ -148,9 +148,9 @@
 		String locationSecurityAFragA = installer.getBundleLocation("security.a.frag.a"); //$NON-NLS-1$
 		// set the security for the host and fragment
 		ConditionalPermissionAdmin ca = (ConditionalPermissionAdmin) systemContext.getService(systemContext.getServiceReference(ConditionalPermissionAdmin.class.getName()));
-		ConditionalPermissionsUpdate update = ca.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(ca.createConditionalPermissionInfoBase(null, null, new PermissionInfo[] {hostFragmentPermission, allPackagePermission}, ConditionalPermissionInfoBase.ALLOW));
+		ConditionalPermissionUpdate update = ca.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(ca.newConditionalPermissionInfo(null, null, new PermissionInfo[] {hostFragmentPermission, allPackagePermission}, ConditionalPermissionInfo.ALLOW));
 		assertTrue("Cannot commit rows", update.commit()); //$NON-NLS-1$
 
 		Bundle securityA = systemContext.installBundle(locationSecurityA);
@@ -199,9 +199,9 @@
 		String locationSecurityAFragA = installer.getBundleLocation("security.a.frag.a"); //$NON-NLS-1$
 		// set the security for the host and fragment
 		ConditionalPermissionAdmin ca = (ConditionalPermissionAdmin) systemContext.getService(systemContext.getServiceReference(ConditionalPermissionAdmin.class.getName()));
-		ConditionalPermissionsUpdate update = ca.createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		rows.add(ca.createConditionalPermissionInfoBase(null, null, new PermissionInfo[] {hostFragmentPermission, allPackagePermission}, ConditionalPermissionInfoBase.ALLOW));
+		ConditionalPermissionUpdate update = ca.newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		rows.add(ca.newConditionalPermissionInfo(null, null, new PermissionInfo[] {hostFragmentPermission, allPackagePermission}, ConditionalPermissionInfo.ALLOW));
 		assertTrue("Cannot commit rows", update.commit()); //$NON-NLS-1$
 
 		Bundle securityA = systemContext.installBundle(locationSecurityA);
diff --git a/bundles/org.eclipse.osgi/.settings/.api_filters b/bundles/org.eclipse.osgi/.settings/.api_filters
index c3a2e61..d68291b 100644
--- a/bundles/org.eclipse.osgi/.settings/.api_filters
+++ b/bundles/org.eclipse.osgi/.settings/.api_filters
@@ -1,56 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <component id="org.eclipse.osgi" version="2">

-<resource path="osgi/src/org/osgi/framework/Bundle.java" type="org.osgi.framework.Bundle">

-<filter id="403767336">

+<resource path="osgi/src/org/osgi/service/framework/CompositeBundle.java" type="org.osgi.service.framework.CompositeBundle">

+<filter id="1110441988">

 <message_arguments>

-<message_argument value="org.osgi.framework.Bundle"/>

-<message_argument value="SIGNERS_TRUSTED"/>

-</message_arguments>

-</filter>

-<filter id="1209008130">

-<message_arguments>

-<message_argument value="1.5"/>

-<message_argument value="3.5"/>

-<message_argument value="getSignerCertificates(int)"/>

-</message_arguments>

-</filter>

-<filter id="403767336">

-<message_arguments>

-<message_argument value="org.osgi.framework.Bundle"/>

-<message_argument value="SIGNERS_ALL"/>

-</message_arguments>

-</filter>

-<filter id="1209008130">

-<message_arguments>

-<message_argument value="1.5"/>

-<message_argument value="3.5"/>

-<message_argument value="SIGNERS_TRUSTED"/>

-</message_arguments>

-</filter>

-<filter id="403804204">

-<message_arguments>

-<message_argument value="org.osgi.framework.Bundle"/>

-<message_argument value="getVersion()"/>

-</message_arguments>

-</filter>

-<filter id="403804204">

-<message_arguments>

-<message_argument value="org.osgi.framework.Bundle"/>

-<message_argument value="getSignerCertificates(int)"/>

-</message_arguments>

-</filter>

-<filter id="1209008130">

-<message_arguments>

-<message_argument value="1.5"/>

-<message_argument value="3.5"/>

-<message_argument value="SIGNERS_ALL"/>

-</message_arguments>

-</filter>

-<filter id="1209008130">

-<message_arguments>

-<message_argument value="1.5"/>

-<message_argument value="3.5"/>

-<message_argument value="getVersion()"/>

+<message_argument value="org.osgi.service.framework.CompositeBundle"/>

 </message_arguments>

 </filter>

 </resource>

@@ -63,10 +16,57 @@
 </message_arguments>

 </filter>

 </resource>

-<resource path="osgi/src/org/osgi/service/framework/CompositeBundle.java" type="org.osgi.service.framework.CompositeBundle">

-<filter id="1110441988">

+<resource path="osgi/src/org/osgi/framework/Bundle.java" type="org.osgi.framework.Bundle">

+<filter id="1209008130">

 <message_arguments>

-<message_argument value="org.osgi.service.framework.CompositeBundle"/>

+<message_argument value="1.5"/>

+<message_argument value="3.5"/>

+<message_argument value="getSignerCertificates(int)"/>

+</message_arguments>

+</filter>

+<filter id="403767336">

+<message_arguments>

+<message_argument value="org.osgi.framework.Bundle"/>

+<message_argument value="SIGNERS_TRUSTED"/>

+</message_arguments>

+</filter>

+<filter id="403767336">

+<message_arguments>

+<message_argument value="org.osgi.framework.Bundle"/>

+<message_argument value="SIGNERS_ALL"/>

+</message_arguments>

+</filter>

+<filter id="1209008130">

+<message_arguments>

+<message_argument value="1.5"/>

+<message_argument value="3.5"/>

+<message_argument value="SIGNERS_TRUSTED"/>

+</message_arguments>

+</filter>

+<filter id="403804204">

+<message_arguments>

+<message_argument value="org.osgi.framework.Bundle"/>

+<message_argument value="getSignerCertificates(int)"/>

+</message_arguments>

+</filter>

+<filter id="403804204">

+<message_arguments>

+<message_argument value="org.osgi.framework.Bundle"/>

+<message_argument value="getVersion()"/>

+</message_arguments>

+</filter>

+<filter id="1209008130">

+<message_arguments>

+<message_argument value="1.5"/>

+<message_argument value="3.5"/>

+<message_argument value="SIGNERS_ALL"/>

+</message_arguments>

+</filter>

+<filter id="1209008130">

+<message_arguments>

+<message_argument value="1.5"/>

+<message_argument value="3.5"/>

+<message_argument value="getVersion()"/>

 </message_arguments>

 </filter>

 </resource>

@@ -79,15 +79,6 @@
 </message_arguments>

 </filter>

 </resource>

-<resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionsUpdate.java" type="org.osgi.service.condpermadmin.ConditionalPermissionsUpdate">

-<filter id="1108344834">

-<message_arguments>

-<message_argument value="1.1"/>

-<message_argument value="3.5"/>

-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionsUpdate"/>

-</message_arguments>

-</filter>

-</resource>

 <resource path="osgi/src/org/osgi/framework/ServiceEvent.java" type="org.osgi.framework.ServiceEvent">

 <filter id="1141899266">

 <message_arguments>

@@ -97,31 +88,12 @@
 </message_arguments>

 </filter>

 </resource>

-<resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java" type="org.osgi.service.condpermadmin.ConditionalPermissionAdmin">

-<filter id="1209008130">

+<resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionUpdate.java" type="org.osgi.service.condpermadmin.ConditionalPermissionUpdate">

+<filter id="1108344834">

 <message_arguments>

 <message_argument value="1.1"/>

 <message_argument value="3.5"/>

-<message_argument value="createConditionalPermissionInfoBase(String, ConditionInfo[], PermissionInfo[], String)"/>

-</message_arguments>

-</filter>

-<filter id="403804204">

-<message_arguments>

-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionAdmin"/>

-<message_argument value="createConditionalPermissionInfoBase(String, ConditionInfo[], PermissionInfo[], String)"/>

-</message_arguments>

-</filter>

-<filter id="1209008130">

-<message_arguments>

-<message_argument value="1.1"/>

-<message_argument value="3.5"/>

-<message_argument value="createConditionalPermissionsUpdate()"/>

-</message_arguments>

-</filter>

-<filter id="403804204">

-<message_arguments>

-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionAdmin"/>

-<message_argument value="createConditionalPermissionsUpdate()"/>

+<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionUpdate"/>

 </message_arguments>

 </filter>

 </resource>

@@ -132,6 +104,34 @@
 </message_arguments>

 </filter>

 </resource>

+<resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java" type="org.osgi.service.condpermadmin.ConditionalPermissionAdmin">

+<filter id="403804204">

+<message_arguments>

+<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionAdmin"/>

+<message_argument value="newConditionalPermissionUpdate()"/>

+</message_arguments>

+</filter>

+<filter id="403804204">

+<message_arguments>

+<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionAdmin"/>

+<message_argument value="newConditionalPermissionInfo(String, ConditionInfo[], PermissionInfo[], String)"/>

+</message_arguments>

+</filter>

+<filter id="1209008130">

+<message_arguments>

+<message_argument value="1.1"/>

+<message_argument value="3.5"/>

+<message_argument value="newConditionalPermissionUpdate()"/>

+</message_arguments>

+</filter>

+<filter id="1209008130">

+<message_arguments>

+<message_argument value="1.1"/>

+<message_argument value="3.5"/>

+<message_argument value="newConditionalPermissionInfo(String, ConditionInfo[], PermissionInfo[], String)"/>

+</message_arguments>

+</filter>

+</resource>

 <resource path="osgi/src/org/osgi/framework/BundleReference.java" type="org.osgi.framework.BundleReference">

 <filter id="1108344834">

 <message_arguments>

@@ -231,26 +231,14 @@
 <message_arguments>

 <message_argument value="1.5"/>

 <message_argument value="3.5"/>

-<message_argument value="SERVICE_TYPE"/>

+<message_argument value="FRAMEWORK_SYSTEMPACKAGES_EXTRA"/>

 </message_arguments>

 </filter>

 <filter id="1209008130">

 <message_arguments>

 <message_argument value="1.5"/>

 <message_argument value="3.5"/>

-<message_argument value="FRAMEWORK_SYSTEMPACKAGES_EXTRA"/>

-</message_arguments>

-</filter>

-<filter id="403767336">

-<message_arguments>

-<message_argument value="org.osgi.framework.Constants"/>

-<message_argument value="FRAMEWORK_STORAGE_CLEAN"/>

-</message_arguments>

-</filter>

-<filter id="403767336">

-<message_arguments>

-<message_argument value="org.osgi.framework.Constants"/>

-<message_argument value="FRAMEWORK_EXECPERMISSION"/>

+<message_argument value="SERVICE_TYPE"/>

 </message_arguments>

 </filter>

 <filter id="1209008130">

@@ -263,20 +251,13 @@
 <filter id="403767336">

 <message_arguments>

 <message_argument value="org.osgi.framework.Constants"/>

-<message_argument value="SERVICE_TYPE"/>

+<message_argument value="FRAMEWORK_EXECPERMISSION"/>

 </message_arguments>

 </filter>

 <filter id="403767336">

 <message_arguments>

 <message_argument value="org.osgi.framework.Constants"/>

-<message_argument value="FRAMEWORK_STORAGE"/>

-</message_arguments>

-</filter>

-<filter id="1209008130">

-<message_arguments>

-<message_argument value="1.5"/>

-<message_argument value="3.5"/>

-<message_argument value="FRAMEWORK_SECURITY"/>

+<message_argument value="FRAMEWORK_STORAGE_CLEAN"/>

 </message_arguments>

 </filter>

 <filter id="1209008130">

@@ -286,10 +267,23 @@
 <message_argument value="FRAMEWORK_TRUST_REPOSITORIES"/>

 </message_arguments>

 </filter>

+<filter id="1209008130">

+<message_arguments>

+<message_argument value="1.5"/>

+<message_argument value="3.5"/>

+<message_argument value="FRAMEWORK_SECURITY"/>

+</message_arguments>

+</filter>

 <filter id="403767336">

 <message_arguments>

 <message_argument value="org.osgi.framework.Constants"/>

-<message_argument value="FRAMEWORK_WINDOWSYSTEM"/>

+<message_argument value="FRAMEWORK_STORAGE"/>

+</message_arguments>

+</filter>

+<filter id="403767336">

+<message_arguments>

+<message_argument value="org.osgi.framework.Constants"/>

+<message_argument value="SERVICE_TYPE"/>

 </message_arguments>

 </filter>

 <filter id="403767336">

@@ -298,6 +292,12 @@
 <message_argument value="FRAMEWORK_BEGINNING_STARTLEVEL"/>

 </message_arguments>

 </filter>

+<filter id="403767336">

+<message_arguments>

+<message_argument value="org.osgi.framework.Constants"/>

+<message_argument value="FRAMEWORK_WINDOWSYSTEM"/>

+</message_arguments>

+</filter>

 </resource>

 <resource path="osgi/src/org/osgi/util/tracker/BundleTracker.java" type="org.osgi.util.tracker.BundleTracker">

 <filter id="1108344834">

@@ -320,14 +320,14 @@
 <message_arguments>

 <message_argument value="1.5"/>

 <message_argument value="3.5"/>

-<message_argument value="STOPPED_UPDATE"/>

+<message_argument value="STOPPED_BOOTCLASSPATH_MODIFIED"/>

 </message_arguments>

 </filter>

 <filter id="1141899266">

 <message_arguments>

 <message_argument value="1.5"/>

 <message_argument value="3.5"/>

-<message_argument value="STOPPED_BOOTCLASSPATH_MODIFIED"/>

+<message_argument value="STOPPED_UPDATE"/>

 </message_arguments>

 </filter>

 </resource>

@@ -346,13 +346,45 @@
 </filter>

 </resource>

 <resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfo.java" type="org.osgi.service.condpermadmin.ConditionalPermissionInfo">

-<filter id="403984517">

+<filter id="1209008130">

+<message_arguments>

+<message_argument value="1.1"/>

+<message_argument value="3.5"/>

+<message_argument value="getGrantDecision()"/>

+</message_arguments>

+</filter>

+<filter id="403804204">

 <message_arguments>

 <message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionInfo"/>

-<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionInfoBase"/>

 <message_argument value="getGrantDecision()"/>

 </message_arguments>

 </filter>

+<filter id="1209008130">

+<message_arguments>

+<message_argument value="1.1"/>

+<message_argument value="3.5"/>

+<message_argument value="ALLOW"/>

+</message_arguments>

+</filter>

+<filter id="1209008130">

+<message_arguments>

+<message_argument value="1.1"/>

+<message_argument value="3.5"/>

+<message_argument value="DENY"/>

+</message_arguments>

+</filter>

+<filter id="403767336">

+<message_arguments>

+<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionInfo"/>

+<message_argument value="DENY"/>

+</message_arguments>

+</filter>

+<filter id="403767336">

+<message_arguments>

+<message_argument value="org.osgi.service.condpermadmin.ConditionalPermissionInfo"/>

+<message_argument value="ALLOW"/>

+</message_arguments>

+</filter>

 </resource>

 <resource path="osgi/src/org/osgi/framework/BundleException.java" type="org.osgi.framework.BundleException">

 <filter id="1141899266">

@@ -461,13 +493,6 @@
 </message_arguments>

 </filter>

 </resource>

-<resource path="osgi/src/org/osgi/framework/launch/Framework.java" type="org.osgi.framework.launch.Framework">

-<filter id="1110441988">

-<message_arguments>

-<message_argument value="org.osgi.framework.launch.Framework"/>

-</message_arguments>

-</filter>

-</resource>

 <resource path="osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfoBase.java" type="org.osgi.service.condpermadmin.ConditionalPermissionInfoBase">

 <filter id="1108344834">

 <message_arguments>

@@ -477,19 +502,26 @@
 </message_arguments>

 </filter>

 </resource>

+<resource path="osgi/src/org/osgi/framework/launch/Framework.java" type="org.osgi.framework.launch.Framework">

+<filter id="1110441988">

+<message_arguments>

+<message_argument value="org.osgi.framework.launch.Framework"/>

+</message_arguments>

+</filter>

+</resource>

 <resource path="osgi/src/org/osgi/framework/FrameworkUtil.java" type="org.osgi.framework.FrameworkUtil">

 <filter id="1141899266">

 <message_arguments>

 <message_argument value="1.5"/>

 <message_argument value="3.5"/>

-<message_argument value="getBundleReference(Class)"/>

+<message_argument value="matchDistinguishedNameChain(String, List)"/>

 </message_arguments>

 </filter>

 <filter id="1141899266">

 <message_arguments>

 <message_argument value="1.5"/>

 <message_argument value="3.5"/>

-<message_argument value="matchDistinguishedNameChain(String, List)"/>

+<message_argument value="getBundleReference(Class)"/>

 </message_arguments>

 </filter>

 </resource>

diff --git a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java
index 7c251fa..35ce8bd 100644
--- a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java
+++ b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java
@@ -72,7 +72,7 @@
 		return collection.implies(perm);
 	}
 
-	public PermissionInfo[] getPermissionInfos() {
+	PermissionInfo[] getPermissionInfos() {
 		return permInfos;
 	}
 
diff --git a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java
index ee00c1d..1126e03 100644
--- a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java
+++ b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java
@@ -184,10 +184,10 @@
 	}
 
 	void delete(SecurityRow securityRow, boolean firstTry) {
-		ConditionalPermissionsUpdate update = createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
+		ConditionalPermissionUpdate update = newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
 		for (Iterator iRows = rows.iterator(); iRows.hasNext();) {
-			ConditionalPermissionInfoBase info = (ConditionalPermissionInfoBase) iRows.next();
+			ConditionalPermissionInfo info = (ConditionalPermissionInfo) iRows.next();
 			if (securityRow.getName().equals(info.getName())) {
 				iRows.remove();
 				synchronized (lock) {
@@ -202,15 +202,18 @@
 		}
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public ConditionalPermissionInfo addConditionalPermissionInfo(ConditionInfo[] conds, PermissionInfo[] perms) {
 		return setConditionalPermissionInfo(null, conds, perms, true);
 	}
 
-	public ConditionalPermissionInfoBase createConditionalPermissionInfoBase(String name, ConditionInfo[] conditions, PermissionInfo[] permissions, String decision) {
-		return new SecurityInfoBase(name, conditions, permissions, decision);
+	public ConditionalPermissionInfo newConditionalPermissionInfo(String name, ConditionInfo[] conditions, PermissionInfo[] permissions, String decision) {
+		return new SecurityRowSnapShot(name, conditions, permissions, decision);
 	}
 
-	public ConditionalPermissionsUpdate createConditionalPermissionsUpdate() {
+	public ConditionalPermissionUpdate newConditionalPermissionUpdate() {
 		synchronized (lock) {
 			return new SecurityTableUpdate(this, condAdminTable.getRows(), timeStamp);
 		}
@@ -223,7 +226,7 @@
 			// enumerate through all the rows
 			while (infos.hasMoreElements()) {
 				SecurityRow condPermInfo = (SecurityRow) infos.nextElement();
-				ConditionInfo[] condInfo = condPermInfo.getConditionInfos();
+				ConditionInfo[] condInfo = condPermInfo.internalGetConditionInfos();
 				boolean match = true;
 				// check that each condition is a signer condition
 				for (int i = 0; match && i < condInfo.length; i++) {
@@ -258,12 +261,18 @@
 		return new AccessControlContext(new ProtectionDomain[] {new ProtectionDomain(null, table)});
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public ConditionalPermissionInfo getConditionalPermissionInfo(String name) {
 		synchronized (lock) {
 			return condAdminTable.getRow(name);
 		}
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public Enumeration getConditionalPermissionInfos() {
 		// could implement our own Enumeration, but we don't care about performance here.  Just do something simple:
 		synchronized (lock) {
@@ -275,21 +284,24 @@
 		}
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public ConditionalPermissionInfo setConditionalPermissionInfo(String name, ConditionInfo[] conds, PermissionInfo[] perms) {
 		return setConditionalPermissionInfo(name, conds, perms, true);
 	}
 
 	private ConditionalPermissionInfo setConditionalPermissionInfo(String name, ConditionInfo[] conds, PermissionInfo[] perms, boolean firstTry) {
-		ConditionalPermissionsUpdate update = createConditionalPermissionsUpdate();
-		List rows = update.getConditionalPermissionInfoBases();
-		ConditionalPermissionInfoBase infoBase = createConditionalPermissionInfoBase(name, conds, perms, ConditionalPermissionInfoBase.ALLOW);
+		ConditionalPermissionUpdate update = newConditionalPermissionUpdate();
+		List rows = update.getConditionalPermissionInfos();
+		ConditionalPermissionInfo infoBase = newConditionalPermissionInfo(name, conds, perms, ConditionalPermissionInfo.ALLOW);
 		int index = -1;
 		if (name == null) {
 			rows.add(infoBase);
 			index = rows.size() - 1;
 		} else {
 			for (int i = 0; i < rows.size() && index < 0; i++) {
-				ConditionalPermissionInfoBase info = (ConditionalPermissionInfoBase) rows.get(i);
+				ConditionalPermissionInfo info = (ConditionalPermissionInfo) rows.get(i);
 				if (name.equals(info.getName())) {
 					rows.set(i, infoBase);
 					index = i;
@@ -319,9 +331,9 @@
 			Collection names = new ArrayList();
 			for (int i = 0; i < newRows.length; i++) {
 				Object rowObj = rows.get(i);
-				if (!(rowObj instanceof ConditionalPermissionInfoBase))
+				if (!(rowObj instanceof ConditionalPermissionInfo))
 					throw new IllegalStateException("Invalid type \"" + rowObj.getClass().getName() + "\" at row: " + i); //$NON-NLS-1$//$NON-NLS-2$
-				ConditionalPermissionInfoBase infoBaseRow = (ConditionalPermissionInfoBase) rowObj;
+				ConditionalPermissionInfo infoBaseRow = (ConditionalPermissionInfo) rowObj;
 				String name = infoBaseRow.getName();
 				if (name == null)
 					name = generateName();
diff --git a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityRow.java b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityRow.java
index f2e15e9..bb29eb3 100644
--- a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityRow.java
+++ b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityRow.java
@@ -37,7 +37,7 @@
 	public SecurityRow(SecurityAdmin securityAdmin, String name, ConditionInfo[] conditionInfos, PermissionInfo[] permissionInfos, String decision) {
 		this.securityAdmin = securityAdmin;
 		this.conditionInfos = conditionInfos;
-		this.deny = ConditionalPermissionInfoBase.DENY.equals(decision);
+		this.deny = ConditionalPermissionInfo.DENY.equals(decision);
 		this.name = name;
 		this.permissionInfoCollection = new PermissionInfoCollection(permissionInfos);
 		if (conditionInfos == null || conditionInfos.length == 0)
@@ -53,7 +53,7 @@
 			throw new IllegalArgumentException(encoded);
 		String decision = null;
 		if (encoded.charAt(encoded.length() - 1) == '!')
-			decision = ConditionalPermissionInfoBase.DENY;
+			decision = ConditionalPermissionInfo.DENY;
 		String encodedName = null;
 		if (start != 0)
 			encodedName = encoded.substring(0, start);
@@ -92,22 +92,43 @@
 		return new SecurityRow(securityAdmin, encodedName, conds, perms, decision);
 	}
 
+	static Object cloneArray(Object[] array) {
+		if (array == null)
+			return null;
+		Object result = Array.newInstance(array.getClass().getComponentType(), array.length);
+		System.arraycopy(array, 0, result, 0, array.length);
+		return result;
+	}
+
 	public String getName() {
 		return name;
 	}
 
 	public ConditionInfo[] getConditionInfos() {
+		// must make a copy for the public API method to prevent modification
+		return (ConditionInfo[]) cloneArray(conditionInfos);
+	}
+
+	ConditionInfo[] internalGetConditionInfos() {
 		return conditionInfos;
 	}
 
 	public String getGrantDecision() {
-		return deny ? ConditionalPermissionInfoBase.DENY : ConditionalPermissionInfoBase.ALLOW;
+		return deny ? ConditionalPermissionInfo.DENY : ConditionalPermissionInfo.ALLOW;
 	}
 
 	public PermissionInfo[] getPermissionInfos() {
+		// must make a copy for the public API method to prevent modification
+		return (PermissionInfo[]) cloneArray(permissionInfoCollection.getPermissionInfos());
+	}
+
+	PermissionInfo[] internalGetPermissionInfos() {
 		return permissionInfoCollection.getPermissionInfos();
 	}
 
+	/**
+	 * @deprecated
+	 */
 	public void delete() {
 		securityAdmin.delete(this, true);
 	}
@@ -228,12 +249,11 @@
 		StringBuffer result = new StringBuffer();
 		if (name != null)
 			result.append(name);
-		ConditionInfo[] curConds = getConditionInfos();
-		PermissionInfo[] curPerms = getPermissionInfos();
 		result.append('{').append(' ');
-		if (curConds != null)
-			for (int i = 0; i < curConds.length; i++)
-				result.append(curConds[i].getEncoded()).append(' ');
+		if (conditionInfos != null)
+			for (int i = 0; i < conditionInfos.length; i++)
+				result.append(conditionInfos[i].getEncoded()).append(' ');
+		PermissionInfo[] curPerms = internalGetPermissionInfos();
 		if (curPerms != null)
 			for (int i = 0; i < curPerms.length; i++)
 				result.append(curPerms[i].getEncoded()).append(' ');
diff --git a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityInfoBase.java b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityRowSnapShot.java
similarity index 60%
rename from bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityInfoBase.java
rename to bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityRowSnapShot.java
index 9ce45b1..4d5a7a1 100644
--- a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityInfoBase.java
+++ b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityRowSnapShot.java
@@ -11,25 +11,26 @@
 package org.eclipse.osgi.internal.permadmin;
 
 import org.osgi.service.condpermadmin.ConditionInfo;
-import org.osgi.service.condpermadmin.ConditionalPermissionInfoBase;
+import org.osgi.service.condpermadmin.ConditionalPermissionInfo;
 import org.osgi.service.permissionadmin.PermissionInfo;
 
-public class SecurityInfoBase implements ConditionalPermissionInfoBase {
+public class SecurityRowSnapShot implements ConditionalPermissionInfo {
 
 	private final String name;
 	private final ConditionInfo[] conditionInfos;
 	private final PermissionInfo[] permissionInfos;
 	private final String decision;
 
-	public SecurityInfoBase(String name, ConditionInfo[] conditionInfos, PermissionInfo[] permissionInfos, String decision) {
+	public SecurityRowSnapShot(String name, ConditionInfo[] conditionInfos, PermissionInfo[] permissionInfos, String decision) {
 		this.name = name;
-		this.conditionInfos = conditionInfos;
-		this.permissionInfos = permissionInfos;
+		// must create copies of the passed in arrays to prevent changes
+		this.conditionInfos = (ConditionInfo[]) SecurityRow.cloneArray(conditionInfos);
+		this.permissionInfos = (PermissionInfo[]) SecurityRow.cloneArray(permissionInfos);
 		this.decision = decision;
 	}
 
 	public ConditionInfo[] getConditionInfos() {
-		return conditionInfos;
+		return (ConditionInfo[]) SecurityRow.cloneArray(conditionInfos);
 	}
 
 	public String getGrantDecision() {
@@ -41,7 +42,14 @@
 	}
 
 	public PermissionInfo[] getPermissionInfos() {
-		return permissionInfos;
+		return (PermissionInfo[]) SecurityRow.cloneArray(permissionInfos);
+	}
+
+	/**
+	 * @deprecated
+	 */
+	public void delete() {
+		throw new UnsupportedOperationException();
 	}
 
 }
diff --git a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java
index 56b8b0e..9e08108 100644
--- a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java
+++ b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java
@@ -12,9 +12,9 @@
 
 import java.util.ArrayList;
 import java.util.List;
-import org.osgi.service.condpermadmin.ConditionalPermissionsUpdate;
+import org.osgi.service.condpermadmin.ConditionalPermissionUpdate;
 
-public class SecurityTableUpdate implements ConditionalPermissionsUpdate {
+public class SecurityTableUpdate implements ConditionalPermissionUpdate {
 
 	private final SecurityAdmin securityAdmin;
 	private final List rows;
@@ -23,16 +23,20 @@
 	public SecurityTableUpdate(SecurityAdmin securityAdmin, SecurityRow[] rows, long timeStamp) {
 		this.securityAdmin = securityAdmin;
 		this.timeStamp = timeStamp;
+		// must make a snap shot of the security rows.
 		this.rows = new ArrayList(rows.length);
 		for (int i = 0; i < rows.length; i++)
-			this.rows.add(new SecurityInfoBase(rows[i].getName(), rows[i].getConditionInfos(), rows[i].getPermissionInfos(), rows[i].getGrantDecision()));
+			// Use SecurityRowSnapShot to prevent modification before commit 
+			// and to throw exceptions from delete
+			this.rows.add(new SecurityRowSnapShot(rows[i].getName(), rows[i].internalGetConditionInfos(), rows[i].internalGetPermissionInfos(), rows[i].getGrantDecision()));
 	}
 
 	public boolean commit() {
 		return securityAdmin.commit(rows, timeStamp);
 	}
 
-	public List getConditionalPermissionInfoBases() {
+	public List getConditionalPermissionInfos() {
+		// it is fine to return the internal list; it is a snap shot and we allow clients to modify it.
 		return rows;
 	}
 
diff --git a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/Condition.java b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/Condition.java
index be836a0..f3c1a92 100644
--- a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/Condition.java
+++ b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/Condition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,20 +24,20 @@
  * Info can only be used if the associated Conditions are satisfied.
  * 
  * @ThreadSafe
- * @version $Revision: 6000 $
+ * @version $Revision: 6279 $
  */
 public interface Condition {
 	/**
 	 * A Condition object that will always evaluate to true and that is never
 	 * postponed.
 	 */
-	public final static Condition TRUE = new BooleanCondition(true);
+	public final static Condition	TRUE	= new BooleanCondition(true);
 
 	/**
 	 * A Condition object that will always evaluate to false and that is never
 	 * postponed.
 	 */
-	public final static Condition FALSE = new BooleanCondition(false);
+	public final static Condition	FALSE	= new BooleanCondition(false);
 
 	/**
 	 * Returns whether the evaluation must be postponed until the end of the
@@ -45,13 +45,13 @@
 	 * Condition is immutable), then this Condition must be able to directly
 	 * answer the {@link #isSatisfied()} method. In other words, isSatisfied()
 	 * will return very quickly since no external sources, such as for example
-	 * users or networks, need to be consulted. <br/> This method must always
-	 * return the same value whenever it is called so that the Conditional
-	 * Permission Admin can cache its result.
+	 * users or networks, need to be consulted. <br/>
+	 * This method must always return the same value whenever it is called so
+	 * that the Conditional Permission Admin can cache its result.
 	 * 
 	 * @return <code>true</code> to indicate the evaluation must be postponed.
-	 *         Otherwise, <code>false</code> if the evaluation can be
-	 *         performed immediately.
+	 *         Otherwise, <code>false</code> if the evaluation can be performed
+	 *         immediately.
 	 */
 	boolean isPostponed();
 
@@ -64,15 +64,14 @@
 	 * check.
 	 * 
 	 * @return <code>true</code> to indicate the Conditions is satisfied.
-	 *         Otherwise, <code>false</code> if the Condition is not
-	 *         satisfied.
+	 *         Otherwise, <code>false</code> if the Condition is not satisfied.
 	 */
 	boolean isSatisfied();
 
 	/**
-	 * Returns whether the Condition is mutable. A Condition can go from mutable (<code>true</code>)
-	 * to immutable (<code>false</code>) over time but never from immutable (<code>false</code>)
-	 * to mutable (<code>true</code>).
+	 * Returns whether the Condition is mutable. A Condition can go from mutable
+	 * (<code>true</code>) to immutable (<code>false</code>) over time but never
+	 * from immutable (<code>false</code>) to mutable (<code>true</code>).
 	 * 
 	 * @return <code>true</code> {@link #isSatisfied()} can change. Otherwise,
 	 *         <code>false</code> if the value returned by
@@ -87,20 +86,18 @@
 	 * correspond to the class type of the object on which this method is
 	 * invoked.This method must be called inside a permission check only.
 	 * 
-	 * @param conditions
-	 *            The array of Condition objects, which must all be of the same
-	 *            class and mutable. The receiver must be one of those Condition
-	 *            objects.
-	 * @param context
-	 *            A Dictionary object that implementors can use to track state.
-	 *            If this method is invoked multiple times in the same
-	 *            permission check, the same Dictionary will be passed multiple
-	 *            times. The SecurityManager treats this Dictionary as an opaque
-	 *            object and simply creates an empty dictionary and passes it to
-	 *            subsequent invocations if multiple invocations are needed.
+	 * @param conditions The array of Condition objects, which must all be of
+	 *        the same class and mutable. The receiver must be one of those
+	 *        Condition objects.
+	 * @param context A Dictionary object that implementors can use to track
+	 *        state. If this method is invoked multiple times in the same
+	 *        permission check, the same Dictionary will be passed multiple
+	 *        times. The SecurityManager treats this Dictionary as an opaque
+	 *        object and simply creates an empty dictionary and passes it to
+	 *        subsequent invocations if multiple invocations are needed.
 	 * @return <code>true</code> if all the Condition objects are satisfied.
-	 *         Otherwise, <code>false</code> if one of the Condition objects
-	 *         is not satisfied.
+	 *         Otherwise, <code>false</code> if one of the Condition objects is
+	 *         not satisfied.
 	 */
 	boolean isSatisfied(Condition conditions[], Dictionary context);
 
@@ -111,7 +108,7 @@
  * {@link Condition#TRUE} constants.
  */
 final class BooleanCondition implements Condition {
-	private final boolean satisfied;
+	private final boolean	satisfied;
 
 	BooleanCondition(boolean satisfied) {
 		this.satisfied = satisfied;
@@ -130,11 +127,10 @@
 	}
 
 	public boolean isSatisfied(Condition[] conds, Dictionary context) {
-		for (int i = 0; i < conds.length; i++) {
+		for (int i = 0, length = conds.length; i < length; i++) {
 			if (!conds[i].isSatisfied())
 				return false;
 		}
 		return true;
 	}
-
 }
diff --git a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java
index 53ab8ec..2489060 100644
--- a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java
+++ b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionAdmin.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2005, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2005, 2009). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -28,7 +28,7 @@
  * the Conditional Permission Table.
  * 
  * @ThreadSafe
- * @version $Revision: 5654 $
+ * @version $Revision: 6279 $
  */
 public interface ConditionalPermissionAdmin {
 	/**
@@ -38,11 +38,11 @@
 	 * The Conditional Permission Info will be given a unique, never reused
 	 * name. This entry will be added at the beginning of the Conditional
 	 * Permission Table with a grant decision of
-	 * {@link ConditionalPermissionInfoBase#ALLOW ALLOW}.
+	 * {@link ConditionalPermissionInfo#ALLOW ALLOW}.
 	 * <p>
 	 * Since this method changes the Conditional Permission Table any
-	 * {@link ConditionalPermissionsUpdate}s that were created prior to
-	 * calling this method can no longer be committed.
+	 * {@link ConditionalPermissionUpdate}s that were created prior to calling
+	 * this method can no longer be committed.
 	 * 
 	 * @param conds The Conditions that need to be satisfied to enable the
 	 *        corresponding Permissions.
@@ -52,10 +52,10 @@
 	 *         Permissions.
 	 * @throws SecurityException If the caller does not have
 	 *         <code>AllPermission</code>.
-	 * @deprecated Since 1.1. Use {@link ConditionalPermissionsUpdate}
+	 * @deprecated Since 1.1. Use {@link #newConditionalPermissionUpdate()}
 	 *             instead.
 	 */
-	public ConditionalPermissionInfo addConditionalPermissionInfo(
+	ConditionalPermissionInfo addConditionalPermissionInfo(
 			ConditionInfo conds[], PermissionInfo perms[]);
 
 	/**
@@ -70,11 +70,11 @@
 	 * specified name must be updated with the specified Conditions and
 	 * Permissions. If a new entry was created in the Conditional Permission
 	 * Table it will be added at the beginning of the table with a grant
-	 * decision of {@link ConditionalPermissionInfoBase#ALLOW ALLOW}.
+	 * decision of {@link ConditionalPermissionInfo#ALLOW ALLOW}.
 	 * <p>
 	 * Since this method changes the underlying permission table any
-	 * {@link ConditionalPermissionsUpdate}s that were created prior to
-	 * calling this method can no longer be committed.
+	 * {@link ConditionalPermissionUpdate}s that were created prior to calling
+	 * this method can no longer be committed.
 	 * 
 	 * @param name The name of the Conditional Permission Info, or
 	 *        <code>null</code>.
@@ -86,10 +86,10 @@
 	 *         Conditions and Permissions.
 	 * @throws SecurityException If the caller does not have
 	 *         <code>AllPermission</code>.
-	 * @deprecated Since 1.1. Use {@link ConditionalPermissionsUpdate}
+	 * @deprecated Since 1.1. Use {@link #newConditionalPermissionUpdate()}
 	 *             instead.
 	 */
-	public ConditionalPermissionInfo setConditionalPermissionInfo(String name,
+	ConditionalPermissionInfo setConditionalPermissionInfo(String name,
 			ConditionInfo conds[], PermissionInfo perms[]);
 
 	/**
@@ -105,16 +105,20 @@
 	 * 
 	 * @return An enumeration of the Conditional Permission Infos that are
 	 *         currently in the Conditional Permission Table.
+	 * @deprecated Since 1.1. Use {@link #newConditionalPermissionUpdate()}
+	 *             instead.
 	 */
-	public Enumeration getConditionalPermissionInfos();
+	Enumeration/* <ConditionalPermissionInfo> */getConditionalPermissionInfos();
 
 	/**
 	 * Return the Conditional Permission Info with the specified name.
 	 * 
 	 * @param name The name of the Conditional Permission Info to be returned.
 	 * @return The Conditional Permission Info with the specified name.
+	 * @deprecated Since 1.1. Use {@link #newConditionalPermissionUpdate()}
+	 *             instead.
 	 */
-	public ConditionalPermissionInfo getConditionalPermissionInfo(String name);
+	ConditionalPermissionInfo getConditionalPermissionInfo(String name);
 
 	/**
 	 * Returns the Access Control Context that corresponds to the specified
@@ -124,28 +128,32 @@
 	 * @return An <code>AccessControlContext</code> that has the Permissions
 	 *         associated with the signer.
 	 */
-	public AccessControlContext getAccessControlContext(String[] signers);
+	AccessControlContext getAccessControlContext(String[] signers);
 
 	/**
-	 * Creates an update for the Conditional Permission Table. The update is a
-	 * working copy of the current Conditional Permission Table. If the running
-	 * Conditional Permission Table is modified before commit is called on the
-	 * returned update, then the call to commit will fail. That is, the commit
-	 * method will return false and no change will be made to the running
-	 * Conditional Permission Table. There is no requirement that commit is
-	 * eventually called on the returned update.
+	 * Creates a new update for the Conditional Permission Table. The update is
+	 * a working copy of the current Conditional Permission Table. If the
+	 * running Conditional Permission Table is modified before commit is called
+	 * on the returned update, then the call to commit on the returned update
+	 * will fail. That is, the commit method will return false and no change
+	 * will be made to the running Conditional Permission Table. There is no
+	 * requirement that commit is eventually called on the returned update.
 	 * 
-	 * @return An update for the Conditional Permission Table.
+	 * @return A new update for the Conditional Permission Table.
 	 * @since 1.1
 	 */
-	public ConditionalPermissionsUpdate createConditionalPermissionsUpdate();
+	ConditionalPermissionUpdate newConditionalPermissionUpdate();
 
 	/**
-	 * Creates a ConditionalPermissionInfoBase with the specified fields.
+	 * Creates a new ConditionalPermissionInfo with the specified fields
+	 * suitable for insertion into a {@link ConditionalPermissionUpdate}. The
+	 * {@link ConditionalPermissionInfo#delete() delete} method on
+	 * ConditionalPermissionInfo objects created with this method must throw
+	 * UnsupportedOperationException.
 	 * 
-	 * @param name The name of the created ConditionalPermissionInfoBase or
+	 * @param name The name of the created ConditionalPermissionInfo or
 	 *        <code>null</code> to have a unique name generated when the created
-	 *        ConditionalPermissionInfoBase is committed in an update to the
+	 *        ConditionalPermissionInfo is committed in an update to the
 	 *        Conditional Permission Table.
 	 * @param conditions The Conditions that need to be satisfied to enable the
 	 *        corresponding Permissions.
@@ -153,17 +161,16 @@
 	 *        corresponding Conditions are satisfied.
 	 * @param decision One of the following values:
 	 *        <ul>
-	 *        <li>{@link ConditionalPermissionInfoBase#ALLOW allow}</li>
+	 *        <li>{@link ConditionalPermissionInfo#ALLOW allow}</li>
 	 * 
-	 *        <li>{@link ConditionalPermissionInfoBase#DENY deny}</li>
+	 *        <li>{@link ConditionalPermissionInfo#DENY deny}</li>
 	 *        </ul>
-	 * @return A ConditionalPermissionInfoBase object suitable for insertion in
-	 *         a {@link ConditionalPermissionsUpdate}.
+	 * @return A ConditionalPermissionInfo object suitable for insertion into a
+	 *         {@link ConditionalPermissionUpdate}.
 	 * @throws IllegalArgumentException If the decision string is invalid.
 	 * @since 1.1
 	 */
-	public ConditionalPermissionInfoBase createConditionalPermissionInfoBase(
-			String name,
+	ConditionalPermissionInfo newConditionalPermissionInfo(String name,
 			ConditionInfo conditions[], PermissionInfo permissions[],
 			String decision);
 }
diff --git a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfo.java b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfo.java
index f12b72a..ebf89af 100644
--- a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfo.java
+++ b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfo.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2004, 2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2004, 2009). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,24 +16,93 @@
 
 package org.osgi.service.condpermadmin;
 
+import org.osgi.service.permissionadmin.PermissionInfo;
+
 /**
  * A binding of a set of Conditions to a set of Permissions. Instances of this
  * interface are obtained from the Conditional Permission Admin service.
  * 
- * @ThreadSafe
- * @version $Revision: 5654 $
+ * @Immutable
+ * @version $Revision: 6279 $
  */
-public interface ConditionalPermissionInfo extends ConditionalPermissionInfoBase {
+public interface ConditionalPermissionInfo {
+	/**
+	 * This string is used to indicate that a row in the Conditional Permission
+	 * Table should return a grant decision of &quot;allow&quot; if the
+	 * conditions are all satisfied and at least one of the permissions is
+	 * implied.
+	 * 
+	 * @since 1.1
+	 */
+	public final static String	ALLOW	= "allow";
+
+	/**
+	 * This string is used to indicate that a row in the Conditional Permission
+	 * Table should return a grant decision of &quot;deny&quot; if the
+	 * conditions are all satisfied and at least one of the permissions is
+	 * implied.
+	 * 
+	 * @since 1.1
+	 */
+	public final static String	DENY	= "deny";
+
+	/**
+	 * Returns the Condition Infos for the Conditions that must be satisfied to
+	 * enable the Permissions.
+	 * 
+	 * @return The Condition Infos for the Conditions in this Conditional
+	 *         Permission Info.
+	 */
+	ConditionInfo[] getConditionInfos();
+
+	/**
+	 * Returns the Permission Infos for the Permission in this Conditional
+	 * Permission Info.
+	 * 
+	 * @return The Permission Infos for the Permission in this Conditional
+	 *         Permission Info.
+	 */
+	PermissionInfo[] getPermissionInfos();
+
 	/**
 	 * Removes this Conditional Permission Info from the Conditional Permission
 	 * Table.
 	 * <p>
 	 * Since this method changes the underlying permission table any
-	 * {@link ConditionalPermissionsUpdate}s that were created prior to calling
+	 * {@link ConditionalPermissionUpdate}s that were created prior to calling
 	 * this method can no longer be committed.
 	 * 
+	 * @throws UnsupportedOperationException If this object was created by
+	 *         {@link ConditionalPermissionAdmin#newConditionalPermissionInfo}
+	 *         or obtained from a {@link ConditionalPermissionUpdate}. This
+	 *         method only functions if this object was obtained from one of the
+	 *         {@link ConditionalPermissionAdmin} methods deprecated in version
+	 *         1.1.
 	 * @throws SecurityException If the caller does not have
 	 *         <code>AllPermission</code>.
+	 * @deprecated Since 1.1. Use
+	 *             {@link ConditionalPermissionAdmin#newConditionalPermissionUpdate()}
+	 *             instead to manage the Conditional Permissions.
 	 */
-	public void delete();
+	void delete();
+
+	/**
+	 * Returns the name of this Conditional Permission Info.
+	 * 
+	 * @return The name of this Conditional Permission Info.
+	 */
+	String getName();
+
+	/**
+	 * Returns the grant decision for this Conditional Permission Info.
+	 * 
+	 * @return One of the following values:
+	 *         <ul>
+	 *         <li>{@link #ALLOW allow} - The grant decision is
+	 *         &quot;allow&quot;.</li>
+	 *         <li>{@link #DENY deny} - The grant decision is &quot;deny&quot;.</li>
+	 *         </ul>
+	 * @since 1.1
+	 */
+	String getGrantDecision();
 }
diff --git a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfoBase.java b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfoBase.java
deleted file mode 100644
index ffaf1ea..0000000
--- a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionInfoBase.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) OSGi Alliance (2008). All Rights Reserved.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.osgi.service.condpermadmin;
-
-import org.osgi.service.permissionadmin.PermissionInfo;
-
-/**
- * A binding of a set of Conditions to a set of Permissions. Instances of this
- * interface are obtained from the Conditional Permission Admin service.
- * 
- * @Immutable
- * @since 1.1
- * @version $Revision: 5654 $
- */
-public interface ConditionalPermissionInfoBase {
-	/**
-	 * This string is used to indicate that a row in the conditional permission
-	 * admin table should return a grant decision of ALLOW if the conditions are
-	 * all satisfied and at least one of the permissions is implied.
-	 */
-	public final static String	ALLOW	= "allow";
-
-	/**
-	 * This string is used to indicate that a row in the conditional permission
-	 * admin table should return a grant decision of DENY if the conditions are
-	 * all satisfied and at least one of the permissions is implied.
-	 */
-	public final static String	DENY	= "deny";
-
-	/**
-	 * Returns the Condition Infos for the Conditions that must be satisfied to
-	 * enable the Permissions.
-	 * 
-	 * @return The Condition Infos for the Conditions in this Conditional
-	 *         Permission Info.
-	 */
-	public ConditionInfo[] getConditionInfos();
-
-	/**
-	 * Returns the Permission Infos for the Permission in this Conditional
-	 * Permission Info.
-	 * 
-	 * @return The Permission Infos for the Permission in this Conditional
-	 *         Permission Info.
-	 */
-	public PermissionInfo[] getPermissionInfos();
-
-	/**
-	 * Returns the grant decision for this Conditional Permission Info.
-	 * 
-	 * @return One of the following values:
-	 *         <ul>
-	 *         <li>{@link #ALLOW allow} - The grant decision is allow.</li>
-	 * 
-	 *         <li>{@link #DENY deny} - The grant decision is DENY.</li>
-	 *         </ul>
-	 */
-	public String getGrantDecision();
-
-	/**
-	 * Returns the name of this Conditional Permission Info.
-	 * 
-	 * @return The name of this Conditional Permission Info.
-	 */
-	public String getName();
-}
diff --git a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionsUpdate.java b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionUpdate.java
similarity index 67%
rename from bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionsUpdate.java
rename to bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionUpdate.java
index 329ff80..b4a44b5 100644
--- a/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionsUpdate.java
+++ b/bundles/org.eclipse.osgi/osgi/src/org/osgi/service/condpermadmin/ConditionalPermissionUpdate.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) OSGi Alliance (2008). All Rights Reserved.
+ * Copyright (c) OSGi Alliance (2008, 2009). All Rights Reserved.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,36 +24,33 @@
  * Table has been modified since this update was created, then the call to
  * commit will fail and this object should be discarded.
  * 
- * @version $Revision: 5654 $
+ * @ThreadSafe
+ * @version $Revision: 6279 $
  * @since 1.1
  */
-public interface ConditionalPermissionsUpdate {
+public interface ConditionalPermissionUpdate {
 	/**
-	 * This method returns the list of {@link ConditionalPermissionInfoBase}s
-	 * for this update. This list is originally based on the Conditional
-	 * Permission Table at the time this update was created. The list returned
-	 * by this method will be replace the Conditional Permission Table if commit
-	 * is called and is successful.
+	 * This method returns the list of {@link ConditionalPermissionInfo}s for
+	 * this update. This list is originally based on the Conditional Permission
+	 * Table at the time this update was created. The list returned by this
+	 * method will be replace the Conditional Permission Table if commit is
+	 * called and is successful.
 	 * <p>
-	 * The elements of the list must NOT be instances of type
-	 * {@link ConditionalPermissionInfo}, but must rather be of type
-	 * {@link ConditionalPermissionInfoBase}. This is to ensure the
-	 * {@link ConditionalPermissionInfo#delete delete} method cannot be
-	 * mistakenly used.
+	 * The {@link ConditionalPermissionInfo#delete delete} method of the
+	 * ConditionalPermissionInfos in the list must throw
+	 * UnsupportedOperationException.
 	 * <p>
 	 * The list returned by this method is ordered and the most significant
 	 * table entry is the first entry in the list.
 	 * 
-	 * @return A <code>List</code> of the Conditional Permission Info Bases
+	 * @return A <code>List</code> of the {@link ConditionalPermissionInfo}s
 	 *         which represent the Conditional Permissions maintained by this
 	 *         update. Modifications to this list will not affect the
 	 *         Conditional Permission Table until successfully committed. The
-	 *         elements in this list must be of type
-	 *         {@link ConditionalPermissionInfoBase}. The list may be empty if
-	 *         the Conditional Permission Table was empty when this update was
-	 *         created.
+	 *         list may be empty if the Conditional Permission Table was empty
+	 *         when this update was created.
 	 */
-  public List getConditionalPermissionInfoBases();
+	List /* <ConditionalPermissionInfo> */getConditionalPermissionInfos();
 
 	/**
 	 * Commit the update. If no changes have been made to the Conditional
@@ -62,10 +59,10 @@
 	 * Permissions. This method may only be successfully called once on this
 	 * object.
 	 * <p>
-	 * If any of the {@link ConditionalPermissionInfoBase} objects in the update
-	 * list has <code>null</code> as a name it will be replaced with a
-	 * {@link ConditionalPermissionInfoBase} object that has a generated name
-	 * which is unique within the list.
+	 * If any of the {@link ConditionalPermissionInfo}s in the update list has
+	 * <code>null</code> as a name it will be replaced with a
+	 * {@link ConditionalPermissionInfo} object that has a generated name which
+	 * is unique within the list.
 	 * <p>
 	 * No two entries in this update's Conditional Permissions may have the same
 	 * name. Other consistency checks may also be performed. If the update's
@@ -84,7 +81,6 @@
 	 *         not valid or inconsistent. For example, if this update has two
 	 *         Conditional Permissions in it with the same name, then this
 	 *         exception will be thrown.
-	 * 
 	 */
-  public boolean commit();
+	boolean commit();
 }