Index: trunk/Cocoa/Pester/Source/Pester.xcodeproj/project.pbxproj
===================================================================
--- trunk/Cocoa/Pester/Source/Pester.xcodeproj/project.pbxproj	(revision 363)
+++ trunk/Cocoa/Pester/Source/Pester.xcodeproj/project.pbxproj	(revision 364)
@@ -8,8 +8,9 @@
 
 /* Begin PBXBuildFile section */
+		E15044670CFCDC7E00DE47E9 /* NJRValidatingField.m in Sources */ = {isa = PBXBuildFile; fileRef = E15044660CFCDC7E00DE47E9 /* NJRValidatingField.m */; };
 		E17562620CF8C50B00FC5057 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E17562610CF8C50B00FC5057 /* Sparkle.framework */; };
-		E17562720CF8C53F00FC5057 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = E17562610CF8C50B00FC5057 /* Sparkle.framework */; };
+		E17562720CF8C53F00FC5057 /* Sparkle.framework in Copy Sparkle.framework */ = {isa = PBXBuildFile; fileRef = E17562610CF8C50B00FC5057 /* Sparkle.framework */; };
 		E17CA7BB0CF7D08C00018B34 /* DynaLoader.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E17CA7BA0CF7D08C00018B34 /* DynaLoader.a */; };
-		E17CA9AB0CF7F8CB00018B34 /* Manip.pm in CopyFiles */ = {isa = PBXBuildFile; fileRef = E17CA9A90CF7F8C200018B34 /* Manip.pm */; };
+		E17CA9AB0CF7F8CB00018B34 /* Manip.pm in Copy Perl Modules */ = {isa = PBXBuildFile; fileRef = E17CA9A90CF7F8C200018B34 /* Manip.pm */; };
 		E1B11F270CF5F30F004975AA /* Notifier.nib in Resources */ = {isa = PBXBuildFile; fileRef = F59DC6DF0353DF5E01AEEDB1 /* Notifier.nib */; };
 		E1B11F280CF5F30F004975AA /* Application icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = F59DC6E30353ED1201AEEDB1 /* Application icon.icns */; };
@@ -75,5 +76,4 @@
 		E1B11F660CF5F30F004975AA /* PSError.m in Sources */ = {isa = PBXBuildFile; fileRef = E1ECA00703C002B300F54C66 /* PSError.m */; };
 		E1B11F670CF5F30F004975AA /* NJRCenteringMovieView.m in Sources */ = {isa = PBXBuildFile; fileRef = E1D358BA03C60CE900C8A18E /* NJRCenteringMovieView.m */; };
-		E1B11F680CF5F30F004975AA /* SUSpeaker.m in Sources */ = {isa = PBXBuildFile; fileRef = E1E9A33903C8EF6700050002 /* SUSpeaker.m */; };
 		E1B11F690CF5F30F004975AA /* PSTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = E1BF6E9103C928D200050002 /* PSTimer.m */; };
 		E1B11F6A0CF5F30F004975AA /* PSWakeAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = E19FD39F03C98645001509F3 /* PSWakeAlert.m */; };
@@ -108,5 +108,5 @@
 
 /* Begin PBXCopyFilesBuildPhase section */
-		E17562730CF8C55D00FC5057 /* CopyFiles */ = {
+		E17562730CF8C55D00FC5057 /* Copy Sparkle.framework */ = {
 			isa = PBXCopyFilesBuildPhase;
 			buildActionMask = 2147483647;
@@ -114,9 +114,10 @@
 			dstSubfolderSpec = 10;
 			files = (
-				E17562720CF8C53F00FC5057 /* Sparkle.framework in CopyFiles */,
-			);
+				E17562720CF8C53F00FC5057 /* Sparkle.framework in Copy Sparkle.framework */,
+			);
+			name = "Copy Sparkle.framework";
 			runOnlyForDeploymentPostprocessing = 0;
 		};
