Index: /trunk/ICeCoffEE/ICeCoffEE/English.lproj/Localizable.strings
===================================================================
--- /trunk/ICeCoffEE/ICeCoffEE/English.lproj/Localizable.strings	(revision 78)
+++ /trunk/ICeCoffEE/ICeCoffEE/English.lproj/Localizable.strings	(revision 79)
@@ -29,5 +29,5 @@
 /* Buttons */
 "Add" = "Add";
-"Cancel" = "Cancel"; /* XXX use alternate value? */
+"Cancel" = "Cancel";
 
 /**** Shared URL launching errors ****/
@@ -98,4 +98,7 @@
 "-50" = "The selection is not a complete URL";
 
+/* kTECNoConversionPathErr */
+"-8749" = "The selected URL contains invalid (non-ASCII) characters";
+
 /* Message to use if no OSError lookup message is available; substitutes context */
 "An unknown error occurred in %@" = "An unknown error occurred in %@";
Index: /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE APE.pbproj/nicholas.pbxuser
===================================================================
--- /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE APE.pbproj/nicholas.pbxuser	(revision 78)
+++ /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE APE.pbproj/nicholas.pbxuser	(revision 79)
@@ -12,5 +12,5 @@
 			E1317A3803DF24F800050002,
 			E136EAA903E48B0400050002,
-			E1CBCCBE03E7823300050002,
+			E18A7D2903ED430100050001,
 		);
 		executables = (
@@ -23,30 +23,30 @@
 		);
 		perUserDictionary = {
-			PBXPerProjectTemplateStateSaveDate = 65838634;
-			"PBXTemplateGeometry-F5CA7EC9015C08ED0DCA290F" = {
-				ContentSize = "{665, 594}";
+			PBXPerProjectTemplateStateSaveDate = 65885964;
+			"PBXTemplateGeometry-64ABBB4501FA494900185B06" = {
+				ContentSize = "{986, 684}";
 				LeftSlideOut = {
+					ActiveTab = 0;
+					ActiveTabName = PBXGroupTreeModule;
 					Collapsed = NO;
-					Frame = "{{0, 0}, {665, 594}}";
+					Frame = "{{0, 23}, {986, 661}}";
 					Split0 = {
-						ActiveTab = 3;
-						ActiveTabName = PBXProjectFindModule;
 						Collapsed = NO;
-						Frame = "{{0, 0}, {665, 594}}";
+						Frame = "{{282, 0}, {704, 661}}";
 						Split0 = {
-							Frame = "{{0, 301}, {665, 293}}";
+							Frame = "{{0, 0}, {704, 661}}";
 						};
 						SplitCount = 1;
 						Tab0 = {
-							Frame = "{{0, 0}, {484, 208}}";
+							Frame = "{{0, 0}, {681, 289}}";
 						};
 						Tab1 = {
 							Debugger = {
 								Collapsed = NO;
-								Frame = "{{0, 0}, {664, 208}}";
+								Frame = "{{0, 0}, {681, 150}}";
 								Split0 = {
-									Frame = "{{0, 24}, {664, 184}}";
+									Frame = "{{0, 24}, {681, 126}}";
 									Split0 = {
-										Frame = "{{0, 0}, {325, 184}}";
+										Frame = "{{0, 0}, {333, 126}}";
 									};
 									Split1 = {
@@ -57,7 +57,7 @@
 											85,
 											Summary,
-											96.123,
+											105.123,
 										);
-										Frame = "{{334, 0}, {330, 184}}";
+										Frame = "{{342, 0}, {339, 126}}";
 									};
 									SplitCount = 2;
@@ -73,22 +73,22 @@
 								TabsVisible = YES;
 							};
-							Frame = "{{0, 0}, {664, 208}}";
+							Frame = "{{0, 0}, {681, 120}}";
 							LauncherConfigVersion = 7;
 						};
 						Tab2 = {
-							Frame = "{{0, 0}, {664, 50}}";
+							Frame = "{{0, 0}, {681, 234}}";
 							LauncherConfigVersion = 3;
 							Runner = {
-								Frame = "{{0, 0}, {664, 50}}";
+								Frame = "{{0, 0}, {681, 234}}";
 							};
 						};
 						Tab3 = {
-							BuildMessageFrame = "{{0, 0}, {667, 265}}";
-							BuildTranscriptFrame = "{{0, 274}, {667, 2}}";
+							BuildMessageFrame = "{{0, 0}, {683, 205}}";
+							BuildTranscriptFrame = "{{0, 214}, {683, 2}}";
 							BuildTranscriptFrameExpanded = YES;
-							Frame = "{{0, 0}, {665, 298}}";
+							Frame = "{{0, 0}, {681, 238}}";
 						};
 						Tab4 = {
-							Frame = "{{0, 0}, {665, 295}}";
+							Frame = "{{0, 0}, {612, 295}}";
 						};
 						TabCount = 5;
@@ -97,39 +97,39 @@
 					SplitCount = 1;
 					Tab0 = {
-						Frame = "{{0, 0}, {313, 531}}";
+						Frame = "{{0, 0}, {258, 661}}";
 						GroupTreeTableConfiguration = (
 							TargetStatusColumn,
 							18,
 							MainColumn,
-							280,
+							225,
 						);
 					};
 					Tab1 = {
-						ClassesFrame = "{{0, 0}, {280, 398}}";
+						ClassesFrame = "{{0, 0}, {250, 333}}";
 						ClassesTreeTableConfiguration = (
 							PBXBookColumnIdentifier,
 							20,
 							PBXClassColumnIdentifier,
-							237,
-						);
-						Frame = "{{0, 0}, {278, 659}}";
-						MembersFrame = "{{0, 407}, {280, 252}}";
+							207,
+						);
+						Frame = "{{0, 0}, {248, 554}}";
+						MembersFrame = "{{0, 342}, {250, 212}}";
 						MembersTreeTableConfiguration = (
 							PBXBookColumnIdentifier,
 							20,
 							PBXMethodColumnIdentifier,
-							236,
+							206,
 						);
 					};
 					Tab2 = {
-						Frame = "{{0, 0}, {200, 100}}";
+						Frame = "{{0, 0}, {217, 554}}";
 					};
 					Tab3 = {
-						Frame = "{{0, 0}, {200, 557}}";
+						Frame = "{{0, 0}, {239, 554}}";
 						TargetTableConfiguration = (
 							ActiveObject,
 							16,
 							ObjectNames,
-							202.296,
+							206.296,
 						);
 					};
@@ -141,38 +141,40 @@
 							31,
 						);
-						Frame = "{{0, 0}, {250, 100}}";
+						Frame = "{{0, 0}, {250, 554}}";
 					};
 					TabCount = 5;
-					TabsVisible = NO;
+					TabsVisible = YES;
 				};
 				NavBarShownByDefault = YES;
-				StatusViewVisible = NO;
-				Template = F5CA7EC9015C08ED0DCA290F;
-				ToolbarVisible = NO;
-				WindowLocation = "{594, 98}";
+				StatusViewVisible = YES;
+				Template = 64ABBB4501FA494900185B06;
+				ToolbarVisible = YES;
+				WindowLocation = "{-3, 432}";
 			};