-		E17CA9A80CF7F89900018B34 /* CopyFiles */ = {
+		E17CA9A80CF7F89900018B34 /* Copy Perl Modules */ = {
 			isa = PBXCopyFilesBuildPhase;
 			buildActionMask = 2147483647;
@@ -124,6 +125,7 @@
 			dstSubfolderSpec = 7;
 			files = (
-				E17CA9AB0CF7F8CB00018B34 /* Manip.pm in CopyFiles */,
-			);
+				E17CA9AB0CF7F8CB00018B34 /* Manip.pm in Copy Perl Modules */,
+			);
+			name = "Copy Perl Modules";
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -160,4 +162,6 @@
 		E14DEC820438969400050002 /* NJRHotKeyFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NJRHotKeyFieldCell.h; sourceTree = "<group>"; };
 		E14DEC830438969400050002 /* NJRHotKeyFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NJRHotKeyFieldCell.m; sourceTree = "<group>"; };
+		E15044650CFCDC7E00DE47E9 /* NJRValidatingField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NJRValidatingField.h; sourceTree = "<group>"; };
+		E15044660CFCDC7E00DE47E9 /* NJRValidatingField.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = NJRValidatingField.m; sourceTree = "<group>"; };
 		E162698303B6189000000028 /* NSTableView-NJRExtensions.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = "NSTableView-NJRExtensions.m"; sourceTree = "<group>"; };
 		E162698403B6189000000028 /* NSTableView-NJRExtensions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = "NSTableView-NJRExtensions.h"; sourceTree = "<group>"; };
@@ -221,6 +225,4 @@
 		E1DEF116040014EB00050002 /* PSTimeDateEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSTimeDateEditor.h; sourceTree = "<group>"; };
 		E1DEF117040014EB00050002 /* PSTimeDateEditor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSTimeDateEditor.m; sourceTree = "<group>"; };
-		E1E9A33903C8EF6700050002 /* SUSpeaker.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = SUSpeaker.m; sourceTree = "<group>"; };
-		E1E9A33A03C8EF6700050002 /* SUSpeaker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = SUSpeaker.h; sourceTree = "<group>"; };
 		E1ECA00603C002B300F54C66 /* PSError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSError.h; sourceTree = SOURCE_ROOT; };
 		E1ECA00703C002B300F54C66 /* PSError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSError.m; sourceTree = SOURCE_ROOT; };
@@ -395,7 +397,7 @@
 			isa = PBXGroup;
 			children = (
-				F5243DA40378681101AEEDB1 /* Popup triangle.tiff */,
 				E18830410442B5FC00050002 /* Calendar icons */,
 				E18830420442B60000050002 /* Volume icons */,
+				F5243DA40378681101AEEDB1 /* Popup triangle.tiff */,
 				29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
 				F560E2EE03574F8A01A4E466 /* Alarms.nib */,
@@ -526,13 +528,4 @@
 			);
 			name = Documentation;
-			sourceTree = "<group>";
-		};
-		E1E9A33D03C8EF6800050002 /* SpeechUtilities */ = {
-			isa = PBXGroup;
-			children = (
-				E1E9A33903C8EF6700050002 /* SUSpeaker.m */,
-				E1E9A33A03C8EF6700050002 /* SUSpeaker.h */,
-			);
-			name = SpeechUtilities;
 			sourceTree = "<group>";
 		};
@@ -582,5 +575,4 @@
 			isa = PBXGroup;
 			children = (
-				E1E9A33D03C8EF6800050002 /* SpeechUtilities */,
 				F59E47A6036AA5FC016B311C /* BDAlias */,
 				E1DEF116040014EB00050002 /* PSTimeDateEditor.h */,
@@ -633,4 +625,6 @@
 				F5F240CD036A877301FE7503 /* NJRQTMediaPopUpButton.h */,
 				F5F240CC036A877301FE7503 /* NJRQTMediaPopUpButton.m */,
+				E15044650CFCDC7E00DE47E9 /* NJRValidatingField.h */,
+				E15044660CFCDC7E00DE47E9 /* NJRValidatingField.m */,
 				F5F19871036B822E01EB0372 /* NJRVoicePopUpButton.h */,
 				F5F19870036B822E01EB0372 /* NJRVoicePopUpButton.m */,
@@ -685,7 +679,6 @@
 				E1B11F7E0CF5F30F004975AA /* Frameworks */,
 				E1B11F260CF5F30F004975AA /* Resources */,
-				E17CA9A80CF7F89900018B34 /* CopyFiles */,
-				E17562730CF8C55D00FC5057 /* CopyFiles */,
-				E1B11F860CF5F30F004975AA /* ShellScript */,
+				E17CA9A80CF7F89900018B34 /* Copy Perl Modules */,
+				E17562730CF8C55D00FC5057 /* Copy Sparkle.framework */,
 			);
 			buildRules = (
@@ -749,16 +742,4 @@
 		};
 /* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
-		E1B11F860CF5F30F004975AA /* ShellScript */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "/usr/bin/agvtool mvers -terse1 >| ${SRCROOT}/VERSION";
-		};
-/* End PBXShellScriptBuildPhase section */
 
 /* Begin PBXSourcesBuildPhase section */
@@ -806,5 +787,4 @@
 				E1B11F660CF5F30F004975AA /* PSError.m in Sources */,
 				E1B11F670CF5F30F004975AA /* NJRCenteringMovieView.m in Sources */,
-				E1B11F680CF5F30F004975AA /* SUSpeaker.m in Sources */,
 				E1B11F690CF5F30F004975AA /* PSTimer.m in Sources */,
 				E1B11F6A0CF5F30F004975AA /* PSWakeAlert.m in Sources */,
@@ -830,4 +810,5 @@
 				E1B121970CF62FD1004975AA /* NSMenuItem-NJRExtensions.m in Sources */,
 				E1B1219E0CF63858004975AA /* NSImage-NJRExtensions.m in Sources */,
+				E15044670CFCDC7E00DE47E9 /* NJRValidatingField.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -966,5 +947,5 @@
 			buildSettings = {
 				COPY_PHASE_STRIP = NO;
-				CURRENT_PROJECT_VERSION = 21;
+				CURRENT_PROJECT_VERSION = 22;
 				FRAMEWORK_SEARCH_PATHS = (
 					"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
@@ -1004,5 +985,5 @@
 			buildSettings = {
 				COPY_PHASE_STRIP = YES;
-				CURRENT_PROJECT_VERSION = 21;
+				CURRENT_PROJECT_VERSION = 22;
 				FRAMEWORK_SEARCH_PATHS = (
 					"$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