-			"PBXTemplateGeometry-F5CA7ECB015C094F0DCA290F" = {
-				ContentSize = "{668, 621}";
+			"PBXTemplateGeometry-F5314676015831810DCA290F" = {
+				ContentSize = "{618, 257}";
 				LeftSlideOut = {
 					Collapsed = NO;
-					Frame = "{{0, 0}, {668, 621}}";
+					Frame = "{{0, 23}, {618, 234}}";
 					Split0 = {
-						Collapsed = NO;
-						Frame = "{{0, 0}, {668, 621}}";
+						ActiveTab = 2;
+						ActiveTabName = PBXBuildResultsModule;
+						Collapsed = YES;
+						Frame = "{{0, 0}, {618, 234}}";
 						Split0 = {
-							Frame = "{{0, 0}, {668, 621}}";
+							Frame = "{{1e+06, 1e+06}, {618, 0}}";
 						};
 						SplitCount = 1;
 						Tab0 = {
-							Frame = "{{0, 0}, {484, 208}}";
+							Frame = "{{0, 0}, {952, 321}}";
 						};
 						Tab1 = {
 							Debugger = {
 								Collapsed = NO;
-								Frame = "{{0, 0}, {664, 208}}";
+								Frame = "{{0, 0}, {781, 452}}";
 								Split0 = {
-									Frame = "{{0, 24}, {664, 184}}";
+									Frame = "{{0, 24}, {781, 428}}";
 									Split0 = {
-										Frame = "{{0, 0}, {325, 184}}";
+										Frame = "{{0, 0}, {383, 428}}";
 									};
 									Split1 = {
@@ -183,7 +185,7 @@
 											85,
 											Summary,
-											96.123,
+											155.123,
 										);
-										Frame = "{{334, 0}, {330, 184}}";
+										Frame = "{{392, 0}, {389, 428}}";
 									};
 									SplitCount = 2;
@@ -199,19 +201,19 @@
 								TabsVisible = YES;
 							};
-							Frame = "{{0, 0}, {664, 208}}";
+							Frame = "{{0, 0}, {781, 452}}";
 							LauncherConfigVersion = 7;
 						};
 						Tab2 = {
-							Frame = "{{0, 0}, {664, 50}}";
+							Frame = "{{0, 0}, {618, 228}}";
 							LauncherConfigVersion = 3;
 							Runner = {
-								Frame = "{{0, 0}, {664, 50}}";
+								Frame = "{{0, 0}, {618, 228}}";
 							};
 						};
 						Tab3 = {
-							BuildMessageFrame = "{{0, 0}, {614, 262}}";
-							BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
+							BuildMessageFrame = "{{0, 0}, {620, 103}}";
+							BuildTranscriptFrame = "{{0, 112}, {620, 94}}";
 							BuildTranscriptFrameExpanded = YES;
-							Frame = "{{0, 0}, {612, 295}}";
+							Frame = "{{0, 0}, {618, 228}}";
 						};
 						Tab4 = {
@@ -223,10 +225,10 @@
 					SplitCount = 1;
 					Tab0 = {
-						Frame = "{{0, 0}, {313, 531}}";
+						Frame = "{{0, 0}, {300, 533}}";
 						GroupTreeTableConfiguration = (
 							TargetStatusColumn,
 							18,
 							MainColumn,
-							280,
+							267,
 						);
 					};
@@ -252,5 +254,5 @@
 					};
 					Tab3 = {
-						Frame = "{{0, 0}, {200, 557}}";
+						Frame = "{{0, 0}, {200, 100}}";
 						TargetTableConfiguration = (
 							ActiveObject,
@@ -273,8 +275,136 @@
 				};
 				NavBarShownByDefault = YES;
-				StatusViewVisible = NO;
-				Template = F5CA7ECB015C094F0DCA290F;
-				ToolbarVisible = NO;
-				WindowLocation = "{48, 189}";
+				StatusViewVisible = YES;
+				Template = F5314676015831810DCA290F;
+				ToolbarVisible = YES;
+				WindowLocation = "{457, 317}";
+			};
+			"PBXTemplateGeometry-F5534CB2020F3F8A0DCA290F" = {
+				ContentSize = "{594, 303}";
+				LeftSlideOut = {
+					Collapsed = NO;
+					Frame = "{{0, 23}, {594, 280}}";
+					Split0 = {
+						ActiveTab = 1;
+						ActiveTabName = PBXRunSessionModule;
+						Collapsed = YES;
+						Frame = "{{0, 0}, {594, 280}}";
+						Split0 = {
+							Frame = "{{1e+06, 1e+06}, {594, 0}}";
+						};
+						SplitCount = 1;
+						Tab0 = {
+							Frame = "{{0, 0}, {804, 321}}";
+						};
+						Tab1 = {
+							Debugger = {
+								Collapsed = NO;
+								Frame = "{{0, 0}, {594, 274}}";
+								Split0 = {
+									Frame = "{{0, 24}, {594, 250}}";
+									Split0 = {
+										Frame = "{{0, 0}, {290, 250}}";
+									};
+									Split1 = {
+										DebugVariablesTableConfiguration = (
+											Name,
+											123,
+											Value,
+											85,
+											Summary,
+											62.123,
+										);
+										Frame = "{{299, 0}, {295, 250}}";
+									};
+									SplitCount = 2;
+								};
+								SplitCount = 1;
+								Tab0 = {
+									Frame = "{{0, 0}, {100, 50}}";
+								};
+								Tab1 = {
+									Frame = "{{0, 0}, {100, 50}}";
+								};
+								TabCount = 2;
+								TabsVisible = YES;
+							};
+							Frame = "{{0, 0}, {594, 274}}";
+							LauncherConfigVersion = 7;
+						};
+						Tab2 = {
+							Frame = "{{0, 0}, {594, 274}}";
+							LauncherConfigVersion = 3;
+							Runner = {
+								Frame = "{{0, 0}, {594, 274}}";
+							};
+						};
+						Tab3 = {
+							BuildMessageFrame = "{{0, 0}, {614, 262}}";
+							BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
+							BuildTranscriptFrameExpanded = YES;
+							Frame = "{{0, 0}, {612, 295}}";
+						};
+						Tab4 = {
+							Frame = "{{0, 0}, {612, 295}}";
+						};
+						TabCount = 5;
+						TabsVisible = NO;
+					};
+					SplitCount = 1;
+					Tab0 = {
+						Frame = "{{0, 0}, {300, 533}}";
+						GroupTreeTableConfiguration = (
+							TargetStatusColumn,
+							18,
+							MainColumn,
+							267,
+						);
+					};
+					Tab1 = {
+						ClassesFrame = "{{0, 0}, {280, 398}}";
+						ClassesTreeTableConfiguration = (
+							PBXBookColumnIdentifier,
+							20,
+							PBXClassColumnIdentifier,
+							237,
+						);
+						Frame = "{{0, 0}, {278, 659}}";
+						MembersFrame = "{{0, 407}, {280, 252}}";
+						MembersTreeTableConfiguration = (
+							PBXBookColumnIdentifier,
+							20,
+							PBXMethodColumnIdentifier,
+							236,
+						);
+					};
+					Tab2 = {
+						Frame = "{{0, 0}, {200, 100}}";
+					};
+					Tab3 = {
+						Frame = "{{0, 0}, {200, 386}}";
+						TargetTableConfiguration = (
+							ActiveObject,
+							16,
+							ObjectNames,
+							202.296,
+						);
+					};
+					Tab4 = {
+						BreakpointsTreeTableConfiguration = (
+							breakpointColumn,
+							197,
+							enabledColumn,
+							31,
+						);
+						Frame = "{{0, 0}, {250, 386}}";
+					};
+					TabCount = 5;
+					TabsVisible = NO;
+				};
+				NavBarShownByDefault = YES;
+				StatusViewVisible = YES;
+				Template = F5534CB2020F3F8A0DCA290F;
+				ToolbarVisible = YES;
+				WindowLocation = "{4, 633}";
 			};
 			PBXWorkspaceContents = (
@@ -284,29 +414,15 @@
 							Split0 = {
 								NavContent0 = {
-									bookmark = E139ADD303ECF43F00000ABE;
 									history = (
-										E139ADC303ECF43F00000ABE,
-										E139ADC403ECF43F00000ABE,
-										E139ADC503ECF43F00000ABE,
-										E139ADC603ECF43F00000ABE,
-										E139ADC703ECF43F00000ABE,
-										E139ADC803ECF43F00000ABE,
-										E139ADC903ECF43F00000ABE,
+										E139ADD403ECF43F00000ABE,
+										E139ADD703ECF43F00000ABE,
 									);
 									prevStack = (
-										E139ADCA03ECF43F00000ABE,
-										E139ADCB03ECF43F00000ABE,
-										E139ADCC03ECF43F00000ABE,
-										E139ADCD03ECF43F00000ABE,
-										E139ADCE03ECF43F00000ABE,
-										E139ADCF03ECF43F00000ABE,
-										E139ADD003ECF43F00000ABE,
-										E139ADD103ECF43F00000ABE,
-										E139ADD203ECF43F00000ABE,
+										E139ADD603ECF43F00000ABE,
 									);
 								};
 								NavCount = 1;
 								NavGeometry0 = {
-									Frame = "{{0, 0}, {803, 685}}";
+									Frame = "{{0, 0}, {651, 150}}";
 									NavBarVisible = YES;
 								};
@@ -338,228 +454,18 @@
 					};
 				},
-				{
-					LeftSlideOut = {
-						Split0 = {
-							Split0 = {
-								NavContent0 = {
-									bookmark = E139ADD703ECF43F00000ABE;
-									history = (
-										E139ADD403ECF43F00000ABE,
-										E139ADD503ECF43F00000ABE,
-									);
-									prevStack = (
-										E139ADD603ECF43F00000ABE,
-									);
-								};
-								NavCount = 1;
-								NavGeometry0 = {
-									Frame = "{{0, 0}, {685, 150}}";
-									NavBarVisible = YES;
-								};
-								NavSplitVertical = NO;
-							};
-							SplitCount = 1;
-							Tab1 = {
-								Debugger = {
-									Split0 = {
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									TabCount = 2;
-								};
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								LauncherConfigVersion = 3;
-								Runner = {
-								};
-							};
-							TabCount = 5;
-						};
-						SplitCount = 1;
-						Tab1 = {
-							OptionsSetName = "Hierarchy, all classes";
-						};
-						TabCount = 5;
-					};
-				},
-				{
-					LeftSlideOut = {
-						Split0 = {
-							Split0 = {
-								NavCount = 1;
-								NavGeometry0 = {
-									Frame = "{{0, 0}, {594, 150}}";
-									NavBarVisible = YES;
-								};
-								NavSplitVertical = NO;
-							};
-							SplitCount = 1;
-							Tab1 = {
-								Debugger = {
-									Split0 = {
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									TabCount = 2;
-								};
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								LauncherConfigVersion = 3;
-								Runner = {
-								};
-							};
-							TabCount = 5;
-						};
-						SplitCount = 1;
-						Tab1 = {
-							OptionsSetName = "Hierarchy, all classes";
-						};
-						TabCount = 5;
-					};
-				},
 			);
 			PBXWorkspaceGeometries = (
 				{
-					ContentSize = "{1084, 708}";
-					LeftSlideOut = {
-						ActiveTab = 0;
-						ActiveTabName = PBXGroupTreeModule;
-						Collapsed = NO;
-						Frame = "{{0, 23}, {1084, 685}}";
-						Split0 = {
-							Collapsed = NO;
-							Frame = "{{281, 0}, {803, 685}}";
-							Split0 = {
-								Frame = "{{0, 0}, {803, 685}}";
-							};
-							SplitCount = 1;
-							Tab0 = {
-								Frame = "{{0, 0}, {681, 289}}";
-							};
-							Tab1 = {
-								Debugger = {
-									Collapsed = NO;
-									Frame = "{{0, 0}, {681, 150}}";
-									Split0 = {
-										Frame = "{{0, 24}, {681, 126}}";
-										Split0 = {
-											Frame = "{{0, 0}, {333, 126}}";
-										};
-										Split1 = {
-											DebugVariablesTableConfiguration = (
-												Name,
-												123,
-												Value,
-												85,
-												Summary,
-												105.123,
-											);
-											Frame = "{{342, 0}, {339, 126}}";
-										};
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									Tab0 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									Tab1 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									TabCount = 2;
-									TabsVisible = YES;
-								};
-								Frame = "{{0, 0}, {681, 120}}";
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								Frame = "{{0, 0}, {681, 234}}";
-								LauncherConfigVersion = 3;
-								Runner = {
-									Frame = "{{0, 0}, {681, 234}}";
-								};
-							};
-							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {683, 205}}";
-								BuildTranscriptFrame = "{{0, 214}, {683, 2}}";
-								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {681, 238}}";
-							};
-							Tab4 = {
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							TabCount = 5;
-							TabsVisible = NO;
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Frame = "{{0, 0}, {257, 685}}";
-							GroupTreeTableConfiguration = (
-								TargetStatusColumn,
-								18,
-								MainColumn,
-								224,
-							);
-						};
-						Tab1 = {
-							ClassesFrame = "{{0, 0}, {250, 333}}";
-							ClassesTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXClassColumnIdentifier,
-								207,
-							);
-							Frame = "{{0, 0}, {248, 554}}";
-							MembersFrame = "{{0, 342}, {250, 212}}";
-							MembersTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXMethodColumnIdentifier,
-								206,
-							);
-						};
-						Tab2 = {
-							Frame = "{{0, 0}, {217, 554}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {239, 685}}";
-							TargetTableConfiguration = (
-								ActiveObject,
-								16,
-								ObjectNames,
-								206.296,
-							);
-						};
-						Tab4 = {
-							BreakpointsTreeTableConfiguration = (
-								breakpointColumn,
-								197,
-								enabledColumn,
-								31,
-							);
-							Frame = "{{0, 0}, {250, 685}}";
-						};
-						TabCount = 5;
-						TabsVisible = YES;
-					};
-					NavBarShownByDefault = YES;
-					StatusViewVisible = YES;
-					Template = 64ABBB4501FA494900185B06;
-					ToolbarVisible = YES;
-					WindowLocation = "{16, 62}";
-				},
-				{
-					ContentSize = "{685, 434}";
+					ContentSize = "{618, 257}";
 					LeftSlideOut = {
 						Collapsed = NO;
-						Frame = "{{0, 23}, {685, 411}}";
+						Frame = "{{0, 23}, {618, 234}}";
 						Split0 = {
 							ActiveTab = 2;
 							ActiveTabName = PBXBuildResultsModule;
-							Collapsed = NO;
-							Frame = "{{0, 0}, {685, 411}}";
+							Collapsed = YES;
+							Frame = "{{0, 0}, {618, 234}}";
 							Split0 = {
-								Frame = "{{0, 301}, {685, 110}}";
+								Frame = "{{1e+06, 1e+06}, {618, 0}}";
 							};
 							SplitCount = 1;
@@ -603,15 +509,15 @@
 							};
 							Tab2 = {
-								Frame = "{{0, 0}, {685, 215}}";
+								Frame = "{{0, 0}, {618, 228}}";
 								LauncherConfigVersion = 3;
 								Runner = {
-									Frame = "{{0, 0}, {685, 215}}";
+									Frame = "{{0, 0}, {618, 228}}";
 								};
 							};
 							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {687, 262}}";
-								BuildTranscriptFrame = "{{0, 271}, {687, 2}}";
+								BuildMessageFrame = "{{0, 0}, {620, 103}}";
+								BuildTranscriptFrame = "{{0, 112}, {620, 94}}";
 								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {685, 295}}";
+								Frame = "{{0, 0}, {618, 228}}";
 							};
 							Tab4 = {
@@ -676,157 +582,11 @@
 					Template = F5314676015831810DCA290F;
 					ToolbarVisible = YES;
-					WindowLocation = "{286, -79}";
-				},
-				{
-					ContentSize = "{594, 303}";
-					LeftSlideOut = {
-						Collapsed = NO;
-						Frame = "{{0, 23}, {594, 280}}";
-						Split0 = {
-							ActiveTab = 1;
-							ActiveTabName = PBXRunSessionModule;
-							Collapsed = YES;
-							Frame = "{{0, 0}, {594, 280}}";
-							Split0 = {
-								Frame = "{{1e+06, 1e+06}, {594, 27}}";
-							};
-							SplitCount = 1;
-							Tab0 = {
-								Frame = "{{0, 0}, {804, 321}}";
-							};
-							Tab1 = {
-								Debugger = {
-									Collapsed = NO;
-									Frame = "{{0, 0}, {594, 274}}";
-									Split0 = {
-										Frame = "{{0, 24}, {594, 250}}";
-										Split0 = {
-											Frame = "{{0, 0}, {290, 250}}";
-										};
-										Split1 = {
-											DebugVariablesTableConfiguration = (
-												Name,
-												123,
-												Value,
-												85,
-												Summary,
-												62.123,
-											);
-											Frame = "{{299, 0}, {295, 250}}";
-										};
-										SplitCount = 2;
-									};
-									SplitCount = 1;
-									Tab0 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									Tab1 = {
-										Frame = "{{0, 0}, {100, 50}}";
-									};
-									TabCount = 2;
-									TabsVisible = YES;
-								};
-								Frame = "{{0, 0}, {594, 274}}";
-								LauncherConfigVersion = 7;
-							};
-							Tab2 = {
-								Frame = "{{0, 0}, {594, 274}}";
-								LauncherConfigVersion = 3;
-								Runner = {
-									Frame = "{{0, 0}, {594, 274}}";
-								};
-							};
-							Tab3 = {
-								BuildMessageFrame = "{{0, 0}, {614, 262}}";
-								BuildTranscriptFrame = "{{0, 271}, {614, 2}}";
-								BuildTranscriptFrameExpanded = YES;
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							Tab4 = {
-								Frame = "{{0, 0}, {612, 295}}";
-							};
-							TabCount = 5;
-							TabsVisible = NO;
-						};
-						SplitCount = 1;
-						Tab0 = {
-							Frame = "{{0, 0}, {300, 533}}";
-							GroupTreeTableConfiguration = (
-								TargetStatusColumn,
-								18,
-								MainColumn,
-								267,
-							);
-						};
-						Tab1 = {
-							ClassesFrame = "{{0, 0}, {280, 398}}";
-							ClassesTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXClassColumnIdentifier,
-								237,
-							);
-							Frame = "{{0, 0}, {278, 659}}";
-							MembersFrame = "{{0, 407}, {280, 252}}";
-							MembersTreeTableConfiguration = (
-								PBXBookColumnIdentifier,
-								20,
-								PBXMethodColumnIdentifier,
-								236,
-							);
-						};
-						Tab2 = {
-							Frame = "{{0, 0}, {200, 100}}";
-						};
-						Tab3 = {
-							Frame = "{{0, 0}, {200, 386}}";
-							TargetTableConfiguration = (
-								ActiveObject,
-								16,
-								ObjectNames,
-								202.296,
-							);
-						};
-						Tab4 = {
-							BreakpointsTreeTableConfiguration = (
-								breakpointColumn,
-								197,
-								enabledColumn,
-								31,
-							);
-							Frame = "{{0, 0}, {250, 386}}";
-						};
-						TabCount = 5;
-						TabsVisible = NO;
-					};
-					NavBarShownByDefault = YES;
-					StatusViewVisible = YES;
-					Template = F5534CB2020F3F8A0DCA290F;
-					ToolbarVisible = YES;
-					WindowLocation = "{4, 463}";
+					WindowLocation = "{457, 317}";
 				},
 			);
-			PBXWorkspaceStateSaveDate = 65838634;
+			PBXWorkspaceStateSaveDate = 65885964;
 		};
 		perUserProjectItems = {
-			E139ADC303ECF43F00000ABE = E139ADC303ECF43F00000ABE;
-			E139ADC403ECF43F00000ABE = E139ADC403ECF43F00000ABE;
-			E139ADC503ECF43F00000ABE = E139ADC503ECF43F00000ABE;
-			E139ADC603ECF43F00000ABE = E139ADC603ECF43F00000ABE;
-			E139ADC703ECF43F00000ABE = E139ADC703ECF43F00000ABE;
-			E139ADC803ECF43F00000ABE = E139ADC803ECF43F00000ABE;
-			E139ADC903ECF43F00000ABE = E139ADC903ECF43F00000ABE;
-			E139ADCA03ECF43F00000ABE = E139ADCA03ECF43F00000ABE;
-			E139ADCB03ECF43F00000ABE = E139ADCB03ECF43F00000ABE;
-			E139ADCC03ECF43F00000ABE = E139ADCC03ECF43F00000ABE;
-			E139ADCD03ECF43F00000ABE = E139ADCD03ECF43F00000ABE;
-			E139ADCE03ECF43F00000ABE = E139ADCE03ECF43F00000ABE;
-			E139ADCF03ECF43F00000ABE = E139ADCF03ECF43F00000ABE;
-			E139ADD003ECF43F00000ABE = E139ADD003ECF43F00000ABE;
-			E139ADD103ECF43F00000ABE = E139ADD103ECF43F00000ABE;
-			E139ADD203ECF43F00000ABE = E139ADD203ECF43F00000ABE;
-			E139ADD303ECF43F00000ABE = E139ADD303ECF43F00000ABE;
 			E139ADD403ECF43F00000ABE = E139ADD403ECF43F00000ABE;
-			E139ADD503ECF43F00000ABE = E139ADD503ECF43F00000ABE;
 			E139ADD603ECF43F00000ABE = E139ADD603ECF43F00000ABE;
 			E139ADD703ECF43F00000ABE = E139ADD703ECF43F00000ABE;
@@ -970,168 +730,4 @@
 		state = 1;
 	};
-	E139ADC303ECF43F00000ABE = {
-		fRef = E139ADD803ECF43F00000ABE;
-		isa = PBXTextBookmark;
-		name = "Processes.h: 43";
-		rLen = 64;
-		rLoc = 861;
-		rType = 0;
-		vrLen = 1149;
-		vrLoc = 0;
-	};
-	E139ADC403ECF43F00000ABE = {
-		fRef = E139ADD903ECF43F00000ABE;
-		isa = PBXTextBookmark;
-		name = "CFArray.h: 180";
-		rLen = 127;
-		rLoc = 7814;
-		rType = 0;
-		vrLen = 2453;
-		vrLoc = 6528;
-	};
-	E139ADC503ECF43F00000ABE = {
-		fRef = E1317B2F03DFC4DE00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEETerminal.m: selectWhitespaceDelimitedTextAtLine:offset:";
-		rLen = 0;
-		rLoc = 786;
-		rType = 0;
-		vrLen = 1617;
-		vrLoc = 0;
-	};
-	E139ADC603ECF43F00000ABE = {
-		fRef = E165AB3603E7A7FC00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEEActionMenu.c: ICCF_DoURLActionMenu";
-		rLen = 0;
-		rLoc = 8019;
-		rType = 0;
-		vrLen = 2051;
-		vrLoc = 6679;
-	};
-	E139ADC703ECF43F00000ABE = {
-		fRef = E139ADDA03ECF43F00000ABE;
-		isa = PBXTextBookmark;
-		name = "MacErrors.h: 38";
-		rLen = 15;
-		rLoc = 821;
-		rType = 0;
-		vrLen = 1564;
-		vrLoc = 0;
-	};
-	E139ADC803ECF43F00000ABE = {
-		fRef = E13762D203EC636D00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEEBookmarks.c: psn";
-		rLen = 0;
-		rLoc = 3060;
-		rType = 0;
-		vrLen = 1760;
-		vrLoc = 2128;
-	};
-	E139ADC903ECF43F00000ABE = {
-		fRef = F56276C20379923401AA4DA5;
-		isa = PBXBookmark;
-	};
-	E139ADCA03ECF43F00000ABE = {
-		fRef = E13762D203EC636D00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEEBookmarks.c: ICCF_DoBookmarkDialog";
-		rLen = 0;
-		rLoc = 7480;
-		rType = 0;
-		vrLen = 2363;
-		vrLoc = 5145;
-	};
-	E139ADCB03ECF43F00000ABE = {
-		fRef = E165AB3603E7A7FC00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEEActionMenu.c: 34";
-		rLen = 0;
-		rLoc = 1164;
-		rType = 0;
-		vrLen = 2078;
-		vrLoc = 725;
-	};
-	E139ADCC03ECF43F00000ABE = {
-		fRef = E13762D203EC636D00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEEBookmarks.c: textFieldValuesArray";
-		rLen = 0;
-		rLoc = 5603;
-		rType = 0;
-		vrLen = 1853;
-		vrLoc = 2849;
-	};
-	E139ADCD03ECF43F00000ABE = {
-		fRef = E165AB3603E7A7FC00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEEActionMenu.c: 34";
-		rLen = 0;
-		rLoc = 1164;
-		rType = 0;
-		vrLen = 1783;
-		vrLoc = 7537;
-	};
-	E139ADCE03ECF43F00000ABE = {
-		fRef = E13762D203EC636D00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEEBookmarks.c: ICCF_DoBookmarkDialog";
-		rLen = 0;
-		rLoc = 7480;
-		rType = 0;
-		vrLen = 2358;
-		vrLoc = 5116;
-	};
-	E139ADCF03ECF43F00000ABE = {
-		fRef = E165AB3603E7A7FC00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEEActionMenu.c: 34";
-		rLen = 0;
-		rLoc = 1164;
-		rType = 0;
-		vrLen = 1842;
-		vrLoc = 7456;
-	};
-	E139ADD003ECF43F00000ABE = {
-		fRef = E13762D203EC636D00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEEBookmarks.c: 17";
-		rLen = 0;
-		rLoc = 402;
-		rType = 0;
-		vrLen = 1485;
-		vrLoc = 0;
-	};
-	E139ADD103ECF43F00000ABE = {
-		fRef = E1317B2F03DFC4DE00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEETerminal.m: selectWhitespaceDelimitedTextAtLine:offset:";
-		rLen = 0;
-		rLoc = 786;
-		rType = 0;
-		vrLen = 1617;
-		vrLoc = 0;
-	};
-	E139ADD203ECF43F00000ABE = {
-		fRef = E13762D203EC636D00050002;
-		isa = PBXTextBookmark;
-		name = "ICeCoffEEBookmarks.c: psn";
-		rLen = 0;
-		rLoc = 3060;
-		rType = 0;
-		vrLen = 1760;
-		vrLoc = 2128;
-	};
-	E139ADD303ECF43F00000ABE = {
-		fRef = F56276C20379923401AA4DA5;
-		isa = PBXTextBookmark;
-		name = "APEInfo.rtfd: 116";
-		rLen = 0;
-		rLoc = 7205;
-		rType = 0;
-		vrLen = 2044;
-		vrLoc = 6078;
-	};
 	E139ADD403ECF43F00000ABE = {
 		fRef = E165AB3603E7A7FC00050002;
@@ -1144,11 +740,4 @@
 		vrLoc = 993;
 	};
-	E139ADD503ECF43F00000ABE = {
-		fRef = E13762D203EC636D00050002;
-		isa = PBXTextBookmark;
-		rLen = 1;
-		rLoc = 100;
-		rType = 1;
-	};
 	E139ADD603ECF43F00000ABE = {
 		fRef = E165AB3603E7A7FC00050002;
@@ -1170,22 +759,4 @@
 		vrLen = 219;
 		vrLoc = 2955;
-	};
-	E139ADD803ECF43F00000ABE = {
-		isa = PBXFileReference;
-		name = Processes.h;
-		path = /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/Headers/Processes.h;
-		refType = 0;
-	};
-	E139ADD903ECF43F00000ABE = {
-		isa = PBXFileReference;
-		name = CFArray.h;
-		path = /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFArray.h;
-		refType = 0;
-	};
-	E139ADDA03ECF43F00000ABE = {
-		isa = PBXFileReference;
-		name = MacErrors.h;
-		path = /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/MacErrors.h;
-		refType = 0;
 	};
 	E14994BA03DE8A4D00050002 = {
@@ -1241,5 +812,5 @@
 		name = "ICeCoffEETextEdit.c: MyTEClick";
 		rLen = 56;
-		rLoc = 1334;
+		rLoc = 1316;
 		rType = 0;
 		vrLen = 1606;
@@ -1297,4 +868,10 @@
 		vrLoc = 1921;
 	};
+	E18A7D2903ED430100050001 = {
+		fileReference = E14343B403DB4CF200050002;
+		isa = PBXFileBreakpoint;
+		lineNumber = 148;
+		state = 1;
+	};
 	E19EB4E703DD355C00050002 = {
 		activeExec = 0;
@@ -1349,10 +926,4 @@
 		);
 	};
-	E1CBCCBE03E7823300050002 = {
-		fileReference = E169DBA103E4EF5E00050002;
-		isa = PBXFileBreakpoint;
-		lineNumber = 68;
-		state = 1;
-	};
 	F57E31A00379599E01AA4DA5 = {
 		activeExec = 0;
Index: /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE APE.pbproj/project.pbxproj
===================================================================
--- /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE APE.pbproj/project.pbxproj	(revision 78)
+++ /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE APE.pbproj/project.pbxproj	(revision 79)
@@ -91,4 +91,492 @@
 				E14343B303DB4CF200050002,
 				E14343B403DB4CF200050002,
+				E165AB3503E7A7FC00050002,
+				E165AB3603E7A7FC00050002,
+				E13762D103EC636D00050002,
+				E13762D203EC636D00050002,
+				E1AFA51C03ECFDB000050001,
+				E1AFA51D03ECFDBF00050001,
+				F5CD5EAA02DAE61A01AA4DA5,
+				F51250CA038BF76601AA4DA5,
+			);
+			isa = PBXGroup;
+			name = "APE sources";
+			path = "";
+			refType = 4;
+		};
+		29B97317FDCFA39411CA2CEA = {
+			children = (
+				E1BF15BF03DBBE8900050002,
+				29B97318FDCFA39411CA2CEA,
+				089C165CFE840E0CC02AAC07,
+				E1CBC99A03E7603400050002,
+			);
+			isa = PBXGroup;
+			name = Resources;
+			path = "";
+			refType = 4;
+		};
+		29B97318FDCFA39411CA2CEA = {
+			children = (
+				29B97319FDCFA39411CA2CEA,
+			);
+			isa = PBXVariantGroup;
+			name = "APE Manager plugin.nib";
+			path = "";
+			refType = 4;
+		};
+		29B97319FDCFA39411CA2CEA = {
+			isa = PBXFileReference;
+			name = "APE Manager plugin.nib";
+			path = "English.lproj/APE Manager plugin.nib";
+			refType = 4;
+		};
+		29B97323FDCFA39411CA2CEA = {
+			children = (
+				E169DCAB03E4FF7A00050002,
+				F574113202F45276011A08DB,
+				F5D3F9FC0305A40D01FE0BDE,
+				E19EB50303DD36E600050002,
+			);
+			isa = PBXGroup;
+			name = Frameworks;
+			path = "";
+			refType = 4;
+		};
+//290
+//291
+//292
+//293
+//294
+//4A0
+//4A1
+//4A2
+//4A3
+//4A4
+		4A9504CCFFE6A4B311CA0CBA = {
+			buildRules = (
+			);
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				OPTIMIZATION_CFLAGS = "-O0";
+			};
+			isa = PBXBuildStyle;
+			name = Development;
+		};
+		4A9504CDFFE6A4B311CA0CBA = {
+			buildRules = (
+			);
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+			};
+			isa = PBXBuildStyle;
+			name = Deployment;
+		};
+//4A0
+//4A1
+//4A2
+//4A3
+//4A4
+//E10
+//E11
+//E12
+//E13
+//E14
+		E1317B2E03DFC4DE00050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = ICeCoffEETerminal.h;
+			refType = 4;
+		};
+		E1317B2F03DFC4DE00050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = ICeCoffEETerminal.m;
+			refType = 4;
+		};
+		E1317B3003DFC4DE00050002 = {
+			fileRef = E1317B2E03DFC4DE00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E1317B3103DFC4DE00050002 = {
+			fileRef = E1317B2F03DFC4DE00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E135625E03DC9FC200050002 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = ICeCoffEEShared.h;
+			refType = 4;
+		};
+		E135625F03DC9FC200050002 = {
+			fileRef = E135625E03DC9FC200050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E13762D103EC636D00050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = ICeCoffEEBookmarks.h;
+			refType = 4;
+		};
+		E13762D203EC636D00050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = ICeCoffEEBookmarks.c;
+			refType = 4;
+		};
+		E13762D303EC636D00050002 = {
+			fileRef = E13762D103EC636D00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E13762D403EC636D00050002 = {
+			fileRef = E13762D203EC636D00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E14343AE03DB48F700050002 = {
+			children = (
+				F9A6987003BE1DFF00AA4DA5,
+				F9A6987103BE1DFF00AA4DA5,
+				F56276B903796C8B01AA4DA5,
+				F56276BA03796C8B01AA4DA5,
+			);
+			isa = PBXGroup;
+			name = "APE Manager plugin sources";
+			path = "";
+			refType = 4;
+		};
+		E14343B303DB4CF200050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = ICeCoffEE.h;
+			refType = 4;
+		};
+		E14343B403DB4CF200050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = ICeCoffEE.m;
+			refType = 4;
+		};
+		E14343B503DB4CF200050002 = {
+			fileRef = E14343B303DB4CF200050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E14343B603DB4CF200050002 = {
+			fileRef = E14343B403DB4CF200050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E14343B703DB4CFE00050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = ICeCoffEEScanner.h;
+			refType = 4;
+		};
+		E14343B803DB4CFE00050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = ICeCoffEEScanner.m;
+			refType = 4;
+		};
+		E14343B903DB4CFE00050002 = {
+			fileRef = E14343B703DB4CFE00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E14343BA03DB4CFE00050002 = {
+			fileRef = E14343B803DB4CFE00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E14343CD03DB66E900050002 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = ICeCoffEESuper.h;
+			refType = 4;
+		};
+		E14343CE03DB66E900050002 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = ICeCoffEESuper.m;
+			refType = 4;
+		};
+		E14343CF03DB66E900050002 = {
+			fileRef = E14343CD03DB66E900050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E14343D003DB66E900050002 = {
+			fileRef = E14343CE03DB66E900050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E14993A503DE868D00050002 = {
+			children = (
+				E135625E03DC9FC200050002,
+				E182C8F603DE817F00050002,
+			);
+			isa = PBXGroup;
+			name = "Shared sources";
+			path = "";
+			refType = 4;
+		};
+		E14993B803DE872B00050002 = {
+			fileRef = E135625E03DC9FC200050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E165AB3503E7A7FC00050002 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = ICeCoffEEActionMenu.h;
+			refType = 4;
+		};
+		E165AB3603E7A7FC00050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			path = ICeCoffEEActionMenu.c;
+			refType = 4;
+		};
+		E165AB3703E7A7FC00050002 = {
+			fileRef = E165AB3503E7A7FC00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E165AB3803E7A7FC00050002 = {
+			fileRef = E165AB3603E7A7FC00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E169DBA103E4EF5E00050002 = {
+			fileEncoding = 4;
+			indentWidth = 4;
+			isa = PBXFileReference;
+			path = ICeCoffEETextEdit.c;
+			refType = 4;
+			tabWidth = 4;
+			usesTabs = 0;
+		};
+		E169DBA303E4EF5E00050002 = {
+			fileRef = E169DBA103E4EF5E00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E169DBA403E4F27400050002 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = ICeCoffEETextEdit.h;
+			refType = 4;
+		};
+		E169DBA503E4F27400050002 = {
+			fileRef = E169DBA403E4F27400050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E169DBA703E4F6A400050002 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = ICeCoffEEConfig.h;
+			refType = 4;
+		};
+		E169DCAB03E4FF7A00050002 = {
+			isa = PBXFrameworkReference;
+			name = Carbon.framework;
+			path = /System/Library/Frameworks/Carbon.framework;
+			refType = 0;
+		};
+		E169DCAC03E4FF7A00050002 = {
+			fileRef = E169DCAB03E4FF7A00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E182C8F603DE817F00050002 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = ICeCoffEEShared.m;
+			refType = 4;
+		};
+		E182C8F803DE817F00050002 = {
+			fileRef = E182C8F603DE817F00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E182C8FA03DE817F00050002 = {
+			fileRef = E182C8F603DE817F00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E18A7D2703ED3FA400050001 = {
+			fileRef = E169DBA703E4F6A400050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E19EB4E303DD355C00050002 = {
+			buildActionMask = 2147483647;
+			files = (
+				E19EB4FD03DD35A700050002,
+				E19EB50003DD35A700050002,
+			);
+			isa = PBXHeadersBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		E19EB4E403DD355C00050002 = {
+			buildActionMask = 2147483647;
+			files = (
+				E19EB4FE03DD35A700050002,
+				E19EB4FF03DD35A700050002,
+			);
+			isa = PBXSourcesBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		E19EB4E503DD355C00050002 = {
+			buildActionMask = 2147483647;
+			files = (
+				E19EB50403DD36E600050002,
+			);
+			isa = PBXFrameworksBuildPhase;
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		E19EB4E703DD355C00050002 = {
+			buildPhases = (
+				E19EB4E303DD355C00050002,
+				E19EB4E403DD355C00050002,
+				E19EB4E503DD355C00050002,
+			);
+			buildSettings = {
+				OTHER_CFLAGS = "";
+				OTHER_LDFLAGS = "";
+				OTHER_REZFLAGS = "";
+				PRECOMPILE_PREFIX_HEADER = YES;
+				PREFIX_HEADER = ICFindFilesToRemove/ICFindFilesToRemove_Prefix.h;
+				PRODUCT_NAME = ICFindFilesToRemove;
+				REZ_EXECUTABLE = YES;
+				SECTORDER_FLAGS = "";
+				WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+			};
+			dependencies = (
+			);
+			isa = PBXToolTarget;
+			name = ICFindFilesToRemove;
+			productInstallPath = /usr/local/bin;
+			productName = ICFindFilesToRemove;
+			productReference = E19EB4E803DD355C00050002;
+		};
+		E19EB4E803DD355C00050002 = {
+			isa = PBXExecutableFileReference;
+			path = ICFindFilesToRemove;
+			refType = 3;
+		};
+		E19EB4F503DD359100050002 = {
+			children = (
+				E19EB4FB03DD35A700050002,
+				E19EB4FC03DD35A700050002,
+				E19EB4FA03DD35A700050002,
+				E19EB4F903DD35A700050002,
+			);
+			isa = PBXGroup;
+			name = ICFindFilesToRemove;
+			refType = 4;
+		};
+		E19EB4F903DD35A700050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = ICFindFilesToRemove_Prefix.h;
+			path = ICFindFilesToRemove/ICFindFilesToRemove_Prefix.h;
+			refType = 4;
+		};
+		E19EB4FA03DD35A700050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = UICookieMonster.m;
+			path = ICFindFilesToRemove/UICookieMonster.m;
+			refType = 4;
+		};
+		E19EB4FB03DD35A700050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = main.m;
+			path = ICFindFilesToRemove/main.m;
+			refType = 4;
+		};
+		E19EB4FC03DD35A700050002 = {
+			fileEncoding = 30;
+			isa = PBXFileReference;
+			name = UICookieMonster.h;
+			path = ICFindFilesToRemove/UICookieMonster.h;
+			refType = 4;
+		};
+		E19EB4FD03DD35A700050002 = {
+			fileRef = E19EB4F903DD35A700050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E19EB4FE03DD35A700050002 = {
+			fileRef = E19EB4FA03DD35A700050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E19EB4FF03DD35A700050002 = {
+			fileRef = E19EB4FB03DD35A700050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E19EB50003DD35A700050002 = {
+			fileRef = E19EB4FC03DD35A700050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E19EB50203DD365D00050002 = {
+			fileRef = E19EB4E803DD355C00050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E19EB50303DD36E600050002 = {
+			isa = PBXFrameworkReference;
+			name = Foundation.framework;
+			path = /System/Library/Frameworks/Foundation.framework;
+			refType = 0;
+		};
+		E19EB50403DD36E600050002 = {
+			fileRef = E19EB50303DD36E600050002;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
+		E19EB50503DD378B00050002 = {
+			isa = PBXTargetDependency;
+			target = E19EB4E703DD355C00050002;
+		};
+		E1AFA51C03ECFDB000050001 = {
+			children = (
 				E14343CD03DB66E900050002,
 				E14343CE03DB66E900050002,
@@ -106,483 +594,17 @@
 				E1BF166B03DBE27000050002,
 				E1BF166C03DBE27000050002,
+			);
+			isa = PBXGroup;
+			name = Cocoa;
+			refType = 4;
+		};
+		E1AFA51D03ECFDBF00050001 = {
+			children = (
 				E169DBA403E4F27400050002,
 				E169DBA103E4EF5E00050002,
-				E165AB3503E7A7FC00050002,
-				E165AB3603E7A7FC00050002,
-				E13762D103EC636D00050002,
-				E13762D203EC636D00050002,
-				F5CD5EAA02DAE61A01AA4DA5,
-				F51250CA038BF76601AA4DA5,
 			);
 			isa = PBXGroup;
-			name = "APE sources";
-			path = "";
-			refType = 4;
-		};
-		29B97317FDCFA39411CA2CEA = {
-			children = (
-				E1BF15BF03DBBE8900050002,
-				29B97318FDCFA39411CA2CEA,
-				089C165CFE840E0CC02AAC07,
-				E1CBC99A03E7603400050002,
-			);
-			isa = PBXGroup;
-			name = Resources;
-			path = "";
-			refType = 4;
-		};
-		29B97318FDCFA39411CA2CEA = {
-			children = (
-				29B97319FDCFA39411CA2CEA,
-			);
-			isa = PBXVariantGroup;
-			name = "APE Manager plugin.nib";
-			path = "";
-			refType = 4;
-		};
-		29B97319FDCFA39411CA2CEA = {
-			isa = PBXFileReference;
-			name = "APE Manager plugin.nib";
-			path = "English.lproj/APE Manager plugin.nib";
-			refType = 4;
-		};
-		29B97323FDCFA39411CA2CEA = {
-			children = (
-				E169DCAB03E4FF7A00050002,
-				F574113202F45276011A08DB,
-				F5D3F9FC0305A40D01FE0BDE,
-				E19EB50303DD36E600050002,
-			);
-			isa = PBXGroup;
-			name = Frameworks;
-			path = "";
-			refType = 4;
-		};
-//290
-//291
-//292
-//293
-//294
-//4A0
-//4A1
-//4A2
-//4A3
-//4A4
-		4A9504CCFFE6A4B311CA0CBA = {
-			buildRules = (
-			);
-			buildSettings = {
-				COPY_PHASE_STRIP = NO;
-				OPTIMIZATION_CFLAGS = "-O0";
-			};
-			isa = PBXBuildStyle;
-			name = Development;
-		};
-		4A9504CDFFE6A4B311CA0CBA = {
-			buildRules = (
-			);
-			buildSettings = {
-				COPY_PHASE_STRIP = YES;
-			};
-			isa = PBXBuildStyle;
-			name = Deployment;
-		};
-//4A0
-//4A1
-//4A2
-//4A3
-//4A4
-//E10
-//E11
-//E12
-//E13
-//E14
-		E1317B2E03DFC4DE00050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			path = ICeCoffEETerminal.h;
-			refType = 4;
-		};
-		E1317B2F03DFC4DE00050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			path = ICeCoffEETerminal.m;
-			refType = 4;
-		};
-		E1317B3003DFC4DE00050002 = {
-			fileRef = E1317B2E03DFC4DE00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E1317B3103DFC4DE00050002 = {
-			fileRef = E1317B2F03DFC4DE00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E135625E03DC9FC200050002 = {
-			fileEncoding = 4;
-			isa = PBXFileReference;
-			path = ICeCoffEEShared.h;
-			refType = 4;
-		};
-		E135625F03DC9FC200050002 = {
-			fileRef = E135625E03DC9FC200050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E13762D103EC636D00050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			path = ICeCoffEEBookmarks.h;
-			refType = 4;
-		};
-		E13762D203EC636D00050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			path = ICeCoffEEBookmarks.c;
-			refType = 4;
-		};
-		E13762D303EC636D00050002 = {
-			fileRef = E13762D103EC636D00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E13762D403EC636D00050002 = {
-			fileRef = E13762D203EC636D00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E14343AE03DB48F700050002 = {
-			children = (
-				F9A6987003BE1DFF00AA4DA5,
-				F9A6987103BE1DFF00AA4DA5,
-				F56276B903796C8B01AA4DA5,
-				F56276BA03796C8B01AA4DA5,
-			);
-			isa = PBXGroup;
-			name = "APE Manager plugin sources";
-			path = "";
-			refType = 4;
-		};
-		E14343B303DB4CF200050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			path = ICeCoffEE.h;
-			refType = 4;
-		};
-		E14343B403DB4CF200050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			path = ICeCoffEE.m;
-			refType = 4;
-		};
-		E14343B503DB4CF200050002 = {
-			fileRef = E14343B303DB4CF200050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E14343B603DB4CF200050002 = {
-			fileRef = E14343B403DB4CF200050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E14343B703DB4CFE00050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			path = ICeCoffEEScanner.h;
-			refType = 4;
-		};
-		E14343B803DB4CFE00050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			path = ICeCoffEEScanner.m;
-			refType = 4;
-		};
-		E14343B903DB4CFE00050002 = {
-			fileRef = E14343B703DB4CFE00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E14343BA03DB4CFE00050002 = {
-			fileRef = E14343B803DB4CFE00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E14343CD03DB66E900050002 = {
-			fileEncoding = 4;
-			isa = PBXFileReference;
-			path = ICeCoffEESuper.h;
-			refType = 4;
-		};
-		E14343CE03DB66E900050002 = {
-			fileEncoding = 4;
-			isa = PBXFileReference;
-			path = ICeCoffEESuper.m;
-			refType = 4;
-		};
-		E14343CF03DB66E900050002 = {
-			fileRef = E14343CD03DB66E900050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E14343D003DB66E900050002 = {
-			fileRef = E14343CE03DB66E900050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E14993A503DE868D00050002 = {
-			children = (
-				E135625E03DC9FC200050002,
-				E182C8F603DE817F00050002,
-			);
-			isa = PBXGroup;
-			name = "Shared sources";
-			path = "";
-			refType = 4;
-		};
-		E14993B803DE872B00050002 = {
-			fileRef = E135625E03DC9FC200050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E165AB3503E7A7FC00050002 = {
-			fileEncoding = 4;
-			isa = PBXFileReference;
-			path = ICeCoffEEActionMenu.h;
-			refType = 4;
-		};
-		E165AB3603E7A7FC00050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			path = ICeCoffEEActionMenu.c;
-			refType = 4;
-		};
-		E165AB3703E7A7FC00050002 = {
-			fileRef = E165AB3503E7A7FC00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E165AB3803E7A7FC00050002 = {
-			fileRef = E165AB3603E7A7FC00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E169DBA103E4EF5E00050002 = {
-			fileEncoding = 4;
-			indentWidth = 4;
-			isa = PBXFileReference;
-			path = ICeCoffEETextEdit.c;
-			refType = 4;
-			tabWidth = 4;
-			usesTabs = 0;
-		};
-		E169DBA303E4EF5E00050002 = {
-			fileRef = E169DBA103E4EF5E00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E169DBA403E4F27400050002 = {
-			fileEncoding = 4;
-			isa = PBXFileReference;
-			path = ICeCoffEETextEdit.h;
-			refType = 4;
-		};
-		E169DBA503E4F27400050002 = {
-			fileRef = E169DBA403E4F27400050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E169DBA703E4F6A400050002 = {
-			fileEncoding = 4;
-			isa = PBXFileReference;
-			path = ICeCoffEEConfig.h;
-			refType = 4;
-		};
-		E169DCAB03E4FF7A00050002 = {
-			isa = PBXFrameworkReference;
-			name = Carbon.framework;
-			path = /System/Library/Frameworks/Carbon.framework;
-			refType = 0;
-		};
-		E169DCAC03E4FF7A00050002 = {
-			fileRef = E169DCAB03E4FF7A00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E182C8F603DE817F00050002 = {
-			fileEncoding = 4;
-			isa = PBXFileReference;
-			path = ICeCoffEEShared.m;
-			refType = 4;
-		};
-		E182C8F803DE817F00050002 = {
-			fileRef = E182C8F603DE817F00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E182C8FA03DE817F00050002 = {
-			fileRef = E182C8F603DE817F00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E19EB4E303DD355C00050002 = {
-			buildActionMask = 2147483647;
-			files = (
-				E19EB4FD03DD35A700050002,
-				E19EB50003DD35A700050002,
-			);
-			isa = PBXHeadersBuildPhase;
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E19EB4E403DD355C00050002 = {
-			buildActionMask = 2147483647;
-			files = (
-				E19EB4FE03DD35A700050002,
-				E19EB4FF03DD35A700050002,
-			);
-			isa = PBXSourcesBuildPhase;
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E19EB4E503DD355C00050002 = {
-			buildActionMask = 2147483647;
-			files = (
-				E19EB50403DD36E600050002,
-			);
-			isa = PBXFrameworksBuildPhase;
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-		E19EB4E703DD355C00050002 = {
-			buildPhases = (
-				E19EB4E303DD355C00050002,
-				E19EB4E403DD355C00050002,
-				E19EB4E503DD355C00050002,
-			);
-			buildSettings = {
-				OTHER_CFLAGS = "";
-				OTHER_LDFLAGS = "";
-				OTHER_REZFLAGS = "";
-				PRECOMPILE_PREFIX_HEADER = YES;
-				PREFIX_HEADER = ICFindFilesToRemove/ICFindFilesToRemove_Prefix.h;
-				PRODUCT_NAME = ICFindFilesToRemove;
-				REZ_EXECUTABLE = YES;
-				SECTORDER_FLAGS = "";
-				WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
-			};
-			dependencies = (
-			);
-			isa = PBXToolTarget;
-			name = ICFindFilesToRemove;
-			productInstallPath = /usr/local/bin;
-			productName = ICFindFilesToRemove;
-			productReference = E19EB4E803DD355C00050002;
-		};
-		E19EB4E803DD355C00050002 = {
-			isa = PBXExecutableFileReference;
-			path = ICFindFilesToRemove;
-			refType = 3;
-		};
-		E19EB4F503DD359100050002 = {
-			children = (
-				E19EB4FB03DD35A700050002,
-				E19EB4FC03DD35A700050002,
-				E19EB4FA03DD35A700050002,
-				E19EB4F903DD35A700050002,
-			);
-			isa = PBXGroup;
-			name = ICFindFilesToRemove;
-			refType = 4;
-		};
-		E19EB4F903DD35A700050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			name = ICFindFilesToRemove_Prefix.h;
-			path = ICFindFilesToRemove/ICFindFilesToRemove_Prefix.h;
-			refType = 4;
-		};
-		E19EB4FA03DD35A700050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			name = UICookieMonster.m;
-			path = ICFindFilesToRemove/UICookieMonster.m;
-			refType = 4;
-		};
-		E19EB4FB03DD35A700050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			name = main.m;
-			path = ICFindFilesToRemove/main.m;
-			refType = 4;
-		};
-		E19EB4FC03DD35A700050002 = {
-			fileEncoding = 30;
-			isa = PBXFileReference;
-			name = UICookieMonster.h;
-			path = ICFindFilesToRemove/UICookieMonster.h;
-			refType = 4;
-		};
-		E19EB4FD03DD35A700050002 = {
-			fileRef = E19EB4F903DD35A700050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E19EB4FE03DD35A700050002 = {
-			fileRef = E19EB4FA03DD35A700050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E19EB4FF03DD35A700050002 = {
-			fileRef = E19EB4FB03DD35A700050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E19EB50003DD35A700050002 = {
-			fileRef = E19EB4FC03DD35A700050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E19EB50203DD365D00050002 = {
-			fileRef = E19EB4E803DD355C00050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E19EB50303DD36E600050002 = {
-			isa = PBXFrameworkReference;
-			name = Foundation.framework;
-			path = /System/Library/Frameworks/Foundation.framework;
-			refType = 0;
-		};
-		E19EB50403DD36E600050002 = {
-			fileRef = E19EB50303DD36E600050002;
-			isa = PBXBuildFile;
-			settings = {
-			};
-		};
-		E19EB50503DD378B00050002 = {
-			isa = PBXTargetDependency;
-			target = E19EB4E703DD355C00050002;
+			name = Carbon;
+			refType = 4;
 		};
 		E1BB268F03DB74B700050002 = {
@@ -1191,4 +1213,5 @@
 				E165AB3703E7A7FC00050002,
 				E13762D303EC636D00050002,
+				E18A7D2703ED3FA400050001,
 			);
 			isa = PBXHeadersBuildPhase;
@@ -1298,5 +1321,5 @@
 	<string>ICCF</string>
 	<key>CFBundleVersion</key>
-	<string>1.3</string>
+	<string>1.3b3</string>
 </dict>
 </plist>
Index: /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE.m
===================================================================
--- /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE.m	(revision 78)
+++ /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEE.m	(revision 79)
@@ -7,6 +7,4 @@
   for both files and text
 - if it's not a URL, try using TextExtras' open list
-- John Hayes' suggestions
-- Menu on command-option-click: add bookmark, open with other helper, pass to configurable service, ...?
 - TXNClick - MLTE has its own support in Jaguar and later, but it's lousy
 
@@ -19,4 +17,5 @@
 - app exclusion list - make a pref pane (see AquaShade config)
 - _LSCopyApplicationURLsForItemURL - list apps
+- Menu on command-option-click: add bookmark, open with other helper, pass to configurable service, ...?
 
 */
@@ -130,14 +129,12 @@
 }
 
-ConstStringPtr ICCF_GetHint(ICInstance inst, const char *urlData, long startIndex, long endIndex) {
+ConstStringPtr ICCF_GetHint(ICInstance inst, const char *urlData, Size length, long *selStart, long *selEnd, Boolean *needsSlashes) {
     Handle h = NewHandle(0);
     OSStatus err;
-    long tmpStartIndex = startIndex, tmpEndIndex = endIndex;
-    
+
     if (h == NULL) return NULL;
 
     // parse the URL providing a bogus protocol, to get rid of escaped forms
-    err = ICParseURL(inst, "\p*", urlData + startIndex, endIndex - startIndex + 1,
-                     &tmpStartIndex, &tmpEndIndex, h);
+    err = ICParseURL(inst, "\p*", urlData, length, selStart, selEnd, h);
     if (err != noErr) return NULL;
 
@@ -149,8 +146,9 @@
     long i = 0;
     Boolean sawAt = false;
-    if (urlParsed[0] == '*' && urlParsed[1] == ':') {
+    if (hSize >= 2 && urlParsed[0] == '*' && urlParsed[1] == ':') {
         // this is an IC-inserted protocol; skip over it
         i = 2;
-    }
+        *needsSlashes = (hSize < i + 2 || urlParsed[i] != '/' || urlParsed[i + 1] != '/');
+    } else *needsSlashes = false;
     for ( ; i < hSize ; i++) {
         char c = urlParsed[i];
@@ -164,5 +162,33 @@
     }
     DisposeHandle(h);
-    return (sawAt ? "\pmailto" : "\phttp");
+    if (sawAt) {
+        *needsSlashes = false;
+        return "\pmailto";
+    }
+    return "\phttp";
+}
+
+static const char *kICSlashes = "//";
+
+void ICCF_AddSlashes(Handle h, ConstStringPtr hint) {
+    Size sizeBefore = GetHandleSize(h);
+    unsigned char hintLength = StrLength(hint);
+    char *copy = (char *)malloc(sizeBefore);
+    memcpy(copy, *h, sizeBefore);
+    ICLog(@"ICCF_AddSlashes before: |%s|\n", *h);
+    ReallocateHandle(h, sizeBefore + 2);
+
+    // if *h begins with '<hint>:', then copy the slashes after it
+    if (sizeBefore > hintLength + 1 && strncmp(&hint[1], copy, hintLength) == 0 && copy[hintLength] == ':') {
+        memcpy(*h, copy, hintLength + 1);
+        memcpy(*h + hintLength + 1, kICSlashes, 2);
+        memcpy(*h + hintLength + 3, &copy[hintLength + 1], sizeBefore - hintLength - 1);
+    } else {
+        memcpy(*h, kICSlashes, 2);
+        memcpy(*h + 2, copy, sizeBefore);
+    }
+        
+    free(copy);
+    ICLog(@"ICCF_AddSlashes after: |%s|\n", *h);
 }
 
@@ -215,31 +241,39 @@
     unsigned len = [string length];
 
-    char *urlData = NULL;
+    Handle h = NULL;
     
     NS_DURING
-        urlData = (char *)malloc( (len + 1) * sizeof(char));
-        NSCAssert(urlData != NULL, @"Internal error: canÕt allocate memory for URL string");
-
-        [string getCString: urlData];
+        h = NewHandle(len);
+        if (h == NULL)
+            ICCF_OSErrCAssert(MemError(), @"NewHandle");
+
+        if (CFStringGetBytes((CFStringRef)string, CFRangeMake(0, len), kCFStringEncodingASCII, '\0', false, *h, len, NULL) != len)
+            ICCF_OSErrCAssert(kTECNoConversionPathErr, @"CFStringGetBytes");
 
         selStart = 0; selEnd = len;
 
-        ConstStringPtr hint = ICCF_GetHint(ICCF_GetInst(), urlData, selStart, selEnd);
+        Boolean needsSlashes;
+        ConstStringPtr hint = ICCF_GetHint(ICCF_GetInst(), *h, len, &selStart, &selEnd, &needsSlashes);
         NSCAssert(hint != NULL, @"Internal error: canÕt get protocol hint for URL");
 
+        if (needsSlashes) {
+            ICCF_AddSlashes(h, hint);
+            len = selEnd = GetHandleSize(h);
+        }
+
         if (chooseApp) {
-            err = ICCF_DoURLActionMenu(ICCF_GetInst(), hint, urlData, selStart, selEnd);
+            err = ICCF_DoURLActionMenu(ICCF_GetInst(), hint, *h, selStart, selEnd);
             ICCF_OSErrCAssert(err, @"ICCF_DoURLActionMenu");
         } else {
-            err = ICLaunchURL(ICCF_GetInst(), hint, urlData, len, &selStart, &selEnd);
+            err = ICLaunchURL(ICCF_GetInst(), hint, *h, len, &selStart, &selEnd);
             ICCF_OSErrCAssert(err, @"ICLaunchURL");
         }
         
     NS_HANDLER
-        free(urlData);
+        DisposeHandle(h);
         [localException raise];
     NS_ENDHANDLER
 
-    free(urlData);    
+    DisposeHandle(h);    
 }
 
@@ -404,10 +438,4 @@
 @implementation ICeCoffEE
 
-+ (NSString *)IC_version;
-{
-    // XXX get from bundle if possible: centralize
-    return [NSString stringWithCString: ICCF_VERSION];
-}
-
 + (void)IC_addRemoveServicesMenu;
 {
Index: /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEEConfig.h
===================================================================
--- /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEEConfig.h	(revision 78)
+++ /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEEConfig.h	(revision 79)
@@ -43,7 +43,11 @@
 
 // returns a Pascal string containing the corresponding protocol hint (e.g. http, mailto)
-// to be passed to ICLaunchURL if the text between startIndex and endIndex in urlData
-// likely represents an email address or "slack" (e.g. web.sabi.net/bm) URL
-ConstStringPtr ICCF_GetHint(ICInstance inst, const char *urlData, long startIndex, long endIndex);
+// if the text surrounding the range *selStart to *selEnd in urlData likely represents
+// an email address or "slack" (e.g. web.sabi.net/bm) URL
+// needsSlashes is set to true if the URL needs a '//' after the colon to be valid
+ConstStringPtr ICCF_GetHint(ICInstance inst, const char *urlData, Size length, long *selStart, long *selEnd, Boolean *needsSlashes);
+
+// adds two slashes to the beginning of the string in the handle (e.g. web.sabi.net or http:web.sabi.net)
+void ICCF_AddSlashes(Handle h, ConstStringPtr hint);
 
 // returns an explanation for the provided OSStatus in the supplied context
Index: /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEEShared.h
===================================================================
--- /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEEShared.h	(revision 78)
+++ /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEEShared.h	(revision 79)
@@ -13,6 +13,5 @@
 #include <CoreFoundation/CoreFoundation.h>
 
-#define ICCF_DEBUG 1
-#define ICCF_VERSION "1.3"
+#define ICCF_DEBUG 0
 
 #if ICCF_DEBUG
Index: /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEETextEdit.c
===================================================================
--- /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEETextEdit.c	(revision 78)
+++ /trunk/ICeCoffEE/ICeCoffEE/ICeCoffEETextEdit.c	(revision 79)
@@ -20,5 +20,4 @@
 //-----------------------------------------------------------------------------
 TEClickProcPtr	gTEClick = NULL;
-Handle			gErrors;
 
 //=============================================================================
@@ -119,12 +118,13 @@
     SInt8		s;
     ConstStringPtr hint;
+    Boolean		needsSlashes;
     textH = (Handle)TEGetText(teH);
     s = HGetState(textH);
     HLock(textH);
-    hint = ICCF_GetHint(inst, *textH, selStart, selEnd);
+    hint = ICCF_GetHint(inst, *textH, GetHandleSize(textH), &selStart, &selEnd, &needsSlashes);
+    ICapeprintf("ICCF_DoCommandClick: %sneedsSlashes\n", needsSlashes ? "" : "doesn't ");
     if (hint != NULL) {
         CGrafPtr thePort = teH[0]->inPort;
         if (!QDIsPortBuffered(thePort)) thePort = NULL;
-
         TESetSelect(selStart, selEnd, teH);
         if (thePort != NULL) QDFlushPortBuffer(thePort, NULL);
@@ -136,10 +136,24 @@
             } else {
                 err = ICParseURL(inst, hint, *textH, GetHandleSize(textH), &selStart, &selEnd, urlH);
-                if (err == noErr)
-                    err = ICCF_DoURLActionMenu(inst, hint, *urlH, 0, GetHandleSize(urlH) - 1);
+                if (err == noErr) {
+                    if (needsSlashes) ICCF_AddSlashes(urlH, hint);
+                    err = ICCF_DoURLActionMenu(inst, hint, *urlH, 0, GetHandleSize(urlH));
+                }
                 DisposeHandle(urlH);
             }
         } else {
-            err = ICLaunchURL(inst, hint, *textH, GetHandleSize(textH), &selStart, &selEnd);
+            if (needsSlashes) {
+                Handle urlH = NewHandle(0);
+                err = ICParseURL(inst, hint, *textH, GetHandleSize(textH), &selStart, &selEnd, urlH);
+                if (err == noErr) {
+                    ICCF_AddSlashes(urlH, hint);
+                    // don't want to disturb text selection
+                    long tmpEnd = GetHandleSize(urlH);
+                    long tmpStart = 0;
+                    err = ICLaunchURL(inst, hint, *urlH, GetHandleSize(urlH), &tmpStart, &tmpEnd);
+                }
+            } else {
+                err = ICLaunchURL(inst, hint, *textH, GetHandleSize(textH), &selStart, &selEnd);
+            }
         }
         
