[mapguide-commits] r9747 - in sandbox/jng/flatten_exceptions: Common/Foundation/Exception Server/src/Common/Base Server/src/Common/Cache Server/src/Common/Manager Server/src/Core Server/src/Services/Drawing Server/src/Services/Feature Server/src/Services/Kml Server/src/Services/Mapping Server/src/Services/Profiling Server/src/Services/Rendering Server/src/Services/Resource Server/src/Services/ServerAdmin Server/src/Services/Site Server/src/Services/Tile Server/src/UnitTesting

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Wed Oct 21 07:38:32 PDT 2020


Author: jng
Date: 2020-10-21 07:38:32 -0700 (Wed, 21 Oct 2020)
New Revision: 9747

Modified:
   sandbox/jng/flatten_exceptions/Common/Foundation/Exception/Exception.cpp
   sandbox/jng/flatten_exceptions/Common/Foundation/Exception/Exception.h
   sandbox/jng/flatten_exceptions/Server/src/Common/Base/ClientHandler.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Cache/FeatureServiceCache.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Cache/FeatureServiceCacheEntry.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Cache/ResourceServiceCache.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Cache/ServerCache.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/CacheManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/FdoConnectionManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LoadBalanceManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogManager.h
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogThread.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LongTransactionManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageLogReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageLogWriter.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SecurityCache.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SecurityManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/ServerManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/ServiceManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SessionCache.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/UnmanagedDataManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Common/Manager/WorkerThread.cpp
   sandbox/jng/flatten_exceptions/Server/src/Core/EventTimer.cpp
   sandbox/jng/flatten_exceptions/Server/src/Core/LoadPackageCommand.cpp
   sandbox/jng/flatten_exceptions/Server/src/Core/Server.cpp
   sandbox/jng/flatten_exceptions/Server/src/Core/ServiceHandlerFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/Core/SetPwdCommand.cpp
   sandbox/jng/flatten_exceptions/Server/src/Core/TestCommand.cpp
   sandbox/jng/flatten_exceptions/Server/src/Core/TestFdoCommand.cpp
   sandbox/jng/flatten_exceptions/Server/src/Core/TimedEventHandler.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/DrawingOperationFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpDescribeDrawing.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateLayers.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateSectionResources.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateSections.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetCoordinateSpace.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetDrawing.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetLayer.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetSection.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetSectionResource.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingService.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingServiceDefs.h
   sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingServiceUtil.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ByteSourceRasterStreamImpl.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureDistribution.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureGeometricFunctions.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureManipulationCommand.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureNumericFunctions.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureOperationFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureStringFunctions.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/JoinFeatureReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpAddSavePoint.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpApplySchema.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpBeginTransaction.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseDataReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseFeatureReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseSqlReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCommitTransaction.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCreateFeatureSource.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDeleteFeatures.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeSchema.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeSchemaAsXml.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeWfsFeatureType.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpEnumerateDataStores.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpExecuteSqlNonQuery.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpExecuteSqlQuery.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetCapabilities.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetClassDefinition.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetClasses.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetConnectionPropertyValues.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetDataRows.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFdoCacheInfo.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFeatureProviders.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFeatures.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetIdentityProperties.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetLongTransactions.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetRaster.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSchemaMapping.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSchemas.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSpatialContexts.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSqlRows.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsFeature.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsFeatureTotal.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpInsertFeatures.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpInsertFeaturesBatched.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpReleaseSavePoint.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpRollbackSavePoint.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpRollbackTransaction.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSchemaToXml.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSelectFeatures.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSelectFeaturesSpatial.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSetLongTransaction.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpTestConnection.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpTestFeatureSourceConnection.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateFeatures.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateFeaturesWithTransaction.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateMatchingFeatures.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpXmlToSchema.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/SelectAggregateCommand.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/SelectCommand.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerApplySchema.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerCreateFeatureSource.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerDataReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerDescribeSchema.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerEnumerateDataStores.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFdoFeatureReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureService.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureServiceExceptionDef.h
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureTransaction.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureTransactionPool.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureUtil.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetConnectionPropertyValues.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetLongTransactions.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetProviderCapabilities.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetSchemaMapping.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetSpatialContexts.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGwsFeatureReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerInsertCommand.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSelectFeatures.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSqlCommand.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSqlDataReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerUpdateFeatures.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Feature/TransformedGeometryFeatureReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Kml/KmlOperationFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetFeaturesKml.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetLayerKml.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetMapKml.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/LegendPlotUtil.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/MappingOperationFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/MappingUtil.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpCreateRuntimeMap.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpDescribeRuntimeMap.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateLegendImage.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateLegendPlot.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateMultiPlot.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGeneratePlot.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpQueryFeatures.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpQueryFeaturesWms.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/RSMgFeatureReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/ServerMappingService.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/ServerMappingServiceDefs.h
   sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/OpProfileRenderDynamicOverlay.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/OpProfileRenderMap.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/ProfilingOperationFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpQueryFeatureProperties.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpQueryFeatures.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderDynamicOverlay.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMap.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMapLegend.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMetatile.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMetatileXYZ.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTile.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileFromMetatile.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileMVT.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileUTFGrid.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileXYZ.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/RenderingOperationFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/ServerRenderingService.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ApplicationRepositoryManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/DbEnvironment.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/LibraryRepositoryManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/LibraryResourceContentManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpApplyResourcePackage.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpChangeResourceOwner.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpCopyResource.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpCreateRepository.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteRepository.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteResource.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteResourceData.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateParentMapDefinitions.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateParentTileSetDefinitions.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateRepositories.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceData.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceDocuments.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceReferences.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResources.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateUnmanagedData.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetRepositoryContent.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetRepositoryHeader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceContent.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceContents.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceData.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceHeader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceModifiedDate.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpInheritPermissionsFrom.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpMoveResource.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpRenameResourceData.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpResourceExists.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpSetResource.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpSetResourceData.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpUpdateRepository.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OperationInfo.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/Repository.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/RepositoryManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceContentManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDataFileManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDataStreamManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDefinitionManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceHeader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceHeaderManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceOperationFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourcePackageLoader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourcePackageMaker.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceServiceDefs.h
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ServerResourceService.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SessionRepositoryManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SessionResourceContentManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SiteRepositoryManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SiteResourceContentManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SystemRepositoryManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/TagManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ZipFileReader.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ZipFileWriter.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpBringOnline.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpClearLog.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpDeleteLog.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpDeletePackage.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnableMaximumLogSize.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnumerateLogs.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnumeratePackages.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetConfigurationProperties.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetDocument.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetInformationProperties.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetLog.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetLogFile.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetPackageLog.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetPackageStatus.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetSiteStatus.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetSiteVersion.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpIsMaximumLogSizeEnabled.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpIsOnline.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpLoadPackage.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpMakePackage.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpNotifyResourcesChanged.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRegisterServicesOnServers.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRemoveConfigurationProperties.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRenameLog.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetConfigurationProperties.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetDocument.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetLogDelimiter.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetMaximumLogSize.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpTakeOffline.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpUnregisterServicesOnServers.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/ServerAdminOperationFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/ServerAdminService.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddGroup.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddServer.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddUser.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAuthenticate.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpCreateSession.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDeleteGroups.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDeleteUsers.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDestroySession.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateGroups.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateRoles.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateServers.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateUsers.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGetSessionTimeout.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGetUserForSession.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantGroupMembershipsToUsers.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantRoleMembershipsToGroups.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantRoleMembershipsToUsers.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRemoveServer.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRequestServer.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeGroupMembershipsFromUsers.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeRoleMembershipsFromGroups.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeRoleMembershipsFromUsers.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateGroup.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateServer.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateUser.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/ServerSiteService.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Site/SiteOperationFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/MetatileLockUtil.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpClearCache.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetDefaultTileSizeX.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetDefaultTileSizeY.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetTile.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetTileProviders.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpSetTile.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/ServerTileService.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheDefault.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheDefaultProvider.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheXYZProvider.cpp
   sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileOperationFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/CatchHelperMacros.h
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestCoordinateSystem.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestDrawingService.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestFeatureService.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestGeometry.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestKmlService.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestLogManager.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestLogManagerThread.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestMisc.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestPerformance.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestResourceService.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestServerAdminService.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestServiceFactory.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestSiteService.cpp
   sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestTileService.cpp
Log:
Remove all exceptions from the rest of the server tier and modify all throws to throw MgException, passing an exception code instead.

Modified: sandbox/jng/flatten_exceptions/Common/Foundation/Exception/Exception.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Common/Foundation/Exception/Exception.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Common/Foundation/Exception/Exception.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -30,7 +30,8 @@
     CREFSTRING fileName, MgStringCollection* whatArguments,
     CREFSTRING whyMessageId, MgStringCollection* whyArguments) throw() :
     m_whyMessageId(whyMessageId),
-    m_code(exceptionCode)
+    m_code(exceptionCode),
+    m_nativeErrorCode(0)
 {
     MG_TRY()
 
@@ -214,6 +215,9 @@
     stream->WriteString(m_message);
     stream->WriteString(m_details);
     stream->WriteString(m_stackTrace);
+
+    stream->WriteString(m_code);
+    stream->WriteInt64(m_nativeErrorCode);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -234,6 +238,9 @@
     stream->GetString(m_message);
     stream->GetString(m_details);
     stream->GetString(m_stackTrace);
+
+    stream->GetString(m_code);
+    stream->GetInt64(m_nativeErrorCode);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -492,7 +499,7 @@
     if (m_message.empty())
     {
         m_message = FormatMessage(locale, MgResources::Resource_Exception_Section,
-            GetClassName(), &m_whatArguments);
+            m_code, &m_whatArguments);
 
         if (!m_whyMessageId.empty())
         {
@@ -702,4 +709,14 @@
     {
         return new MgException(L"MgUnclassifiedException", methodName, lineNumber, fileName, NULL, messageId, &arguments);
     }
+}
+
+void MgException::SetNativeErrorCode(INT64 nativeErrorCode)
+{
+    m_nativeErrorCode = nativeErrorCode;
+}
+
+INT64 MgException::GetNativeErrorCode()
+{
+    return m_nativeErrorCode;
 }
\ No newline at end of file

Modified: sandbox/jng/flatten_exceptions/Common/Foundation/Exception/Exception.h
===================================================================
--- sandbox/jng/flatten_exceptions/Common/Foundation/Exception/Exception.h	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Common/Foundation/Exception/Exception.h	2020-10-21 14:38:32 UTC (rev 9747)
@@ -126,6 +126,27 @@
     ///
     STRING GetStackTrace() throw();
 
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
+    /// Retrieve the native error code that may be set by errors from thirdparty
+    /// libraries
+    ///
+    /// <!-- Syntax in .Net, Java, and PHP -->
+    /// \htmlinclude DotNetSyntaxTop.html
+    /// string GetNativeErrorCode();
+    /// \htmlinclude SyntaxBottom.html
+    /// \htmlinclude JavaSyntaxTop.html
+    /// String GetNativeErrorCode();
+    /// \htmlinclude SyntaxBottom.html
+    /// \htmlinclude PHPSyntaxTop.html
+    /// string GetNativeErrorCode();
+    /// \htmlinclude SyntaxBottom.html
+    ///
+    /// \return
+    /// Call stack trace with method parameters
+    ///
+    INT64 GetNativeErrorCode();
+
 EXTERNAL_API:
 
     ///////////////////////////////////////////////////////////////////////////
@@ -218,6 +239,15 @@
 
     ///////////////////////////////////////////////////////////////////////////
     /// \brief
+    /// Sets the native error code
+    /// 
+    /// \param nativeErrorCode
+    /// The native error code
+    ///
+    void SetNativeErrorCode(INT64 nativeErrorCode);
+
+    ///////////////////////////////////////////////////////////////////////////
+    /// \brief
     /// Serialize data to TCP/IP stream.
     ///
     /// \param stream
@@ -360,6 +390,9 @@
     /// The localized stack trace.
     STRING m_stackTrace;
 
+    /// The native error code
+    INT64 m_nativeErrorCode;
+
 INTERNAL_API:
 
     ///////////////////////////////////////////////////////////////////////////

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Base/ClientHandler.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Base/ClientHandler.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Base/ClientHandler.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -166,7 +166,7 @@
     else
     {
         Ptr<MgException> mgException;
-        mgException = new  MgServerNotOnlineException(L"MgClientHandler.handle_input", __LINE__, __WFILE__, NULL, L"", NULL);
+        mgException = new MgException(MgExceptionCodes::MgServerNotOnlineException, L"MgClientHandler.handle_input", __LINE__, __WFILE__, NULL, L"", NULL);
 
         Ptr<MgStream> stream;
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Cache/FeatureServiceCache.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Cache/FeatureServiceCache.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Cache/FeatureServiceCache.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -121,7 +121,7 @@
 
     if (!resource->IsResourceTypeOf(MgResourceType::FeatureSource))
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgFeatureServiceCache.GetEntry",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Cache/FeatureServiceCacheEntry.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Cache/FeatureServiceCacheEntry.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Cache/FeatureServiceCacheEntry.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -109,7 +109,7 @@
         MgStringCollection whyArguments;
         whyArguments.Add(className);
 
-        throw new MgInvalidArgumentException(L"MgFeatureServiceCacheEntry.ParseQualifiedClassName",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgFeatureServiceCacheEntry.ParseQualifiedClassName",
             __LINE__, __WFILE__, &whatArguments, L"MgSchemaNameMismatch", &whyArguments);
     }
 }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Cache/ResourceServiceCache.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Cache/ResourceServiceCache.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Cache/ResourceServiceCache.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -117,7 +117,7 @@
 {
     if (NULL == resource)
     {
-        throw new MgNullArgumentException(
+        throw new MgException(MgExceptionCodes::MgNullArgumentException, 
             L"MgResourceServiceCache.GetEntry",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -126,7 +126,7 @@
 
     if (!resource->IsResourceTypeOf(MgResourceType::LayerDefinition))
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgResourceServiceCache.GetEntry",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Cache/ServerCache.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Cache/ServerCache.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Cache/ServerCache.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -53,7 +53,7 @@
 {
     if (size <= 0 || timeLimit <=0)
     {
-        throw new MgArgumentOutOfRangeException(L"MgServerCache.Initialize",
+        throw new MgException(MgExceptionCodes::MgArgumentOutOfRangeException, L"MgServerCache.Initialize",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/CacheManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/CacheManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/CacheManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -156,7 +156,7 @@
 
     if (NULL == resourceService)
     {
-        throw new MgServiceNotAvailableException(
+        throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, 
             L"MgCacheManager.CheckPermission",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -257,7 +257,7 @@
                 STRING errorMsg = parser.GetErrorMessage();
                 MgStringCollection arguments;
                 arguments.Add(errorMsg);
-                throw new MgInvalidFeatureSourceException(
+                throw new MgException(MgExceptionCodes::MgInvalidFeatureSourceException, 
                     L"MgCacheManager::GetFeatureSourceCacheItem",
                     __LINE__, __WFILE__, &arguments, L"", NULL);
             }
@@ -277,7 +277,7 @@
             MgStringCollection arguments;
             arguments.Add(message);
 
-            throw new MgInvalidFeatureSourceException(
+            throw new MgException(MgExceptionCodes::MgInvalidFeatureSourceException, 
                 L"MgCacheManager.GetFeatureSourceCacheItem",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -424,7 +424,7 @@
             MgStringCollection arguments;
             arguments.Add(message);
 
-            throw new MgInvalidFeatureSourceException(
+            throw new MgException(MgExceptionCodes::MgInvalidFeatureSourceException, 
                 L"MgCacheManager.GetResourceLayerDefinitionCacheItem",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/FdoConnectionManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/FdoConnectionManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/FdoConnectionManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -326,7 +326,7 @@
         MgStringCollection arguments;
         arguments.Add(provider);
 
-        throw new MgAllProviderConnectionsUsedException(L"MgFdoConnectionManager.Open",
+        throw new MgException(MgExceptionCodes::MgAllProviderConnectionsUsedException, L"MgFdoConnectionManager.Open",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
@@ -348,14 +348,13 @@
         //any _WITH_FEATURE_SOURCE macro with
         //
         //MgException really needs better inner exception absorption mechanisms here
-        MgFdoException* ex = dynamic_cast<MgFdoException*>(mgException.p);
-        if (NULL != ex)
+        if (mgException->GetExceptionCode() == MgExceptionCodes::MgFdoException)
         {
             MgServerManager* serverManager = MgServerManager::GetInstance();
             STRING locale = (NULL == serverManager) ?
                 MgResources::DefaultMessageLocale : serverManager->GetDefaultMessageLocale();
 
-            STRING message = ex->GetDetails(locale);
+            STRING message = mgException->GetDetails(locale);
             MgStringCollection args;
             args.Add(resourceIdentifier->ToString());
             args.Add(message);
@@ -363,7 +362,7 @@
             args.Add(L"");
 
             //Replace the exception to be thrown with our one
-            mgException = new MgFdoException(L"MgFdoConnectionManager.Open", __LINE__, __WFILE__, NULL, L"MgFeatureSourceFormatInnerExceptionMessage", &args);
+            mgException = new MgException(MgExceptionCodes::MgFdoException, L"MgFdoConnectionManager.Open", __LINE__, __WFILE__, NULL, L"MgFeatureSourceFormatInnerExceptionMessage", &args);
         }
     }
     MG_FDOCONNECTION_MANAGER_THROW()
@@ -402,7 +401,7 @@
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, 
             L"MgFdoConnectionManager.Open",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
@@ -484,7 +483,7 @@
         MgStringCollection arguments;
         arguments.Add(providerNoVersion);
 
-        throw new MgAllProviderConnectionsUsedException(L"MgFdoConnectionManager.Open",
+        throw new MgException(MgExceptionCodes::MgAllProviderConnectionsUsedException, L"MgFdoConnectionManager.Open",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
@@ -822,7 +821,7 @@
                 strCol->Add(message);
             }
 
-            throw new MgInvalidFeatureSourceException(L"MgFdoConnectionManager.SetConnectionProperties",
+            throw new MgException(MgExceptionCodes::MgInvalidFeatureSourceException, L"MgFdoConnectionManager.SetConnectionProperties",
                 __LINE__, __WFILE__, (MgStringCollection*)strCol, L"", NULL);
         }
 
@@ -967,7 +966,7 @@
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, 
             L"MgFdoConnectionManager.SetConfiguration",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
@@ -1005,7 +1004,7 @@
             strCol = new MgStringCollection();
             strCol->Add(message);
         }
-        throw new MgInvalidFeatureSourceException(L"MgFdoConnectionManager.SetConfiguration",
+        throw new MgException(MgExceptionCodes::MgInvalidFeatureSourceException, L"MgFdoConnectionManager.SetConfiguration",
             __LINE__, __WFILE__, (MgStringCollection*)strCol, L"", NULL);
     }
 
@@ -1085,12 +1084,12 @@
 
         FDO_SAFE_RELEASE(e);
 
-        throw new MgFdoException(L"MgFdoConnectionManager.Open",
+        throw new MgException(MgExceptionCodes::MgFdoException, L"MgFdoConnectionManager.Open",
             __LINE__, __WFILE__, NULL, messageId, &arguments);
     }
     catch (...)
     {
-        throw new MgConnectionFailedException(L"MgFdoConnectionManager.Open",
+        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgFdoConnectionManager.Open",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -1143,7 +1142,7 @@
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, 
             L"MgFdoConnectionManager.RemoveCachedFdoConnection",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
@@ -1248,7 +1247,7 @@
         MgStringCollection arguments;
         arguments.Add(resource);
 
-        throw new MgResourceBusyException(
+        throw new MgException(MgExceptionCodes::MgResourceBusyException, 
             L"MgFdoConnectionManager.RemoveCachedFdoConnection",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -1335,7 +1334,7 @@
         MgStringCollection arguments;
         arguments.Add(provider);
 
-        throw new MgAllProviderConnectionsUsedException(L"MgFdoConnectionManager.CacheFdoConnection",
+        throw new MgException(MgExceptionCodes::MgAllProviderConnectionsUsedException, L"MgFdoConnectionManager.CacheFdoConnection",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
@@ -2284,7 +2283,7 @@
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, 
             L"MgFdoConnectionManager.SetCachedFdoConnectionAsInvalid",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LoadBalanceManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LoadBalanceManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LoadBalanceManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -144,7 +144,7 @@
 
     if (m_serverManager->IsSiteServer() != m_localServerInfo->IsSiteServer())
     {
-        throw new MgLogicException(
+        throw new MgException(MgExceptionCodes::MgLogicException, 
             L"MgLoadBalanceManager.Initialize",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -316,7 +316,7 @@
 
     if (NULL == serverInfo)
     {
-        throw new MgInvalidCastException(
+        throw new MgException(MgExceptionCodes::MgInvalidCastException, 
             L"MgLoadBalanceManager.GetServerInfo",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -626,7 +626,7 @@
 
     if (feedbackList == NULL || 1 != feedbackList->GetCount())
     {
-        throw new MgLogicException(
+        throw new MgException(MgExceptionCodes::MgLogicException, 
             L"MgLoadBalanceManager.RegisterServices",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -837,7 +837,7 @@
             0 != MgIpUtil::CompareAddresses(m_serverManager->GetSiteServerAddress(), serverInfo->GetAddress()))
         {
             // There are more than one Site servers within a site?
-            throw new MgLogicException(
+            throw new MgException(MgExceptionCodes::MgLogicException, 
                 L"MgLoadBalanceManager.EnableServicesOnServers",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -884,7 +884,7 @@
             MgStringCollection arguments;
             arguments.Add(serverInfo->GetAddress());
 
-            throw new MgServerNotFoundException(
+            throw new MgException(MgExceptionCodes::MgServerNotFoundException, 
                 L"MgLoadBalanceManager.EnableServicesOnServers",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1009,7 +1009,7 @@
     }
     else if (numServers == 0)
     {
-        throw new MgServiceNotAvailableException(
+        throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, 
             L"MgLoadBalanceManager.RequestServer",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1041,7 +1041,7 @@
 
     if (!m_serverManager->IsSiteServer())
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgLoadBalanceManager.EnumerateServers",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1089,7 +1089,7 @@
 
     if (!m_serverManager->IsSiteServer())
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgLoadBalanceManager.AddServer",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1099,7 +1099,7 @@
         MgStringCollection arguments;
         arguments.Add(name);
 
-        throw new MgDuplicateServerException(
+        throw new MgException(MgExceptionCodes::MgDuplicateServerException, 
             L"MgLoadBalanceManager.AddServer",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -1106,7 +1106,7 @@
 
     if (0 == MgIpUtil::CompareAddresses(m_serverManager->GetSiteServerAddress(), address))
     {
-        throw new MgLogicException(
+        throw new MgException(MgExceptionCodes::MgLogicException, 
             L"MgLoadBalanceManager.AddServer",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1116,7 +1116,7 @@
         MgStringCollection arguments;
         arguments.Add(address);
 
-        throw new MgDuplicateServerException(
+        throw new MgException(MgExceptionCodes::MgDuplicateServerException, 
             L"MgLoadBalanceManager.AddServer",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -1196,7 +1196,7 @@
 
     if (!m_serverManager->IsSiteServer())
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgLoadBalanceManager.UpdateServer",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1206,7 +1206,7 @@
         MgStringCollection arguments;
         arguments.Add(oldName);
 
-        throw new MgServerNotFoundException(
+        throw new MgException(MgExceptionCodes::MgServerNotFoundException, 
             L"MgLoadBalanceManager.UpdateServer",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -1213,7 +1213,7 @@
 
     if (newName.empty() && newDescription.empty() && newAddress.empty())
     {
-        throw new MgNullArgumentException(
+        throw new MgException(MgExceptionCodes::MgNullArgumentException, 
             L"MgLoadBalanceManager.UpdateServer",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1233,7 +1233,7 @@
             MgStringCollection arguments;
             arguments.Add(newName);
 
-            throw new MgDuplicateServerException(
+            throw new MgException(MgExceptionCodes::MgDuplicateServerException, 
                 L"MgLoadBalanceManager.UpdateServer",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1258,7 +1258,7 @@
     {
         if (0 == MgIpUtil::CompareAddresses(m_serverManager->GetSiteServerAddress(), newAddress))
         {
-            throw new MgLogicException(
+            throw new MgException(MgExceptionCodes::MgLogicException, 
                 L"MgLoadBalanceManager.UpdateServer",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1269,7 +1269,7 @@
             MgStringCollection arguments;
             arguments.Add(newAddress);
 
-            throw new MgDuplicateServerException(
+            throw new MgException(MgExceptionCodes::MgDuplicateServerException, 
                 L"MgLoadBalanceManager.UpdateServer",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1366,7 +1366,7 @@
 
     if (!m_serverManager->IsSiteServer())
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgLoadBalanceManager.RemoveServer",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1376,7 +1376,7 @@
         MgStringCollection arguments;
         arguments.Add(name);
 
-        throw new MgServerNotFoundException(
+        throw new MgException(MgExceptionCodes::MgServerNotFoundException, 
             L"MgLoadBalanceManager.RemoveServer",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -1442,7 +1442,7 @@
     CHECKARGUMENTNULL(serverInfoList, L"MgLoadBalanceManager.RegisterServicesOnServers");
     if (serverInfoList->GetCount() <= 0)
     {
-        throw new MgNullArgumentException(
+        throw new MgException(MgExceptionCodes::MgNullArgumentException, 
             L"MgLoadBalanceManager.RegisterServicesOnServers",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1460,7 +1460,7 @@
             arguments.Add(L"1");
             arguments.Add(buffer);
 
-            throw new MgInvalidArgumentException(
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, 
                 L"MgLoadBalanceManager.RegisterServicesOnServers",
                 __LINE__, __WFILE__, &arguments, L"MgInvalidCollectionSize", NULL);
         }
@@ -1511,7 +1511,7 @@
     CHECKARGUMENTNULL(serverInfoList, L"MgLoadBalanceManager.UnregisterServicesOnServers");
     if (serverInfoList->GetCount() <= 0)
     {
-        throw new MgNullArgumentException(
+        throw new MgException(MgExceptionCodes::MgNullArgumentException, 
             L"MgLoadBalanceManager.UnregisterServicesOnServers",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1529,7 +1529,7 @@
             arguments.Add(L"1");
             arguments.Add(buffer);
 
-            throw new MgInvalidArgumentException(
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, 
                 L"MgLoadBalanceManager.UnregisterServicesOnServers",
                 __LINE__, __WFILE__, &arguments, L"MgInvalidCollectionSize", NULL);
         }
@@ -1614,7 +1614,7 @@
 
                     if (feedbackList == NULL || 1 != feedbackList->GetCount())
                     {
-                        throw new MgLogicException(
+                        throw new MgException(MgExceptionCodes::MgLogicException, 
                             L"MgLoadBalanceManager.RegisterServices",
                             __LINE__, __WFILE__, NULL, L"", NULL);
                     }
@@ -1650,7 +1650,7 @@
 
                 if (feedbackList == NULL || 1 != feedbackList->GetCount()) // dummy feedback
                 {
-                    throw new MgLogicException(
+                    throw new MgException(MgExceptionCodes::MgLogicException, 
                         L"MgLoadBalanceManager.RegisterServices",
                         __LINE__, __WFILE__, NULL, L"", NULL);
                 }
@@ -1670,7 +1670,7 @@
 
         if (feedbackList == NULL || feedbackList->GetCount() <= 0)
         {
-            throw new MgLogicException(
+            throw new MgException(MgExceptionCodes::MgLogicException, 
                 L"MgLoadBalanceManager.RegisterServices",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -339,7 +339,7 @@
         MgStringCollection whyArguments;
         whyArguments.Add(L"\\/");
 
-        throw new MgInvalidArgumentException(L"MgLogManager.ValidateLogFileName",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.ValidateLogFileName",
             __LINE__, __WFILE__, &arguments, L"MgStringContainsReservedCharacters", &whyArguments);
     }
 
@@ -2221,7 +2221,7 @@
     {
         MgStringCollection arguments;
         arguments.Add(m_path);
-        throw new MgFileIoException(L"MgLogManager.EnumerateLogs", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFileIoException, L"MgLogManager.EnumerateLogs", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     dirent* direntry = NULL;
@@ -2337,7 +2337,7 @@
         MgStringCollection whyArguments;
         whyArguments.Add(L"\\/");
 
-        throw new MgInvalidArgumentException(L"MgLogManager.DeleteLog",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.DeleteLog",
             __LINE__, __WFILE__, &arguments, L"MgStringContainsReservedCharacters", &whyArguments);
     }
 
@@ -2397,7 +2397,7 @@
             arguments.Add(L"Failed to queue ACE_Message_Block.");
             messageId = L"MgFormatInnerExceptionMessage";
 
-            MgException* mgException = new MgRuntimeException(L"MgLogManager.QueueLogEntry", __LINE__, __WFILE__, NULL, messageId, &arguments);
+            MgException* mgException = new MgException(MgExceptionCodes::MgRuntimeException, L"MgLogManager.QueueLogEntry", __LINE__, __WFILE__, NULL, messageId, &arguments);
             throw mgException;
         }
     }
@@ -2538,7 +2538,7 @@
                 arguments.Add(L"1");
                 arguments.Add(buffer);
 
-                throw new MgInvalidArgumentException(L"MgLogManager.WriteLogMessage",
+                throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.WriteLogMessage",
                     __LINE__, __WFILE__, &arguments, L"MgInvalidLogType", NULL);
             }
         }
@@ -2570,7 +2570,7 @@
                 {
                     MgStringCollection arguments;
                     arguments.Add(filename);
-                    throw new MgFileIoException(L"MgLogManager.WriteLogMessage", __LINE__, __WFILE__, &arguments, L"", NULL);
+                    throw new MgException(MgExceptionCodes::MgFileIoException, L"MgLogManager.WriteLogMessage", __LINE__, __WFILE__, &arguments, L"", NULL);
                 }
 
                 LogToOStream(pAce, pLogStream);
@@ -2697,7 +2697,7 @@
             arguments.Add(L"1");
             arguments.Add(buffer);
 
-            throw new MgInvalidArgumentException(L"MgLogManager.GetLogHeader",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.GetLogHeader",
                 __LINE__, __WFILE__, &arguments, L"MgInvalidLogType", NULL);
         }
     }
@@ -2786,7 +2786,7 @@
         if (buffer == NULL)
         {
             ACE_OS::fclose(pReadFile);
-            throw new MgOutOfMemoryException(L"MgLogManager.GetLogContents", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgOutOfMemoryException, L"MgLogManager.GetLogContents", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // Clear buffer
@@ -2834,7 +2834,7 @@
 
     if (numEntries < 0)
     {
-        throw new  MgArgumentOutOfRangeException(L"MgLogManager.GetLogContents", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgArgumentOutOfRangeException, L"MgLogManager.GetLogContents", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     INT32 lastPos;      // Keeps track of the position in the file
@@ -2957,7 +2957,7 @@
         arguments.Add(L"2");
         arguments.Add(fromDate->ToString());
 
-        throw new MgInvalidArgumentException(L"MgLogManager.GetLogContents",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.GetLogContents",
             __LINE__, __WFILE__, &arguments, L"MgInvalidFromDate", NULL);
     }
 
@@ -2969,7 +2969,7 @@
         arguments.Add(L"3");
         arguments.Add(toDate->ToString());
 
-        throw new MgInvalidArgumentException(L"MgLogManager.GetLogContents",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.GetLogContents",
             __LINE__, __WFILE__, &arguments, L"MgInvalidDateDifference", NULL);
     }
 
@@ -2997,7 +2997,7 @@
         arguments.Add(L"3");
         arguments.Add(toDate->ToString());
 
-        throw new MgInvalidArgumentException(L"MgLogManager.GetLogContents",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.GetLogContents",
              __LINE__, __WFILE__, &arguments, L"MgFailedToGetFileNameForDates", NULL);
     }
 
@@ -3004,7 +3004,7 @@
     entries = new MgStringCollection();
     if (entries == NULL)
     {
-        throw new MgOutOfMemoryException(L"MgLogManager.GetLogContents", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgOutOfMemoryException, L"MgLogManager.GetLogContents", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     bool fromDateFound = false;
@@ -3170,7 +3170,7 @@
 
     if (filenames == NULL)
     {
-        throw new MgOutOfMemoryException(L"MgLogManager.GetLogContents", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgOutOfMemoryException, L"MgLogManager.GetLogContents", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     STRING rawFilename;
@@ -3209,7 +3209,7 @@
             arguments.Add(L"1");
             arguments.Add(buffer);
 
-            throw new MgInvalidArgumentException(L"MgLogManager.DeterminePotentialFileNames",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.DeterminePotentialFileNames",
                 __LINE__, __WFILE__, &arguments, L"MgInvalidLogType", NULL);
         }
     }
@@ -3496,7 +3496,7 @@
     // is enclosed by angle brackets, i.e. <CCYY-MM-DDThh:mm:ss>
     if (entry.find_first_of(L'<') != 0  || entry.find_first_of(L'>') != 20)
     {
-        throw new MgInvalidLogEntryException(
+        throw new MgException(MgExceptionCodes::MgInvalidLogEntryException, 
             L"MgLogManager.GetDateTimeFromEntry",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -3713,7 +3713,7 @@
                 arguments.Add(L"1");
                 arguments.Add(buffer);
 
-                throw new MgInvalidArgumentException(L"MgLogManager.ArchiveLog",
+                throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.ArchiveLog",
                     __LINE__, __WFILE__, &arguments, L"MgInvalidLogType", NULL);
             }
     }
@@ -3849,7 +3849,7 @@
                 arguments.Add(L"1");
                 arguments.Add(buffer);
 
-                throw new MgInvalidArgumentException(L"MgLogManager.ValidateLogHeaders",
+                throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.ValidateLogHeaders",
                     __LINE__, __WFILE__, &arguments, L"MgInvalidLogType", NULL);
             }
     }
@@ -4178,7 +4178,7 @@
         arguments.Add(L"2");
         arguments.Add(logFileType);
 
-        throw new MgInvalidArgumentException(L"MgLogManager.DetermineLogFileStatus",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.DetermineLogFileStatus",
             __LINE__, __WFILE__, &arguments, L"MgInvalidLogType", NULL);
     }
 
@@ -4308,7 +4308,7 @@
             arguments.Add(L"1");
             arguments.Add(buffer);
 
-            throw new MgInvalidArgumentException(L"MgLogManager.CheckArchiveFrequency",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLogManager.CheckArchiveFrequency",
                 __LINE__, __WFILE__, &arguments, L"MgInvalidLogType", NULL);
         }
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogManager.h
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogManager.h	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogManager.h	2020-10-21 14:38:32 UTC (rev 9747)
@@ -274,11 +274,18 @@
                 { \
                     connInfoUserName = MgSessionManager::GetUserName(pUserInfo->GetMgSessionId()); \
                 } \
-                catch(MgSessionExpiredException* e) \
+                catch(MgException* se) \
                 { \
-                    /* The session ID has expired so we cannot look up the username. */ \
-                    SAFE_RELEASE(e); \
-                    connInfoUserName = L""; \
+                    if (se->GetExceptionCode() == MgExceptionCodes::MgSessionExpiredException) \
+                    { \
+                        /* The session ID has expired so we cannot look up the username. */ \
+                        SAFE_RELEASE(se); \
+                        connInfoUserName = L""; \
+                    } \
+                    else \
+                    { \
+                        se->Raise(); \
+                    } \
                 } \
             } \
         } \

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogThread.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogThread.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LogThread.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -116,7 +116,7 @@
 
                             MgServerManager* pServerManager = MgServerManager::GetInstance();
 
-                            mgException = new MgFdoException(L"MgLogThread.svc", __LINE__, __WFILE__, NULL, messageId, &arguments);
+                            mgException = new MgException(MgExceptionCodes::MgFdoException, L"MgLogThread.svc", __LINE__, __WFILE__, NULL, messageId, &arguments);
                             ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
                             MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), mgException->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
 
@@ -126,7 +126,7 @@
                         {
                             MgServerManager* pServerManager = MgServerManager::GetInstance();
 
-                            mgException = MgSystemException::Create(e, L"MgLogThread.svc", __LINE__, __WFILE__);
+                            mgException = MgException::Create(e, L"MgLogThread.svc", __LINE__, __WFILE__);
                             ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
                             MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), mgException->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
                         }
@@ -134,7 +134,7 @@
                         {
                             MgServerManager* pServerManager = MgServerManager::GetInstance();
 
-                            mgException = new MgUnclassifiedException(L"MgLogThread.svc", __LINE__, __WFILE__, NULL, L"", NULL);
+                            mgException = new MgException(MgExceptionCodes::MgUnclassifiedException, L"MgLogThread.svc", __LINE__, __WFILE__, NULL, L"", NULL);
                             ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
                             MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), mgException->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
                         }
@@ -162,7 +162,7 @@
     {
         MgServerManager* pServerManager = MgServerManager::GetInstance();
 
-        mgException = MgSystemException::Create(e, L"MgLogThread.svc", __LINE__, __WFILE__);
+        mgException = MgException::Create(e, L"MgLogThread.svc", __LINE__, __WFILE__);
         ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
         MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), mgException->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
 
@@ -172,7 +172,7 @@
     {
         MgServerManager* pServerManager = MgServerManager::GetInstance();
 
-        mgException = new MgUnclassifiedException(L"MgLogThread.svc", __LINE__, __WFILE__, NULL, L"", NULL);
+        mgException = new MgException(MgExceptionCodes::MgUnclassifiedException, L"MgLogThread.svc", __LINE__, __WFILE__, NULL, L"", NULL);
         ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
         MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), mgException->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LongTransactionManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LongTransactionManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/LongTransactionManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -101,7 +101,7 @@
         MgStringCollection arguments;
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
-        throw new MgInvalidArgumentException(L"MgLongTransactionManager.GetLongTransactionName",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLongTransactionManager.GetLongTransactionName",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
 
@@ -141,7 +141,7 @@
         MgStringCollection arguments;
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
-        throw new MgInvalidArgumentException(L"MgLongTransactionManager.AddLongTransactionName",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLongTransactionManager.AddLongTransactionName",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageLogReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageLogReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageLogReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -124,7 +124,7 @@
     {
         if (!value.empty()) // invalid entry
         {
-            throw new MgFileIoException(
+            throw new MgException(MgExceptionCodes::MgFileIoException, 
                 L"MgPackageLogReader.SetEntry",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -159,7 +159,7 @@
         MgStringCollection arguments;
         arguments.Add(m_packagePathname);
 
-        throw new MgFileNotFoundException(
+        throw new MgException(MgExceptionCodes::MgFileNotFoundException, 
             L"MgPackageLogReader.ReadStatus",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -174,7 +174,7 @@
         MgStringCollection arguments;
         arguments.Add(m_logPathname);
 
-        throw new MgFileNotFoundException(
+        throw new MgException(MgExceptionCodes::MgFileNotFoundException, 
             L"MgPackageLogReader.ReadStatus",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -187,7 +187,7 @@
         MgStringCollection arguments;
         arguments.Add(m_logPathname);
 
-        throw new MgLogOpenFailedException(
+        throw new MgException(MgExceptionCodes::MgLogOpenFailedException, 
             L"MgPackageLogReader.GetLogInformation",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -255,7 +255,7 @@
             }
             else
             {
-                throw new MgFileIoException(
+                throw new MgException(MgExceptionCodes::MgFileIoException, 
                     L"MgPackageLogReader.ReadStatus",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
@@ -273,7 +273,7 @@
      || actualPackageDate == NULL
      || *packageDate != *actualPackageDate)
     {
-        throw new MgInvalidLogEntryException(
+        throw new MgException(MgExceptionCodes::MgInvalidLogEntryException, 
             L"MgPackageLogReader.ReadStatus",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageLogWriter.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageLogWriter.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageLogWriter.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -93,7 +93,7 @@
         MgStringCollection arguments;
         arguments.Add(m_logPathname);
 
-        throw new MgLogOpenFailedException(
+        throw new MgException(MgExceptionCodes::MgLogOpenFailedException, 
             L"MgPackageLogWriter.UpdateLog",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/PackageManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -114,7 +114,7 @@
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, 
             L"MgPackageManager.GetPackageName",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
@@ -134,7 +134,7 @@
         arguments.Add(L"1");
         arguments.Add(packagePathname);
 
-        throw new MgInvalidArgumentException(
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, 
             L"MgPackageManager.GetPackageName",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -187,7 +187,7 @@
         MgStringCollection arguments;
         arguments.Add(packagePath);
 
-        throw new MgDirectoryNotFoundException(
+        throw new MgException(MgExceptionCodes::MgDirectoryNotFoundException, 
             L"MgPackageManager.EnumeratePackages",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -200,7 +200,7 @@
         MgStringCollection arguments;
         arguments.Add(packagePath);
 
-        throw new MgFileIoException(
+        throw new MgException(MgExceptionCodes::MgFileIoException, 
             L"MgPackageManager.EnumeratePackages",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -254,7 +254,7 @@
 
     if (NULL == resourceService)
     {
-        throw new MgServiceNotAvailableException(
+        throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, 
             L"MgPackageManager.LoadPackage",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -292,7 +292,7 @@
 
     if (NULL == resourceService)
     {
-        throw new MgServiceNotAvailableException(
+        throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, 
             L"MgPackageManager.MakePackage",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SecurityCache.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SecurityCache.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SecurityCache.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -142,7 +142,7 @@
     }
     else if (strict)
     {
-        throw new MgAuthenticationFailedException(L"MgSecurityCache.GetUserInfo",
+        throw new MgException(MgExceptionCodes::MgAuthenticationFailedException, L"MgSecurityCache.GetUserInfo",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SecurityManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SecurityManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SecurityManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -147,7 +147,7 @@
         userInformation->GetUserName() != MG_SYSTEM_USERNAME ||
         userInformation->GetPassword() != MG_SYSTEM_PASSWORD)
     {
-        throw new MgAuthenticationFailedException(
+        throw new MgException(MgExceptionCodes::MgAuthenticationFailedException, 
             L"MgSecurityManager.Authenticate", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 }
@@ -175,7 +175,7 @@
 
     if (NULL == userInformation)
     {
-        throw new MgAuthenticationFailedException(
+        throw new MgException(MgExceptionCodes::MgAuthenticationFailedException, 
             L"MgSecurityManager.Authenticate", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -186,7 +186,7 @@
     {
         if (user.empty())
         {
-            throw new MgAuthenticationFailedException(
+            throw new MgException(MgExceptionCodes::MgAuthenticationFailedException, 
                 L"MgSecurityManager.Authenticate", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -195,7 +195,7 @@
 
         if (userInformation->GetPassword() != userInfo->GetPassword())
         {
-            throw new MgAuthenticationFailedException(
+            throw new MgException(MgExceptionCodes::MgAuthenticationFailedException, 
                 L"MgSecurityManager.Authenticate", __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
@@ -209,7 +209,7 @@
     {
         MG_LOG_AUTHENTICATION_ENTRY(MgResources::UnauthorizedAccess.c_str());
 
-        throw new MgUnauthorizedAccessException(
+        throw new MgException(MgExceptionCodes::MgUnauthorizedAccessException, 
             L"MgSecurityManager.Authenticate", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/ServerManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/ServerManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/ServerManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -191,7 +191,7 @@
             MgStringCollection arguments;
             arguments.Add(localServerAddress);
 
-            throw new MgInvalidIpAddressException(
+            throw new MgException(MgExceptionCodes::MgInvalidIpAddressException, 
                 L"MgServerManager.Initialize", __LINE__, __WFILE__, &arguments,
                 L"MgMachineIpMustBeLocalHost", NULL);
         }
@@ -202,7 +202,7 @@
             arguments.Add(siteServerAddress);
             arguments.Add(localServerAddress);
 
-            throw new MgLogicException(
+            throw new MgException(MgExceptionCodes::MgLogicException, 
                 L"MgServerManager.Initialize", __LINE__, __WFILE__, NULL,
                 L"MgInvalidIpConfigurationForSiteServer", &arguments);
         }
@@ -214,7 +214,7 @@
             MgStringCollection arguments;
             arguments.Add(siteServerAddress);
 
-            throw new MgInvalidIpAddressException(
+            throw new MgException(MgExceptionCodes::MgInvalidIpAddressException, 
                 L"MgServerManager.Initialize", __LINE__, __WFILE__, &arguments,
                 L"MgSiteServerIpMustNotBeLocalHost", NULL);
         }
@@ -225,7 +225,7 @@
             arguments.Add(siteServerAddress);
             arguments.Add(localServerAddress);
 
-            throw new MgLogicException(
+            throw new MgException(MgExceptionCodes::MgLogicException, 
                 L"MgServerManager.Initialize", __LINE__, __WFILE__, NULL,
                 L"MgInvalidIpConfigurationForSupportServer", &arguments);
         }
@@ -681,7 +681,7 @@
             arguments.Add(L"1");
             arguments.Add(identifier);
 
-            throw new MgInvalidArgumentException(L"MgServerManager.GetDocument",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerManager.GetDocument",
                 __LINE__, __WFILE__, &arguments, L"MgDocumentIdentifierFilenameFailed", NULL);
         }
     }
@@ -695,7 +695,7 @@
         MgStringCollection whyArguments;
         whyArguments.Add(L"");
 
-        throw new MgInvalidArgumentException(L"MgServerManager.GetDocument",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerManager.GetDocument",
             __LINE__, __WFILE__, &arguments, L"MgStringContainsReservedCharacters", &whyArguments);
     }
 
@@ -745,7 +745,7 @@
             arguments.Add(L"1");
             arguments.Add(identifier);
 
-            throw new MgInvalidArgumentException(L"MgServerManager.SetDocument",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerManager.SetDocument",
                 __LINE__, __WFILE__, &arguments, L"MgDocumentIdentifierFilenameFailed", NULL);
         }
     }
@@ -759,7 +759,7 @@
         MgStringCollection whyArguments;
         whyArguments.Add(L"");
 
-        throw new MgInvalidArgumentException(L"MgServerManager.SetDocument",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerManager.SetDocument",
             __LINE__, __WFILE__, &arguments, L"MgStringContainsReservedCharacters", &whyArguments);
     }
 
@@ -1271,7 +1271,7 @@
 
     #else
 
-        throw new MgPlatformNotSupportedException(L"MgServerManager.ComputeWIN32CpuLoad", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgPlatformNotSupportedException, L"MgServerManager.ComputeWIN32CpuLoad", __LINE__, __WFILE__, NULL, L"", NULL);
 
     #endif  // _WIN32
 
@@ -1291,7 +1291,7 @@
 
     #ifdef _WIN32
 
-        throw new MgPlatformNotSupportedException(L"MgServerManager.ComputeLinuxCpuLoad", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgPlatformNotSupportedException, L"MgServerManager.ComputeLinuxCpuLoad", __LINE__, __WFILE__, NULL, L"", NULL);
 
     #else
 
@@ -1313,7 +1313,7 @@
         {
             MgStringCollection arguments;
             arguments.Add(MgUtil::LinuxFilesystemStat);
-            throw new MgFileNotFoundException(L"MgServerManager.ComputeLinuxCpuLoad", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgFileNotFoundException, L"MgServerManager.ComputeLinuxCpuLoad", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         fgets(line, 80, stat);
         sscanf(line, "%*3s %i %i %i %i", &ouser, &onice, &osys, &oidle);
@@ -1328,7 +1328,7 @@
         {
             MgStringCollection arguments;
             arguments.Add(MgUtil::LinuxFilesystemStat);
-            throw new MgFileNotFoundException(L"MgServerManager.ComputeLinuxCpuLoad", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgFileNotFoundException, L"MgServerManager.ComputeLinuxCpuLoad", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         fgets(line, 80, stat);
         sscanf(line, "%*3s %i %i %i %i", &user, &nice, &sys, &idle);
@@ -1650,7 +1650,7 @@
             arguments.Add(L"Failed to queue ACE_Message_Block.");
             messageId = L"MgFormatInnerExceptionMessage";
 
-            MgException* mgException = new MgRuntimeException(L"MgServerManager.StartWorkerThread", __LINE__, __WFILE__, NULL, messageId, &arguments);
+            MgException* mgException = new MgException(MgExceptionCodes::MgRuntimeException, L"MgServerManager.StartWorkerThread", __LINE__, __WFILE__, NULL, messageId, &arguments);
             throw mgException;
         }
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/ServiceManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/ServiceManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/ServiceManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -324,7 +324,7 @@
             arguments.Add(L"1");
             arguments.Add(L"MgPropertyCollection");
 
-            throw new MgInvalidArgumentException(L"MgServiceManager.EnableServices",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServiceManager.EnableServices",
                 __LINE__, __WFILE__, &arguments, L"MgUnsupportedService", NULL);
         }
     }
@@ -339,7 +339,7 @@
             arguments.Add(L"1");
             arguments.Add(L"MgPropertyCollection");
 
-            throw new MgInvalidArgumentException(L"MgServiceManager.EnableServices",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServiceManager.EnableServices",
                 __LINE__, __WFILE__, &arguments, L"MgUnsupportedService", NULL);
         }
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SessionCache.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SessionCache.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/SessionCache.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -97,7 +97,7 @@
     }
     else
     {
-        throw new MgDuplicateSessionException(L"MgSessionCache.AddSession",
+        throw new MgException(MgExceptionCodes::MgDuplicateSessionException, L"MgSessionCache.AddSession",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 }
@@ -114,7 +114,7 @@
     {
         MgStringCollection args;
         args.Add(session);
-        throw new MgSessionExpiredException(L"MgSessionCache.RemoveSession",
+        throw new MgException(MgExceptionCodes::MgSessionExpiredException, L"MgSessionCache.RemoveSession",
             __LINE__, __WFILE__, NULL, L"MgSessionExpired", &args);
     }
     else
@@ -175,7 +175,7 @@
     {
         MgStringCollection args;
         args.Add(session);
-        throw new MgSessionExpiredException(L"MgSessionCache.GetSessionInfo",
+        throw new MgException(MgExceptionCodes::MgSessionExpiredException, L"MgSessionCache.GetSessionInfo",
             __LINE__, __WFILE__, NULL, L"MgSessionExpired", &args);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/UnmanagedDataManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/UnmanagedDataManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/UnmanagedDataManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -509,7 +509,7 @@
             arguments.Add(L"1");
             arguments.Add(path);
 
-            throw new MgInvalidArgumentException(L"MgUnmanagedDataManager.EnumerateUnmanagedData",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgUnmanagedDataManager.EnumerateUnmanagedData",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
@@ -556,7 +556,7 @@
                 arguments.Add(L"1");
                 arguments.Add(path);
 
-                throw new MgInvalidArgumentException(L"MgUnmanagedDataManager.EnumerateUnmanagedData",
+                throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgUnmanagedDataManager.EnumerateUnmanagedData",
                     __LINE__, __WFILE__, &arguments, L"", NULL);
             }
         }

Modified: sandbox/jng/flatten_exceptions/Server/src/Common/Manager/WorkerThread.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Common/Manager/WorkerThread.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Common/Manager/WorkerThread.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -122,7 +122,7 @@
 
                             MgServerManager* pServerManager = MgServerManager::GetInstance();
 
-                            mgException = new MgFdoException(L"MgWorkerThread.svc", __LINE__, __WFILE__, NULL, messageId, &arguments);
+                            mgException = new MgException(MgExceptionCodes::MgFdoException, L"MgWorkerThread.svc", __LINE__, __WFILE__, NULL, messageId, &arguments);
                             ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
                             MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), mgException->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
 
@@ -132,7 +132,7 @@
                         {
                             MgServerManager* pServerManager = MgServerManager::GetInstance();
 
-                            mgException = MgSystemException::Create(e, L"MgWorkerThread.svc", __LINE__, __WFILE__);
+                            mgException = MgException::Create(e, L"MgWorkerThread.svc", __LINE__, __WFILE__);
                             ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
                             MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), mgException->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
                         }
@@ -140,7 +140,7 @@
                         {
                             MgServerManager* pServerManager = MgServerManager::GetInstance();
 
-                            mgException = new MgUnclassifiedException(L"MgWorkerThread.svc", __LINE__, __WFILE__, NULL, L"", NULL);
+                            mgException = new MgException(MgExceptionCodes::MgUnclassifiedException, L"MgWorkerThread.svc", __LINE__, __WFILE__, NULL, L"", NULL);
                             ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
                             MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), mgException->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
                         }
@@ -168,7 +168,7 @@
     {
         MgServerManager* pServerManager = MgServerManager::GetInstance();
 
-        mgException = MgSystemException::Create(e, L"MgWorkerThread.svc", __LINE__, __WFILE__);
+        mgException = MgException::Create(e, L"MgWorkerThread.svc", __LINE__, __WFILE__);
         ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
         MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), mgException->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
 
@@ -178,7 +178,7 @@
     {
         MgServerManager* pServerManager = MgServerManager::GetInstance();
 
-        mgException = new MgUnclassifiedException(L"MgWorkerThread.svc", __LINE__, __WFILE__, NULL, L"", NULL);
+        mgException = new MgException(MgExceptionCodes::MgUnclassifiedException, L"MgWorkerThread.svc", __LINE__, __WFILE__, NULL, L"", NULL);
         ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
         MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), mgException->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Core/EventTimer.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Core/EventTimer.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Core/EventTimer.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -45,7 +45,7 @@
 {
     if (NULL == m_eventHandler.get())
     {
-        throw new MgNullReferenceException(
+        throw new MgException(MgExceptionCodes::MgNullReferenceException, 
             L"MgEventTimer.GetEventHandler", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -80,7 +80,7 @@
 
     if (NULL != m_eventHandler.get() || 0 != m_id)
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgEventTimer.Initialize", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -117,7 +117,7 @@
 
     if (NULL == m_eventHandler.get() || 0 != m_id)
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgEventTimer.Schedule", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Core/LoadPackageCommand.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Core/LoadPackageCommand.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Core/LoadPackageCommand.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -34,7 +34,7 @@
             Ptr<MgResourceService> resSvc = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
             if (NULL == (MgResourceService*)resSvc)
             {
-                throw new MgServiceNotAvailableException(L"MgLoadPackageCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
+                throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"MgLoadPackageCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
             }
 
             Ptr<MgByteSource> bs = new MgByteSource(m_path);

Modified: sandbox/jng/flatten_exceptions/Server/src/Core/Server.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Core/Server.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Core/Server.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -457,7 +457,7 @@
 
                             MgStringCollection arguments;
                             arguments.Add(buffer);
-                            throw new MgPortNotAvailableException(L"MgServer.svc", __LINE__, __WFILE__, &arguments, L"", NULL);
+                            throw new MgException(MgExceptionCodes::MgPortNotAvailableException, L"MgServer.svc", __LINE__, __WFILE__, &arguments, L"", NULL);
                         }
                     }
                     else
@@ -472,7 +472,7 @@
 
                         MgStringCollection arguments;
                         arguments.Add(buffer);
-                        throw new MgPortNotAvailableException(L"MgServer.svc", __LINE__, __WFILE__, &arguments, L"", NULL);
+                        throw new MgException(MgExceptionCodes::MgPortNotAvailableException, L"MgServer.svc", __LINE__, __WFILE__, &arguments, L"", NULL);
                     }
                 }
                 else
@@ -487,7 +487,7 @@
 
                     MgStringCollection arguments;
                     arguments.Add(buffer);
-                    throw new MgPortNotAvailableException(L"MgServer.svc", __LINE__, __WFILE__, &arguments, L"", NULL);
+                    throw new MgException(MgExceptionCodes::MgPortNotAvailableException, L"MgServer.svc", __LINE__, __WFILE__, &arguments, L"", NULL);
                 }
             }
             else
@@ -647,7 +647,7 @@
             whyArguments.Add(MgConfigProperties::GeneralPropertiesSection);
             whyArguments.Add(locale);
 
-            throw new MgConfigurationException(
+            throw new MgException(MgExceptionCodes::MgConfigurationException, 
                 L"MgServer.open",
                 __LINE__, __WFILE__, &whatArguments,
                 L"MgConfigurationPropertyValueIsInvalid", &whyArguments);
@@ -736,7 +736,7 @@
             // Check if we have a catalog
             if (NULL == csCatalog.p)
             {
-                throw new MgCoordinateSystemInitializationFailedException(
+                throw new MgException(MgExceptionCodes::MgCoordinateSystemInitializationFailedException, 
                     L"MgServer.open", __LINE__, __WFILE__, NULL, L"", NULL);
             }
 
@@ -794,7 +794,7 @@
             LibraryStatus status = csCatalog->GetLibraryStatus();
             if(lsInitialized != status)
             {
-                throw new MgCoordinateSystemInitializationFailedException(
+                throw new MgException(MgExceptionCodes::MgCoordinateSystemInitializationFailedException, 
                     L"MgServer.open", __LINE__, __WFILE__, NULL, L"", NULL);
             }
 
@@ -922,7 +922,7 @@
             if (NULL == hlib)
             {
                 ACE_DEBUG ((LM_DEBUG, ACE_TEXT("(%t) MgServer::open() - Failed to load FDO library.\n")));
-                throw new MgFdoException(L"MgServer.svc",
+                throw new MgException(MgExceptionCodes::MgFdoException, L"MgServer.svc",
                      __LINE__, __WFILE__, NULL, L"MgFailedToLoadFdoLibrary", NULL);
             }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Core/ServiceHandlerFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Core/ServiceHandlerFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Core/ServiceHandlerFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -149,7 +149,7 @@
 
         case MgPacketParser::msiUnknown:
         default:
-            throw new MgServiceNotSupportedException(L"GetHandler",
+            throw new MgException(MgExceptionCodes::MgServiceNotSupportedException, L"GetHandler",
                 __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Core/SetPwdCommand.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Core/SetPwdCommand.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Core/SetPwdCommand.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -33,7 +33,7 @@
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (NULL == (MgServerSiteService*)pService)
         {
-            throw new MgServiceNotAvailableException(L"MgSetPwdCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"MgSetPwdCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         if (m_strUser.empty()) //Need to have passed username

Modified: sandbox/jng/flatten_exceptions/Server/src/Core/TestCommand.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Core/TestCommand.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Core/TestCommand.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -71,7 +71,7 @@
         else
         {
             ACE_DEBUG((LM_INFO, ACE_TEXT("Cannot open library: %W\n"), library.c_str()));
-            throw new MgUnclassifiedException(L"MgTestCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgUnclassifiedException, L"MgTestCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 #else
         string library = "libMgUnitTesting.so";
@@ -84,7 +84,7 @@
         else
         {
             ACE_DEBUG((LM_INFO, ACE_TEXT("Cannot open library: %s (reason: %s)\n"), library.c_str(), dlerror()));
-            throw new MgUnclassifiedException(L"MgTestCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgUnclassifiedException, L"MgTestCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 #endif // _WIN32
         if (execute != NULL)
@@ -102,7 +102,7 @@
         {
             // Failed to retrieve function
             ACE_DEBUG((LM_INFO, ACE_TEXT("Cannot locate 'Execute' procedure address inside library.\n")));
-            throw new MgUnclassifiedException(L"MgTestCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgUnclassifiedException, L"MgTestCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         ACE_DEBUG((LM_INFO, ACE_TEXT("Finished running the unit tests.\n\n")));

Modified: sandbox/jng/flatten_exceptions/Server/src/Core/TestFdoCommand.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Core/TestFdoCommand.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Core/TestFdoCommand.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -70,7 +70,7 @@
         else
         {
             ACE_DEBUG((LM_INFO, ACE_TEXT("Cannot open library: %W\n"), library.c_str()));
-            throw new MgUnclassifiedException(L"MgTestFdoCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgUnclassifiedException, L"MgTestFdoCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 #else
         string library = "libMgFdoUnitTesting.so";
@@ -83,7 +83,7 @@
         else
         {
             ACE_DEBUG((LM_INFO, ACE_TEXT("Cannot open library: %s\n"), library.c_str()));
-            throw new MgUnclassifiedException(L"MgTestFdoCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgUnclassifiedException, L"MgTestFdoCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 #endif // _WIN32
         if (execute != NULL)
@@ -101,7 +101,7 @@
         {
             // Failed to retrieve function
             ACE_DEBUG((LM_INFO, ACE_TEXT("Cannot locate 'Execute' procedure address inside library.\n")));
-            throw new MgUnclassifiedException(L"MgTestFdoCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgUnclassifiedException, L"MgTestFdoCommand.Execute", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         ACE_DEBUG((LM_INFO, ACE_TEXT("Finished running the FDO unit tests.\n")));

Modified: sandbox/jng/flatten_exceptions/Server/src/Core/TimedEventHandler.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Core/TimedEventHandler.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Core/TimedEventHandler.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
             break;
 
         default:
-            throw new MgInvalidArgumentException(
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, 
                 L"MgTimedEventHandler.Create", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/DrawingOperationFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/DrawingOperationFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/DrawingOperationFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -77,7 +77,7 @@
                 handler.reset(new MgOpGetDrawing());
                 break;
             default:
-                throw new MgInvalidOperationVersionException(
+                throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                     L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
             }
             break;
@@ -89,7 +89,7 @@
                 handler.reset(new MgOpDescribeDrawing());
                 break;
             default:
-                throw new MgInvalidOperationVersionException(
+                throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                     L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
             }
             break;
@@ -101,7 +101,7 @@
                 handler.reset(new MgOpGetSection());
                 break;
             default:
-                throw new MgInvalidOperationVersionException(
+                throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                     L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
             }
             break;
@@ -113,7 +113,7 @@
                 handler.reset(new MgOpGetSectionResource());
                 break;
             default:
-                throw new MgInvalidOperationVersionException(
+                throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                     L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
             }
             break;
@@ -125,7 +125,7 @@
                 handler.reset(new MgOpEnumerateLayers());
                 break;
             default:
-                throw new MgInvalidOperationVersionException(
+                throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                     L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
             }
             break;
@@ -137,7 +137,7 @@
                 handler.reset(new MgOpGetLayer());
                 break;
             default:
-                throw new MgInvalidOperationVersionException(
+                throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                     L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
             }
             break;
@@ -149,7 +149,7 @@
                 handler.reset(new MgOpEnumerateSections());
                 break;
             default:
-                throw new MgInvalidOperationVersionException(
+                throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                     L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
             }
             break;
@@ -161,7 +161,7 @@
                 handler.reset(new MgOpEnumerateSectionResources());
                 break;
             default:
-                throw new MgInvalidOperationVersionException(
+                throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                     L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
             }
             break;
@@ -173,13 +173,13 @@
                 handler.reset(new MgOpGetCoordinateSpace());
                 break;
             default:
-                throw new MgInvalidOperationVersionException(
+                throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                     L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
             }
             break;
 
         default:
-            throw new MgInvalidOperationException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpDescribeDrawing.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpDescribeDrawing.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpDescribeDrawing.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -86,7 +86,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDescribeDrawing.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDescribeDrawing.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateLayers.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateLayers.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateLayers.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -91,7 +91,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateLayers.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateLayers.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateSectionResources.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateSectionResources.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateSectionResources.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -91,7 +91,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateSectionResources.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateSectionResources.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateSections.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateSections.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpEnumerateSections.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -86,7 +86,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateSections.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateSections.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetCoordinateSpace.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetCoordinateSpace.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetCoordinateSpace.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -86,7 +86,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetCoordinateSpace.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetCoordinateSpace.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetDrawing.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetDrawing.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetDrawing.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -86,7 +86,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetDrawing.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetDrawing.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetLayer.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetLayer.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetLayer.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -96,7 +96,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetLayer.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetLayer.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetSection.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetSection.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetSection.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -91,7 +91,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetSection.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetSection.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetSectionResource.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetSectionResource.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/OpGetSectionResource.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -91,7 +91,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetSectionResource.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetSectionResource.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -126,7 +126,7 @@
                 DWFCORE_FREE_OBJECT(pStream);
             if (0 != pBuffer)
                 DWFCORE_FREE_MEMORY(pBuffer);
-            throw new MgInvalidCastException(L"MgServerDrawingService.DescribeDrawing", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidCastException, L"MgServerDrawingService.DescribeDrawing", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // Return the manifest via a MgByteReader
@@ -194,7 +194,7 @@
         {
             MgStringCollection arguments;
             arguments.Add(sectionName);
-            throw new MgDwfSectionNotFoundException(L"MgServerDrawingService.GetSection", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgDwfSectionNotFoundException, L"MgServerDrawingService.GetSection", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
         // Create a DWFPackageWriter for writing the section to a temporary DWF file
@@ -288,7 +288,7 @@
             arguments.Add(L"2");
             arguments.Add(resourceName);
 
-            throw new MgInvalidArgumentException(L"MgServerDrawingService.GetSectionResource",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerDrawingService.GetSectionResource",
                 __LINE__, __WFILE__, &arguments, L"MgResourceNameSeparatorNotFound", NULL);
         }
         sectionName = resourceName.substr(0, index);
@@ -299,7 +299,7 @@
             arguments.Add(L"2");
             arguments.Add(resourceName);
 
-            throw new MgInvalidArgumentException(L"MgServerDrawingService.GetSectionResource",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerDrawingService.GetSectionResource",
                 __LINE__, __WFILE__, &arguments, L"MgResourceNameDoesNotContainSectionName", NULL);
         }
 
@@ -310,7 +310,7 @@
         {
             MgStringCollection arguments;
             arguments.Add(sectionName);
-            throw new MgDwfSectionNotFoundException(L"MgServerDrawingService.GetSectionResource", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgDwfSectionNotFoundException, L"MgServerDrawingService.GetSectionResource", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         // ...check if the resource exists in the section
         DWFResource* pResource = pSection->findResourceByHREF(resourceName.c_str());
@@ -318,7 +318,7 @@
         {
             MgStringCollection arguments;
             arguments.Add(resourceName);
-            throw new MgDwfSectionResourceNotFoundException(L"MgServerDrawingService.GetSectionResource", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgDwfSectionResourceNotFoundException, L"MgServerDrawingService.GetSectionResource", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         // ...get the mime type for the resource
         STRING wsMimeType = (STRING)pResource->mime();
@@ -335,7 +335,7 @@
                 DWFCORE_FREE_OBJECT(pStream);
             if (0 != pBuffer)
                 DWFCORE_FREE_MEMORY(pBuffer);
-            throw new MgInvalidCastException(L"MgServerDrawingService.GetSectionResource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidCastException, L"MgServerDrawingService.GetSectionResource", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // Return the resource via a MgByteReader
@@ -405,7 +405,7 @@
         {
             MgStringCollection arguments;
             arguments.Add(sectionName);
-            throw new MgDwfSectionNotFoundException(L"MgServerDrawingService.EnumerateLayers", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgDwfSectionNotFoundException, L"MgServerDrawingService.EnumerateLayers", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
         // Get the resources for the section
@@ -425,7 +425,7 @@
                 {
                     MgStringCollection arguments;
                     arguments.Add(sectionName);
-                    throw new MgInvalidDwfSectionException(L"MgServerDrawingService.GetSection", __LINE__, __WFILE__, &arguments, L"", NULL);
+                    throw new MgException(MgExceptionCodes::MgInvalidDwfSectionException, L"MgServerDrawingService.GetSection", __LINE__, __WFILE__, &arguments, L"", NULL);
                 }
 
                 pResource = piResources->get();
@@ -452,7 +452,7 @@
         FILE* fp = fopen( tempW2dFileName.c_str(), "wb+" );  // NOXLATE
         if (0 == fp)
         {
-            throw new MgTemporaryFileNotAvailableException(L"MgServerDrawingService.EnumerateLayers", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgTemporaryFileNotAvailableException, L"MgServerDrawingService.EnumerateLayers", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         fwrite(pBuffer, sizeof(char), nBytes, fp);
@@ -548,7 +548,7 @@
         {
             MgStringCollection arguments;
             arguments.Add(sectionName);
-            throw new MgDwfSectionNotFoundException(L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgDwfSectionNotFoundException, L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         pSection->readDescriptor();
 
@@ -569,7 +569,7 @@
                 {
                     MgStringCollection arguments;
                     arguments.Add(sectionName);
-                    throw new MgInvalidDwfSectionException(L"MgServerDrawingService.GetSection", __LINE__, __WFILE__, &arguments, L"", NULL);
+                    throw new MgException(MgExceptionCodes::MgInvalidDwfSectionException, L"MgServerDrawingService.GetSection", __LINE__, __WFILE__, &arguments, L"", NULL);
                 }
 
                 pResource = piResources->get();
@@ -596,7 +596,7 @@
         FILE* fp = fopen( tempW2dFileName.c_str(), "wb+" );  // NOXLATE
         if (0 == fp)
         {
-            throw new MgTemporaryFileNotAvailableException(L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgTemporaryFileNotAvailableException, L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         fwrite(pBuffer, sizeof(char), nBytes, fp);
@@ -668,7 +668,7 @@
             // Cannot find specified layer in the Dwf section
             MgStringCollection arguments;
             arguments.Add(targetLayer.name);
-            throw new MgLayerNotFoundException(L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgLayerNotFoundException, L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
         // Use EPlotSection to get section color, paper
@@ -691,7 +691,7 @@
             pPaper) );
         if (0 == pPage)
         {
-            throw new MgOutOfMemoryException(L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgOutOfMemoryException, L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         // Set properties for the section
         pPage->provideProperty(
@@ -708,7 +708,7 @@
             L"") );
         if (0 == p2Dgfx)
         {
-            throw new MgOutOfMemoryException(L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgOutOfMemoryException, L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         p2Dgfx->configureGraphic(pTransform, pExtents, pClip);
 
@@ -718,7 +718,7 @@
         if (pW2DFile == NULL)
         {
             DWFCORE_FREE_OBJECT( p2Dgfx );
-            throw new MgOutOfMemoryException(L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgOutOfMemoryException, L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         DWFFileInputStream* pW2DFilestream = DWFCORE_ALLOC_OBJECT( DWFFileInputStream );
         if (pW2DFilestream == NULL)
@@ -725,7 +725,7 @@
         {
             DWFCORE_FREE_OBJECT( p2Dgfx );
             DWFCORE_FREE_OBJECT( pW2DFile );
-            throw new MgOutOfMemoryException(L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgOutOfMemoryException, L"MgServerDrawingService.GetLayer", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         //... open the file and bind it to the stream
         pW2DFile->open();
@@ -936,7 +936,7 @@
         {
             MgStringCollection arguments;
             arguments.Add(sectionName);
-            throw new MgDwfSectionNotFoundException(L"MgServerDrawingService.EnumerateSectionResources", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgDwfSectionNotFoundException, L"MgServerDrawingService.EnumerateSectionResources", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
         // Get all the resources in the section
@@ -946,7 +946,7 @@
         {
             MgStringCollection arguments;
             arguments.Add(sectionName);
-            throw new MgInvalidDwfSectionException(L"MgServerDrawingService.EnumerateSectionResources", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidDwfSectionException, L"MgServerDrawingService.EnumerateSectionResources", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
         // Iterate through the resources and write to xml document

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingServiceDefs.h
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingServiceDefs.h	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingServiceDefs.h	2020-10-21 14:38:32 UTC (rev 9747)
@@ -34,7 +34,7 @@
     {                                                                         \
         MgStringCollection arguments;                                         \
         arguments.Add(STRING(e.message()));                                   \
-        mgException = new MgDwfException(methodName, __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments); \
+        mgException = new MgException(MgExceptionCodes::MgDwfException, methodName, __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments); \
                                                                               \
     MG_CATCH(methodName)                                                      \
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingServiceUtil.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingServiceUtil.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Drawing/ServerDrawingServiceUtil.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -308,7 +308,7 @@
 
     if (resourceService == 0)
     {
-        throw new MgServiceNotAvailableException(L"MgServerDrawingServiceUtil.OpenDrawingResource", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"MgServerDrawingServiceUtil.OpenDrawingResource", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     byteReader = resourceService->GetResourceContent(resource, L"Substitution");
@@ -348,7 +348,7 @@
     {
         MgStringCollection arguments;
         arguments.Add(dwfFileName);
-        throw new MgInvalidDwfPackageException(L"MgServerDrawingServiceUtil.OpenDrawingResource", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidDwfPackageException, L"MgServerDrawingServiceUtil.OpenDrawingResource", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     MG_SERVER_DRAWING_SERVICE_CATCH_AND_THROW(L"MgServerDrawingServiceUtil.OpenDrawingResource")
@@ -409,7 +409,7 @@
     {
         MgStringCollection arguments;
         arguments.Add(X2W(e.getMessage()));
-        throw new MgXmlParserException(L"MgServerDrawingServiceUtil.ParseDrawingResourceContent",
+        throw new MgException(MgExceptionCodes::MgXmlParserException, L"MgServerDrawingServiceUtil.ParseDrawingResourceContent",
             __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments);
     }
     catch (const DOMException& e)
@@ -416,12 +416,12 @@
     {
         MgStringCollection arguments;
         arguments.Add(X2W(e.msg));
-        throw new MgXmlParserException(L"MgServerDrawingServiceUtil.ParseDrawingResourceContent",
+        throw new MgException(MgExceptionCodes::MgXmlParserException, L"MgServerDrawingServiceUtil.ParseDrawingResourceContent",
             __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments);
     }
     catch (...)
     {
-        throw new MgUnclassifiedException(L"MgServerDrawingServiceUtil.ParseDrawingResourceContent",
+        throw new MgException(MgExceptionCodes::MgUnclassifiedException, L"MgServerDrawingServiceUtil.ParseDrawingResourceContent",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ByteSourceRasterStreamImpl.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ByteSourceRasterStreamImpl.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ByteSourceRasterStreamImpl.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -70,7 +70,7 @@
         arguments.Add(L"2");
         arguments.Add(buffer);
 
-        throw new MgInvalidArgumentException(L"ByteSourceRasterStreamImpl.Read",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"ByteSourceRasterStreamImpl.Read",
             __LINE__, __WFILE__, &arguments, L"MgValueCannotBeLessThanZero", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureDistribution.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureDistribution.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureDistribution.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
         }
         default:
         {
-            throw new MgInvalidPropertyTypeException(
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, 
                 L"MgFeatureDistribution.CreateDistributionFunction", __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureGeometricFunctions.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureGeometricFunctions.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureGeometricFunctions.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -82,7 +82,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgFeatureDistribution.Initialize", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgFeatureDistribution.Initialize", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     m_reader = SAFE_ADDREF(reader);
@@ -231,7 +231,7 @@
 
                 MgStringCollection arguments;
                 arguments.Add(message);
-                throw new MgFeatureServiceException(
+                throw new MgException(MgExceptionCodes::MgFeatureServiceException, 
                     L"MgFeatureGeometricFunctions.ExecuteOperation",
                     __LINE__, __WFILE__, &arguments, L"", NULL);
             }
@@ -254,7 +254,7 @@
         }
         default:
         {
-            throw new MgInvalidPropertyTypeException(
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, 
                 L"MgFeatureGeometricFunctions.CheckSupportedPropertyType", __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
@@ -283,7 +283,7 @@
             }
             default:
             {
-                throw new MgInvalidPropertyTypeException(
+                throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, 
                     L"MgFeatureGeometricFunctions.GetValue",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
@@ -311,7 +311,7 @@
         }
         default:
         {
-            throw new MgInvalidPropertyTypeException(
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, 
                 L"MgFeatureGeometricFunctions.GetReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureManipulationCommand.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureManipulationCommand.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureManipulationCommand.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -72,7 +72,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgFeatureManipulationCommand.CreateCommand", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgFeatureManipulationCommand.CreateCommand", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     return command.Detach();

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureNumericFunctions.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureNumericFunctions.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureNumericFunctions.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -91,7 +91,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgFeatureDistribution.Initialize", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgFeatureDistribution.Initialize", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     m_reader = SAFE_ADDREF(reader);
@@ -189,7 +189,7 @@
         }
         default:
         {
-            throw new MgInvalidPropertyTypeException(L"MgFeatureNumericFunctions.CheckSupportedPropertyType",
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgFeatureNumericFunctions.CheckSupportedPropertyType",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
@@ -248,7 +248,7 @@
             }
             default:
             {
-                throw new MgInvalidPropertyTypeException(L"MgFeatureNumericFunctions.CheckSupportedPropertyType",
+                throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgFeatureNumericFunctions.CheckSupportedPropertyType",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
         }
@@ -266,7 +266,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgServerSelectFeatures.GetEqualCategories", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerSelectFeatures.GetEqualCategories", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     // find the range of the data values
@@ -501,7 +501,7 @@
         }
         default:
         {
-            throw new MgInvalidPropertyTypeException(L"MgFeatureNumericFunctions.CheckSupportedPropertyType",
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgFeatureNumericFunctions.CheckSupportedPropertyType",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
@@ -529,7 +529,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgServerSelectFeatures.GetEqualCategories", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerSelectFeatures.GetEqualCategories", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     // collect information about the data values
@@ -629,7 +629,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgServerSelectFeatures.GetEqualCategories", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerSelectFeatures.GetEqualCategories", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     int count = (int)values.size();

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureOperationFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureOperationFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureOperationFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -116,7 +116,7 @@
             handler.reset(new MgOpGetFeatureProviders());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -128,7 +128,7 @@
             handler.reset(new MgOpGetConnectionPropertyValues());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -140,7 +140,7 @@
             handler.reset(new MgOpTestConnection());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -152,7 +152,7 @@
             handler.reset(new MgOpTestFeatureSourceConnection());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -166,7 +166,7 @@
             handler.reset(new MgOpGetCapabilities());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -178,7 +178,7 @@
             handler.reset(new MgOpDescribeSchema());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -190,7 +190,7 @@
             handler.reset(new MgOpDescribeSchemaAsXml());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -202,7 +202,7 @@
             handler.reset(new MgOpGetSchemas());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -214,7 +214,7 @@
             handler.reset(new MgOpGetClasses());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -226,7 +226,7 @@
             handler.reset(new MgOpGetClassDefinition());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -238,7 +238,7 @@
             handler.reset(new MgOpSelectFeatures());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -250,7 +250,7 @@
             handler.reset(new MgOpSelectFeatures());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -262,7 +262,7 @@
             handler.reset(new MgOpSelectFeaturesSpatial());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -274,7 +274,7 @@
             handler.reset(new MgOpExecuteSqlQuery());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -286,7 +286,7 @@
             handler.reset(new MgOpExecuteSqlQuery());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -298,7 +298,7 @@
             handler.reset(new MgOpExecuteSqlNonQuery());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -310,7 +310,7 @@
             handler.reset(new MgOpExecuteSqlNonQuery());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -322,7 +322,7 @@
             handler.reset(new MgOpGetSpatialContexts());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -334,7 +334,7 @@
             handler.reset(new MgOpUpdateFeatures());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -346,7 +346,7 @@
             handler.reset(new MgOpUpdateFeaturesWithTransaction());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -358,7 +358,7 @@
             handler.reset(new MgOpInsertFeatures());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -370,7 +370,7 @@
             handler.reset(new MgOpInsertFeaturesBatched());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -382,7 +382,7 @@
             handler.reset(new MgOpUpdateMatchingFeatures());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -394,7 +394,7 @@
             handler.reset(new MgOpDeleteFeatures());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -406,7 +406,7 @@
             handler.reset(new MgOpGetFeatures());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -418,7 +418,7 @@
             handler.reset(new MgOpCloseFeatureReader());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -430,7 +430,7 @@
             handler.reset(new MgOpGetSqlRows());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -442,7 +442,7 @@
             handler.reset(new MgOpCloseSqlReader());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -454,7 +454,7 @@
             handler.reset(new MgOpGetDataRows());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -466,7 +466,7 @@
             handler.reset(new MgOpCloseDataReader());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -478,7 +478,7 @@
             handler.reset(new MgOpGetLongTransactions());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -490,7 +490,7 @@
             handler.reset(new MgOpSetLongTransaction());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -502,7 +502,7 @@
             handler.reset(new MgOpGetRaster());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -514,7 +514,7 @@
             handler.reset(new MgOpSchemaToXml());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -526,7 +526,7 @@
             handler.reset(new MgOpXmlToSchema());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -538,7 +538,7 @@
             handler.reset(new MgOpCreateFeatureSource());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -550,7 +550,7 @@
             handler.reset(new MgOpGetIdentityProperties());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -563,7 +563,7 @@
             handler.reset(new MgOpDescribeWfsFeatureType());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -576,7 +576,7 @@
             handler.reset(new MgOpGetWfsFeature());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -588,7 +588,7 @@
             handler.reset(new MgOpGetWfsReader());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -600,7 +600,7 @@
             handler.reset(new MgOpGetWfsFeatureTotal());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -612,7 +612,7 @@
             handler.reset(new MgOpEnumerateDataStores());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -625,7 +625,7 @@
             handler.reset(new MgOpGetSchemaMapping());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -638,7 +638,7 @@
             handler.reset(new MgOpGetFdoCacheInfo());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -650,7 +650,7 @@
             handler.reset(new MgOpGetClassDefinition());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -662,7 +662,7 @@
             handler.reset(new MgOpApplySchema());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -674,7 +674,7 @@
             handler.reset(new MgOpBeginTransaction());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -686,7 +686,7 @@
             handler.reset(new MgOpCommitTransaction());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -698,7 +698,7 @@
             handler.reset(new MgOpRollbackTransaction());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -710,7 +710,7 @@
             handler.reset(new MgOpAddSavePoint());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -722,7 +722,7 @@
             handler.reset(new MgOpRollbackSavePoint());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -734,13 +734,13 @@
             handler.reset(new MgOpReleaseSavePoint());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
 
     default:
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgFeatureOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureStringFunctions.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureStringFunctions.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/FeatureStringFunctions.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -80,7 +80,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgFeatureDistribution.Initialize", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgFeatureDistribution.Initialize", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     m_reader = SAFE_ADDREF(reader);
@@ -139,7 +139,7 @@
         }
         default:
         {
-            throw new MgInvalidPropertyTypeException(
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, 
                 L"MgFeatureStringFunctions.CheckSupportedPropertyType", __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
@@ -161,7 +161,7 @@
             }
             default:
             {
-                throw new MgInvalidPropertyTypeException(
+                throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, 
                     L"MgFeatureStringFunctions.GetValue", __LINE__, __WFILE__, NULL, L"", NULL);
             }
         }
@@ -196,7 +196,7 @@
 
                 MgStringCollection arguments;
                 arguments.Add(message);
-                throw new MgFeatureServiceException(
+                throw new MgException(MgExceptionCodes::MgFeatureServiceException, 
                     L"MgServerSelectFeatures.ExecuteOperation", __LINE__, __WFILE__, &arguments, L"", NULL);
             }
         }
@@ -218,7 +218,7 @@
         }
         default:
         {
-            throw new MgInvalidPropertyTypeException(
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, 
                 L"MgFeatureStringFunctions.GetReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/JoinFeatureReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/JoinFeatureReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/JoinFeatureReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -71,7 +71,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetBoolean",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetBoolean",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -101,7 +101,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetByte",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetByte",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -129,7 +129,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetDateTime",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetDateTime",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -157,7 +157,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetDouble",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetDouble",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -185,7 +185,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetInt16",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetInt16",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -213,7 +213,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetInt32",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetInt32",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -241,7 +241,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetInt64",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetInt64",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -269,7 +269,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetSingle",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetSingle",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -297,7 +297,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -325,7 +325,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -384,7 +384,7 @@
             MgStringCollection arguments;
             arguments.Add(propertyName);
 
-            throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -417,7 +417,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetRaster",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetRaster",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -482,7 +482,7 @@
             MgStringCollection arguments;
             arguments.Add(propertyName);
 
-            throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -517,7 +517,7 @@
             MgStringCollection arguments;
             arguments.Add(propertyName);
 
-            throw new MgNullPropertyValueException(L"MgJoinFeatureReader.GetFeatureObject",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgJoinFeatureReader.GetFeatureObject",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -1041,7 +1041,7 @@
             // TODO: Fdo has some inconsistency with Decimal, therefore MapGuide
             // TODO: does not support it. Making this type as invalid argument
             // TODO: until we determine what to do with it???
-            //throw new MgInvalidArgumentException(L"MgServerGetFeatures.GetMgPropertyType", __LINE__, __WFILE__, NULL, L"", NULL);
+            //throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerGetFeatures.GetMgPropertyType", __LINE__, __WFILE__, NULL, L"", NULL);
             // propDef = new MgPropertyDefinition(name, ptDecimal);
             // break;
         //}
@@ -1108,7 +1108,7 @@
             arguments.Add(L"1");
             arguments.Add(buffer);
 
-            throw new MgInvalidArgumentException(L"MgJoinFeatureReader.GetFdoDataType",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgJoinFeatureReader.GetFdoDataType",
                 __LINE__, __WFILE__, &arguments, L"MgInvalidPropertyType", NULL);
         }
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpAddSavePoint.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpAddSavePoint.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpAddSavePoint.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpAddSavePoint.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpAddSavePoint.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
     

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpApplySchema.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpApplySchema.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpApplySchema.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -94,7 +94,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpApplySchema.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpApplySchema.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpBeginTransaction.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpBeginTransaction.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpBeginTransaction.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -89,7 +89,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpBeginTransaction.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpBeginTransaction.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseDataReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseDataReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseDataReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -90,7 +90,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpCloseDataReader.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpCloseDataReader.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseFeatureReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseFeatureReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseFeatureReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -90,7 +90,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpCloseFeatureReader.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpCloseFeatureReader.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseSqlReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseSqlReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCloseSqlReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -90,7 +90,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpCloseSqlReader.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpCloseSqlReader.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCommitTransaction.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCommitTransaction.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCommitTransaction.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -88,7 +88,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpCommitTransaction.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpCommitTransaction.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCreateFeatureSource.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCreateFeatureSource.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpCreateFeatureSource.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -94,7 +94,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpCreateFeatureSource.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpCreateFeatureSource.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDeleteFeatures.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDeleteFeatures.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDeleteFeatures.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -128,7 +128,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDeleteFeatures.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDeleteFeatures.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeSchema.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeSchema.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeSchema.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -100,7 +100,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDescribeSchema.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDescribeSchema.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeSchemaAsXml.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeSchemaAsXml.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeSchemaAsXml.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -100,7 +100,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDescribeSchemaAsXml.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDescribeSchemaAsXml.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeWfsFeatureType.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeWfsFeatureType.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpDescribeWfsFeatureType.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -130,7 +130,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDescribeWfsFeatureType.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDescribeWfsFeatureType.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpEnumerateDataStores.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpEnumerateDataStores.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpEnumerateDataStores.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -96,7 +96,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateDataStores.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateDataStores.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpExecuteSqlNonQuery.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpExecuteSqlNonQuery.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpExecuteSqlNonQuery.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -140,7 +140,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpExecuteSqlNonQuery.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpExecuteSqlNonQuery.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpExecuteSqlQuery.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpExecuteSqlQuery.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpExecuteSqlQuery.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -188,7 +188,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpExecuteSqlQuery.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpExecuteSqlQuery.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetCapabilities.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetCapabilities.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetCapabilities.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -114,7 +114,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetCapabilities.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetCapabilities.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetClassDefinition.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetClassDefinition.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetClassDefinition.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -143,7 +143,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetClassDefinition.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetClassDefinition.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetClasses.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetClasses.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetClasses.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetClasses.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetClasses.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetConnectionPropertyValues.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetConnectionPropertyValues.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetConnectionPropertyValues.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -102,7 +102,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetConnectionPropertyValues.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetConnectionPropertyValues.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetDataRows.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetDataRows.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetDataRows.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -89,7 +89,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetDataRows.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetDataRows.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFdoCacheInfo.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFdoCacheInfo.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFdoCacheInfo.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -86,7 +86,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetFdoCacheInfo.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetFdoCacheInfo.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFeatureProviders.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFeatureProviders.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFeatureProviders.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -85,7 +85,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetFeatureProviders.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetFeatureProviders.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFeatures.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFeatures.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetFeatures.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -89,7 +89,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetFeatures.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetFeatures.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetIdentityProperties.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetIdentityProperties.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetIdentityProperties.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -102,7 +102,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetIdentityProperties.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetIdentityProperties.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetLongTransactions.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetLongTransactions.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetLongTransactions.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetLongTransactions.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetLongTransactions.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetRaster.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetRaster.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetRaster.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -102,7 +102,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetRaster.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetRaster.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSchemaMapping.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSchemaMapping.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSchemaMapping.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -96,7 +96,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetSchemaMapping.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetSchemaMapping.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSchemas.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSchemas.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSchemas.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -89,7 +89,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetSchemas.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetSchemas.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSpatialContexts.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSpatialContexts.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSpatialContexts.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetSpatialContexts.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetSpatialContexts.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSqlRows.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSqlRows.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetSqlRows.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -89,7 +89,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetSqlRows.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetSqlRows.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsFeature.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsFeature.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsFeature.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -198,7 +198,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetWfsFeature.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetWfsFeature.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsFeatureTotal.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsFeatureTotal.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsFeatureTotal.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -81,7 +81,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetWfsReader.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetWfsReader.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpGetWfsReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -118,7 +118,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetWfsReader.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetWfsReader.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpInsertFeatures.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpInsertFeatures.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpInsertFeatures.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -128,7 +128,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpInsertFeatures.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpInsertFeatures.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpInsertFeaturesBatched.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpInsertFeaturesBatched.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpInsertFeaturesBatched.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -128,7 +128,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpInsertFeaturesBatched.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpInsertFeaturesBatched.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpReleaseSavePoint.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpReleaseSavePoint.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpReleaseSavePoint.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpReleaseSavePoint.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpReleaseSavePoint.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpRollbackSavePoint.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpRollbackSavePoint.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpRollbackSavePoint.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRollbackSavePoint.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRollbackSavePoint.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpRollbackTransaction.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpRollbackTransaction.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpRollbackTransaction.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -88,7 +88,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRollbackTransaction.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRollbackTransaction.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSchemaToXml.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSchemaToXml.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSchemaToXml.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -89,7 +89,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSchemaToXml.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSchemaToXml.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSelectFeatures.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSelectFeatures.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSelectFeatures.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -132,7 +132,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSelectFeatures.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSelectFeatures.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSelectFeaturesSpatial.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSelectFeaturesSpatial.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSelectFeaturesSpatial.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -100,7 +100,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSelectFeaturesSpatial.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSelectFeaturesSpatial.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSetLongTransaction.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSetLongTransaction.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpSetLongTransaction.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSetLongTransaction.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSetLongTransaction.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpTestConnection.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpTestConnection.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpTestConnection.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -97,7 +97,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpTestConnection.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpTestConnection.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpTestFeatureSourceConnection.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpTestFeatureSourceConnection.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpTestFeatureSourceConnection.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -90,7 +90,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpTestFeatureSourceConnection.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpTestFeatureSourceConnection.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateFeatures.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateFeatures.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateFeatures.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -123,7 +123,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpUpdateFeatures.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpUpdateFeatures.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateFeaturesWithTransaction.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateFeaturesWithTransaction.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateFeaturesWithTransaction.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -110,7 +110,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpUpdateFeaturesWithTransaction.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpUpdateFeaturesWithTransaction.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateMatchingFeatures.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateMatchingFeatures.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpUpdateMatchingFeatures.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -136,7 +136,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpUpdateMatchingFeatures.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpUpdateMatchingFeatures.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpXmlToSchema.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpXmlToSchema.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/OpXmlToSchema.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -90,7 +90,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSchemaToXml.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSchemaToXml.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/SelectAggregateCommand.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/SelectAggregateCommand.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/SelectAggregateCommand.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -41,7 +41,7 @@
     }
     else
     {
-        throw new MgConnectionFailedException(L"MgSelectAggregateCommand.MgSelectAggregateCommand", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgSelectAggregateCommand.MgSelectAggregateCommand", __LINE__, __WFILE__, NULL, L"", NULL);
     }
     // Create FdoISelectAggregates command
     FdoPtr<FdoIConnection> fdoConn = m_connection->GetConnection();

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/SelectCommand.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/SelectCommand.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/SelectCommand.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -42,7 +42,7 @@
     }
     else
     {
-        throw new MgConnectionFailedException(L"MgSelectCommand.MgSelectCommand", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgSelectCommand.MgSelectCommand", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     FdoPtr<FdoIConnection> fdoConn = m_connection->GetConnection();
@@ -99,7 +99,7 @@
     // This operation is not supported by FdoISelect
     // m_command->SetDistinct(value);
 
-    // throw new MgInvalidOperationException(L"MgSelectCommand.SetDistinct", __LINE__, __WFILE__, NULL, L"", NULL);
+    // throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgSelectCommand.SetDistinct", __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 bool MgSelectCommand::GetDistinct()
@@ -108,7 +108,7 @@
     // This operation is not supported by FdoISelect
     // return m_command->GetDistinct();
 
-    // throw new MgInvalidOperationException(L"MgSelectCommand.GetDistinct", __LINE__, __WFILE__, NULL, L"", NULL);
+    // throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgSelectCommand.GetDistinct", __LINE__, __WFILE__, NULL, L"", NULL);
 
     return false;
 }
@@ -170,7 +170,7 @@
     // This operation is not supported by FdoISelect
     // return m_command->GetGrouping();
 
-    // throw new MgInvalidOperationException(L"MgSelectCommand.GetGrouping", __LINE__, __WFILE__, NULL, L"", NULL);
+    // throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgSelectCommand.GetGrouping", __LINE__, __WFILE__, NULL, L"", NULL);
     return NULL;
 }
 
@@ -180,7 +180,7 @@
     // This operation is not supported by FdoISelect
     // m_command->SetGroupingFilter(filter);
 
-    // throw new MgInvalidOperationException(L"MgSelectCommand.SetGroupingFilter", __LINE__, __WFILE__, NULL, L"", NULL);
+    // throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgSelectCommand.SetGroupingFilter", __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 FdoFilter* MgSelectCommand::GetGroupingFilter()
@@ -189,7 +189,7 @@
     // This operation is not supported by FdoISelect
     // return m_command->GetGroupingFilter(filter);
 
-    // throw new MgInvalidOperationException(L"MgSelectCommand.GetGroupingFilter", __LINE__, __WFILE__, NULL, L"", NULL);
+    // throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgSelectCommand.GetGroupingFilter", __LINE__, __WFILE__, NULL, L"", NULL);
     return NULL;
 }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerApplySchema.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerApplySchema.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerApplySchema.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -55,7 +55,7 @@
         {
             // TODO: specify which argument and message, once we have the mechanism
             STRING message = MgServerFeatureUtil::GetMessage(L"MgCommandNotSupported");
-            throw new MgInvalidOperationException(L"MgServerApplySchema.ApplySchema", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerApplySchema.ApplySchema", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         FdoPtr<FdoIDescribeSchema> fdoDecribeSchemaCmd = (FdoIDescribeSchema*) fdoConn->CreateCommand(FdoCommandType_DescribeSchema);

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerCreateFeatureSource.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerCreateFeatureSource.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerCreateFeatureSource.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -56,7 +56,7 @@
             creator->CreateFeatureSource(false, false);
         }
         else
-            throw new MgInvalidArgumentException(L"MgServerCreateFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerCreateFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     MG_FEATURE_SERVICE_CHECK_CONNECTION_CATCH_AND_THROW(resource, L"MgServerCreateFeatureSource.CreateFeatureSource")
@@ -89,13 +89,13 @@
     //
     Ptr<MgFeatureSchema> schema = m_params->GetFeatureSchema();
     if(schema == NULL)
-        throw new MgInvalidArgumentException(L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"MgMissingSchema", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"MgMissingSchema", NULL);
 
     if (bCheckFeatureClass)
     {
         Ptr<MgClassDefinitionCollection> classes = schema->GetClasses();
         if(classes == NULL || classes->GetCount() == 0)
-            throw new MgInvalidArgumentException(L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"MgMissingClassDef", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"MgMissingClassDef", NULL);
 
         for(INT32 ci = 0; ci < classes->GetCount(); ci++)
         {
@@ -102,7 +102,7 @@
             Ptr<MgClassDefinition> classDef = classes->GetItem(ci);
             Ptr<MgPropertyDefinitionCollection> idProps = classDef->GetIdentityProperties();
             if(idProps == NULL || idProps->GetCount() == 0)
-                throw new MgInvalidArgumentException(L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"MgClassWOIdentity", NULL);
+                throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"MgClassWOIdentity", NULL);
         }
     }
 
@@ -110,7 +110,7 @@
     {
         // A coordinate system must be defined
         if(m_params->GetCoordinateSystemWkt().empty())
-            throw new MgInvalidArgumentException(L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"MgMissingSrs", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"MgMissingSrs", NULL);
     }
 
     // Connect to provider
@@ -120,7 +120,7 @@
     {
         if(NULL == msfc.p)
         {
-            throw new MgConnectionFailedException(L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // The reference to the FDO connection from the MgServerFeatureConnection object must be cleaned up before the parent object
@@ -128,7 +128,7 @@
         FdoPtr<FdoIConnection> conn =  msfc->GetConnection();
         if (conn == NULL)
         {
-            throw new MgConnectionFailedException(L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerCreateFileFeatureSource.CreateFeatureSource", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         CreateDataStore(conn);

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerDataReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerDataReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerDataReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -186,7 +186,7 @@
             FdoDataType dataType = m_dataReader->GetDataType(propertyName.c_str());
             if (FdoDataType(-1) == dataType)
             {
-                throw new MgInvalidPropertyTypeException(L"MgServerDataReader.GetPropertyType",
+                throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgServerDataReader.GetPropertyType",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
 
@@ -200,7 +200,7 @@
         }
         default:
         {
-            throw new MgInvalidPropertyTypeException(L"MgServerDataReader.GetPropertyType",
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgServerDataReader.GetPropertyType",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
@@ -239,7 +239,7 @@
             FdoDataType dataType = m_dataReader->GetDataType(index);
             if (FdoDataType(-1) == dataType)
             {
-                throw new MgInvalidPropertyTypeException(L"MgServerDataReader.GetPropertyType",
+                throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgServerDataReader.GetPropertyType",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
 
@@ -253,7 +253,7 @@
         }
         default:
         {
-            throw new MgInvalidPropertyTypeException(L"MgServerDataReader.GetPropertyType",
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgServerDataReader.GetPropertyType",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
@@ -325,7 +325,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetBoolean",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetBoolean",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -361,7 +361,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetBoolean",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetBoolean",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -394,7 +394,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetByte",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetByte",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -430,7 +430,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetByte",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetByte",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -464,7 +464,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetDateTime",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetDateTime",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -502,7 +502,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetDateTime",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetDateTime",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -537,7 +537,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetSingle",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetSingle",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -573,7 +573,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetSingle",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetSingle",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -606,7 +606,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetDouble",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetDouble",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -642,7 +642,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetDouble",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetDouble",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -675,7 +675,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetInt16",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetInt16",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -711,7 +711,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetInt16",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetInt16",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -744,7 +744,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetInt32",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetInt32",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -780,7 +780,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetInt32",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetInt32",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -815,7 +815,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetInt64",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetInt64",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -853,7 +853,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetInt64",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetInt64",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -886,7 +886,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -927,7 +927,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -965,7 +965,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetBLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetBLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1001,7 +1001,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetBLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetBLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1034,7 +1034,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetCLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetCLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1070,7 +1070,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetCLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetCLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1119,7 +1119,7 @@
             MgStringCollection arguments;
             arguments.Add(propertyName);
 
-            throw new MgNullPropertyValueException(L"MgServerDataReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -1170,7 +1170,7 @@
             MgStringCollection arguments;
             arguments.Add(buffer);
 
-            throw new MgNullPropertyValueException(L"MgServerDataReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -1201,7 +1201,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetRaster",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetRaster",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1263,7 +1263,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetRaster",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetRaster",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1315,7 +1315,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1356,7 +1356,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1496,7 +1496,7 @@
 
 void MgServerDataReader::Deserialize(MgStream* stream)
 {
-    throw new MgInvalidOperationException(L"MgServerDataReader.Deserialize",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerDataReader.Deserialize",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
@@ -1508,55 +1508,55 @@
 /// <returns>MgByteReader holding XML.</returns>
 MgByteReader* MgServerDataReader::ToXml()
 {
-    throw new MgInvalidOperationException(L"MgServerDataReader.ToXml",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerDataReader.ToXml",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 string MgServerDataReader::GetResponseElementName()
 {
-    throw new MgInvalidOperationException(L"MgServerDataReader.GetResponseElementName",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerDataReader.GetResponseElementName",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 string MgServerDataReader::GetBodyElementName()
 {
-    throw new MgInvalidOperationException(L"MgServerDataReader.GetBodyElementName",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerDataReader.GetBodyElementName",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerDataReader::ResponseStartUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerDataReader.ResponseStartUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerDataReader.ResponseStartUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerDataReader::ResponseEndUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerDataReader.ResponseEndUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerDataReader.ResponseEndUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerDataReader::BodyStartUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerDataReader.BodyStartUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerDataReader.BodyStartUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerDataReader::BodyEndUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerDataReader.BodyEndUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerDataReader.BodyEndUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerDataReader::HeaderToStringUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerDataReader.HeaderToStringUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerDataReader.HeaderToStringUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerDataReader::CurrentToStringUtf8(string& str, MgTransform* xform)
 {
-    throw new MgInvalidOperationException(L"MgServerDataReader.CurrentToStringUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerDataReader.CurrentToStringUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
@@ -1576,7 +1576,7 @@
     {
         // TODO: specify which argument and message, once we have the mechanism
         STRING message = MgServerFeatureUtil::GetMessage(L"MgMissingRasterProperty");
-        throw new MgInvalidOperationException(L"MgServerDataReader.GetRaster",
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerDataReader.GetRaster",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
     byteReader = MgServerFeatureUtil::GetRaster(m_dataReader, rasterPropName, xSize, ySize);
@@ -1627,7 +1627,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1667,7 +1667,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerDataReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerDataReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerDescribeSchema.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerDescribeSchema.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerDescribeSchema.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -201,7 +201,7 @@
                     }
                     else
                     {
-                        throw new MgConnectionFailedException(L"MgServerDescribeSchema.DescribeFdoSchema", __LINE__, __WFILE__, NULL, L"", NULL);
+                        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerDescribeSchema.DescribeFdoSchema", __LINE__, __WFILE__, NULL, L"", NULL);
                     }
                 }
 
@@ -211,7 +211,7 @@
     }
     else
     {
-        throw new MgConnectionFailedException(L"MgServerDescribeSchema.DescribeFdoSchema", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerDescribeSchema.DescribeFdoSchema", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     MG_FEATURE_SERVICE_CHECK_CONNECTION_CATCH_AND_THROW(resource, L"MgServerDescribeSchema.DescribeFdoSchema")
@@ -548,7 +548,7 @@
                         }
                         else
                         {
-                            throw new MgConnectionFailedException(L"MgServerDescribeSchema.DescribeSchema", __LINE__, __WFILE__, NULL, L"", NULL);
+                            throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerDescribeSchema.DescribeSchema", __LINE__, __WFILE__, NULL, L"", NULL);
                         }
 
                     }  // end if (NULL != secFeatureSource)
@@ -897,7 +897,7 @@
         }
         else
         {
-            throw new MgConnectionFailedException(L"MgServerDescribeSchema.GetSchemas",
+            throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerDescribeSchema.GetSchemas",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -1000,7 +1000,7 @@
         }
         else
         {
-            throw new MgConnectionFailedException(L"MgServerDescribeSchema.GetClasses",
+            throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerDescribeSchema.GetClasses",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -1028,7 +1028,7 @@
 
     if (className.empty())
     {
-        throw new MgClassNotFoundException(
+        throw new MgException(MgExceptionCodes::MgClassNotFoundException, 
             L"MgServerDescribeSchema.GetClassDefinition",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1055,7 +1055,7 @@
 
         if (NULL == classDefinition.p)
         {
-            throw new MgClassNotFoundException(
+            throw new MgException(MgExceptionCodes::MgClassNotFoundException, 
                 L"MgServerDescribeSchema.GetClassDefinition",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1087,7 +1087,7 @@
 
     if (NULL == classNames || classNames->GetCount() == 0)
     {
-        throw new MgClassNotFoundException(
+        throw new MgException(MgExceptionCodes::MgClassNotFoundException, 
             L"MgServerDescribeSchema.GetIdentityProperties",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerEnumerateDataStores.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerEnumerateDataStores.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerEnumerateDataStores.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -86,7 +86,7 @@
     }
     else
     {
-        throw new MgConnectionFailedException(L"MgServerEnumerateDataStores::EnumerateDataStores()", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerEnumerateDataStores::EnumerateDataStores()", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     MG_FEATURE_SERVICE_CATCH_AND_THROW(L"MgServerEnumerateDataStores.EnumerateDataStores")

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFdoFeatureReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFdoFeatureReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFdoFeatureReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -120,7 +120,7 @@
             MgStringCollection arguments;
             arguments.Add(propertyName);
 
-            throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -162,7 +162,7 @@
             MgStringCollection arguments;
             arguments.Add(buffer);
 
-            throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -194,7 +194,7 @@
             MgStringCollection arguments;
             arguments.Add(propertyName);
 
-            throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -229,7 +229,7 @@
             MgStringCollection arguments;
             arguments.Add(buffer);
 
-            throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -255,7 +255,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetFeatureObject",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetFeatureObject",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -285,7 +285,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetFeatureObject",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetFeatureObject",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -312,7 +312,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetBoolean",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetBoolean",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -342,7 +342,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetBoolean",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetBoolean",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -369,7 +369,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetByte",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetByte",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -399,7 +399,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetByte",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetByte",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -426,7 +426,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetDateTime",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetDateTime",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -456,7 +456,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetDateTime",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetDateTime",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -483,7 +483,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetDouble",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetDouble",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -513,7 +513,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetDouble",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetDouble",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -540,7 +540,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetInt16",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetInt16",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -570,7 +570,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetInt16",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetInt16",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -597,7 +597,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetInt32",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetInt32",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -627,7 +627,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetInt32",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetInt32",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -654,7 +654,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetInt64",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetInt64",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -684,7 +684,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetInt64",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetInt64",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -711,7 +711,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetSingle",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetSingle",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -741,7 +741,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetSingle",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetSingle",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -768,7 +768,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -798,7 +798,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -825,7 +825,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -856,7 +856,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -885,7 +885,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetLOBStreamReader",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetLOBStreamReader",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -918,7 +918,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetLOBStreamReader",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetLOBStreamReader",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -978,7 +978,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetRaster",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetRaster",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1012,7 +1012,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetRaster",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetRaster",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -294,7 +294,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetBoolean",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetBoolean",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -329,7 +329,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetByte",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetByte",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -364,7 +364,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetDateTime",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetDateTime",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -401,7 +401,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetSingle",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetSingle",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -436,7 +436,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetDouble",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetDouble",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -471,7 +471,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetInt16",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetInt16",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -506,7 +506,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetInt32",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetInt32",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -543,7 +543,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetInt64",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetInt64",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -578,7 +578,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -618,7 +618,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetBLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetBLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -664,7 +664,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetCLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetCLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -711,7 +711,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFdoFeatureReader.GetFeatureObject",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFdoFeatureReader.GetFeatureObject",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -767,7 +767,7 @@
             MgStringCollection arguments;
             arguments.Add(propertyName);
 
-            throw new MgNullPropertyValueException(L"MgServerFeatureReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFeatureReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -805,7 +805,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFeatureReader.GetRaster",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFeatureReader.GetRaster",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -916,7 +916,7 @@
 
 void MgServerFeatureReader::Deserialize(MgStream* stream)
 {
-    throw new MgInvalidOperationException(L"MgServerFeatureReader.Deserialize",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureReader.Deserialize",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
@@ -928,55 +928,55 @@
 /// <returns>MgByteReader holding XML.</returns>
 MgByteReader* MgServerFeatureReader::ToXml()
 {
-    throw new MgInvalidOperationException(L"MgServerFeatureReader.ToXml",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureReader.ToXml",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 string MgServerFeatureReader::GetResponseElementName()
 {
-    throw new MgInvalidOperationException(L"MgServerFeatureReader.GetResponseElementName",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureReader.GetResponseElementName",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 string MgServerFeatureReader::GetBodyElementName()
 {
-    throw new MgInvalidOperationException(L"MgServerFeatureReader.GetBodyElementName",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureReader.GetBodyElementName",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerFeatureReader::ResponseStartUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerFeatureReader.ResponseStartUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureReader.ResponseStartUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerFeatureReader::ResponseEndUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerFeatureReader.ResponseEndUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureReader.ResponseEndUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerFeatureReader::BodyStartUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerFeatureReader.BodyStartUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureReader.BodyStartUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerFeatureReader::BodyEndUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerFeatureReader.BodyEndUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureReader.BodyEndUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerFeatureReader::HeaderToStringUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerFeatureReader.HeaderToStringUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureReader.HeaderToStringUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerFeatureReader::CurrentToStringUtf8(string& str, MgTransform* xform)
 {
-    throw new MgInvalidOperationException(L"MgServerFeatureReader.CurrentToStringUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureReader.CurrentToStringUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
@@ -1056,7 +1056,7 @@
             MgStringCollection arguments;
             arguments.Add(propertyName);
 
-            throw new MgNullPropertyValueException(L"MgServerFeatureReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFeatureReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -1088,7 +1088,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerFeatureReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerFeatureReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1244,7 +1244,7 @@
     {
         // TODO: specify which argument and message, once we have the mechanism
         STRING message = MgServerFeatureUtil::GetMessage(L"MgMissingRasterProperty");
-        throw new MgInvalidOperationException(L"MgServerFeatureReader.GetRaster", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureReader.GetRaster", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     // There can be more than one Raster property

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -282,7 +282,7 @@
         userInfo->GetApiVersion() != MG_API_VERSION(2,0,0) &&
         userInfo->GetApiVersion() != MG_API_VERSION(4,0,0)) //This is 2.0.0 with optional clean JSON output
     {
-        throw new MgInvalidOperationVersionException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
             L"MgServerFeatureService.GetCapabilities", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -684,7 +684,7 @@
             MgStringProperty* sp = static_cast<MgStringProperty*>(prop.p);
             MgStringCollection args;
             args.Add(sp->GetValue());
-            throw new MgFdoException(L"MgServerFeatureService.InsertFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
+            throw new MgException(MgExceptionCodes::MgFdoException, L"MgServerFeatureService.InsertFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
         }
         else if (prop->GetPropertyType() == MgPropertyType::Feature) //Insert result
         {
@@ -722,7 +722,7 @@
             MgStringProperty* sp = static_cast<MgStringProperty*>(prop.p);
             MgStringCollection args;
             args.Add(sp->GetValue());
-            throw new MgFdoException(L"MgServerFeatureService.InsertFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
+            throw new MgException(MgExceptionCodes::MgFdoException, L"MgServerFeatureService.InsertFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
         }
         else if (prop->GetPropertyType() == MgPropertyType::Feature) //Insert result
         {
@@ -759,7 +759,7 @@
             MgStringProperty* sp = static_cast<MgStringProperty*>(prop.p);
             MgStringCollection args;
             args.Add(sp->GetValue());
-            throw new MgFdoException(L"MgServerFeatureService.InsertFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
+            throw new MgException(MgExceptionCodes::MgFdoException, L"MgServerFeatureService.InsertFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
         }
         else if (prop->GetPropertyType() == MgPropertyType::Feature) //Insert result
         {
@@ -797,7 +797,7 @@
             MgStringProperty* sp = static_cast<MgStringProperty*>(prop.p);
             MgStringCollection args;
             args.Add(sp->GetValue());
-            throw new MgFdoException(L"MgServerFeatureService.InsertFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
+            throw new MgException(MgExceptionCodes::MgFdoException, L"MgServerFeatureService.InsertFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
         }
         else if (prop->GetPropertyType() == MgPropertyType::Feature) //Insert result
         {
@@ -835,7 +835,7 @@
             MgStringProperty* sp = static_cast<MgStringProperty*>(prop.p);
             MgStringCollection args;
             args.Add(sp->GetValue());
-            throw new MgFdoException(L"MgServerFeatureService.UpdateMatchingFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
+            throw new MgException(MgExceptionCodes::MgFdoException, L"MgServerFeatureService.UpdateMatchingFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
         }
         else if (prop->GetPropertyType() == MgPropertyType::Int32) //Update result
         {
@@ -874,7 +874,7 @@
             MgStringProperty* sp = static_cast<MgStringProperty*>(prop.p);
             MgStringCollection args;
             args.Add(sp->GetValue());
-            throw new MgFdoException(L"MgServerFeatureService.UpdateMatchingFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
+            throw new MgException(MgExceptionCodes::MgFdoException, L"MgServerFeatureService.UpdateMatchingFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
         }
         else if (prop->GetPropertyType() == MgPropertyType::Int32) //Update result
         {
@@ -911,7 +911,7 @@
             MgStringProperty* sp = static_cast<MgStringProperty*>(prop.p);
             MgStringCollection args;
             args.Add(sp->GetValue());
-            throw new MgFdoException(L"MgServerFeatureService.DeleteFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
+            throw new MgException(MgExceptionCodes::MgFdoException, L"MgServerFeatureService.DeleteFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
         }
         else if (prop->GetPropertyType() == MgPropertyType::Int32) //Delete result
         {
@@ -949,7 +949,7 @@
             MgStringProperty* sp = static_cast<MgStringProperty*>(prop.p);
             MgStringCollection args;
             args.Add(sp->GetValue());
-            throw new MgFdoException(L"MgServerFeatureService.DeleteFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
+            throw new MgException(MgExceptionCodes::MgFdoException, L"MgServerFeatureService.DeleteFeatures", __LINE__, __WFILE__, &args, L"MgFormatInnerExceptionMessage", NULL);
         }
         else if (prop->GetPropertyType() == MgPropertyType::Int32) //Delete result
         {
@@ -990,7 +990,7 @@
                                                            CREFSTRING className,
                                                            MgFeatureQueryOptions* options)
 {
-    throw new MgNotImplementedException(
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, 
         L"MgServerFeatureService::GetLockedFeatures",
         __LINE__, __WFILE__, NULL, L"", NULL);
 
@@ -1371,7 +1371,7 @@
     CHECKARGUMENTNULL(featureSourceId, L"MgServerFeatureService.SetLongTransaction");
 
     if (featureSourceId->GetResourceType() != MgResourceType::FeatureSource)
-        throw new MgInvalidResourceTypeException(L"MgServerFeatureService.SetLongTransaction", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, L"MgServerFeatureService.SetLongTransaction", __LINE__, __WFILE__, NULL, L"", NULL);
 
     MG_FEATURE_SERVICE_TRY()
 
@@ -1382,7 +1382,7 @@
         sessionId = userInfo->GetMgSessionId();
 
     if (sessionId.empty())
-        throw new MgSessionNotFoundException(L"MgServerFeatureService.SetLongTransaction", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgSessionNotFoundException, L"MgServerFeatureService.SetLongTransaction", __LINE__, __WFILE__, NULL, L"", NULL);
 
     // set the name in the manager
     MgLongTransactionManager::SetLongTransactionName(sessionId, featureSourceId, longTransactionName);
@@ -1584,7 +1584,7 @@
                 qualifiedName += currClassName;
                 MgStringCollection args;
                 args.Add(qualifiedName);
-                throw new MgObjectNotFoundException(L"DescribeWfsFeatureType",
+                throw new MgException(MgExceptionCodes::MgObjectNotFoundException, L"DescribeWfsFeatureType",
                     __LINE__, __WFILE__, NULL, L"MgNoNameForObject", &args);
             }
             else
@@ -1689,7 +1689,7 @@
         arguments.Add(L"1");
         arguments.Add(featureReader);
 
-        throw new MgInvalidArgumentException(L"MgServerFeatureService.GetFeatures",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureService.GetFeatures",
             __LINE__, __WFILE__, &arguments, L"MgFeatureReaderIdNotFound", NULL);
     }
 
@@ -1855,7 +1855,7 @@
         arguments.Add(L"1");
         arguments.Add(reader);
 
-        throw new MgInvalidArgumentException(L"MgServerFeatureService.GetRaster",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureService.GetRaster",
             __LINE__, __WFILE__, &arguments, L"MgReaderIdNotFound", NULL);
     }
 
@@ -1886,7 +1886,7 @@
         arguments.Add(L"1");
         arguments.Add(sqlReader);
 
-        throw new MgInvalidArgumentException(L"MgServerFeatureService.GetSqlRows",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureService.GetSqlRows",
             __LINE__, __WFILE__, &arguments, L"MgSqlReaderIdNotFound", NULL);
     }
 
@@ -1964,7 +1964,7 @@
         arguments.Add(L"1");
         arguments.Add(dataReader);
 
-        throw new MgInvalidArgumentException(L"MgServerFeatureService.GetDataRows",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureService.GetDataRows",
              __LINE__, __WFILE__, &arguments, L"MgDataReaderIdNotFound", NULL);
     }
 
@@ -2215,7 +2215,7 @@
     }
     else
     {
-        throw new MgInvalidArgumentException(L"MgServerFeatureService.GetWfsFeature",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureService.GetWfsFeature",
         __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -2254,7 +2254,7 @@
     }
     else
     {
-        throw new MgInvalidArgumentException(L"MgServerFeatureService.GetWfsFeature",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureService.GetWfsFeature",
         __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureServiceExceptionDef.h
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureServiceExceptionDef.h	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureServiceExceptionDef.h	2020-10-21 14:38:32 UTC (rev 9747)
@@ -53,7 +53,8 @@
         }                                                                     \
                                                                               \
         FDO_SAFE_RELEASE(e);                                                  \
-        mgException = new MgFdoException(methodName, __LINE__, __WFILE__, NULL, messageId, &arguments, nativeErrorCode); \
+        mgException = new MgException(MgExceptionCodes::MgFdoException, methodName, __LINE__, __WFILE__, NULL, messageId, &arguments); \
+        mgException->SetNativeErrorCode(nativeErrorCode);                     \
                                                                               \
     MG_CATCH(methodName)                                                      \
 
@@ -85,7 +86,8 @@
         }                                                                     \
                                                                               \
         FDO_SAFE_RELEASE(e);                                                  \
-        mgException = new MgFdoException(methodName, __LINE__, __WFILE__, NULL, messageId, &arguments, nativeErrorCode); \
+        mgException = new MgException(MgExceptionCodes::MgFdoException, methodName, __LINE__, __WFILE__, NULL, messageId, &arguments); \
+        mgException->SetNativeErrorCode(nativeErrorCode);                     \
                                                                               \
     MG_CATCH(methodName)                                                      \
 
@@ -161,7 +163,8 @@
         }                                                                     \
                                                                               \
         FDO_SAFE_RELEASE(e);                                                  \
-        mgException = new MgFdoException(methodName, __LINE__, __WFILE__, NULL, messageId, &arguments, nativeErrorCode); \
+        mgException = new MgException(MgExceptionCodes::MgFdoException, methodName, __LINE__, __WFILE__, NULL, messageId, &arguments); \
+        mgException->SetNativeErrorCode(nativeErrorCode);                     \
                                                                               \
     MG_CATCH(methodName)                                                      \
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureTransaction.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureTransaction.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureTransaction.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -154,7 +154,7 @@
 
 void MgServerFeatureTransaction::Deserialize(MgStream* stream)
 {
-    throw new MgInvalidOperationException(L"MgServerFeatureTransaction.Deserialize",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureTransaction.Deserialize",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
@@ -189,12 +189,12 @@
         {
             // TODO: specify which argument and message, once we have the mechanism
             STRING message = MgServerFeatureUtil::GetMessage(L"MgTransactionNotSupported");
-            throw new MgInvalidOperationException(L"MgServerFeatureTransaction.Initialize", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerFeatureTransaction.Initialize", __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
     else
     {
-        throw new MgConnectionFailedException(L"MgServerFeatureTransaction::Initialize", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerFeatureTransaction::Initialize", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureTransactionPool.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureTransactionPool.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureTransactionPool.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -346,6 +346,6 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgServerFeatureTransactionPool.ValidateTimeout", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerFeatureTransactionPool.ValidateTimeout", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureUtil.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureUtil.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerFeatureUtil.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -207,7 +207,7 @@
 
         MgStringCollection arguments;
         arguments.Add(customFunction->GetName());
-        throw new MgFeatureServiceException(L"MgServerFeatureUtil.GetArguments", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerFeatureUtil.GetArguments", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     FdoString *arg0 = NULL, *arg1 = NULL, *arg2 = NULL, *arg3 = NULL;
@@ -293,7 +293,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgServerFeatureUtil.GetPropertyDefinition", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerFeatureUtil.GetPropertyDefinition", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     // Get the name of property
@@ -349,7 +349,7 @@
 
                     MgStringCollection arguments;
                     arguments.Add(message);
-                    throw new MgFeatureServiceException(L"MgServerFeatureUtil.ValidateCustomConstraints",
+                    throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerFeatureUtil.ValidateCustomConstraints",
                         __LINE__, __WFILE__, &arguments, L"", NULL);
                 }
                 break;
@@ -367,7 +367,7 @@
 
                     MgStringCollection arguments;
                     arguments.Add(message);
-                    throw new MgFeatureServiceException(L"MgServerFeatureUtil.ValidateCustomConstraints",
+                    throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerFeatureUtil.ValidateCustomConstraints",
                         __LINE__, __WFILE__, &arguments, L"", NULL);
                 }
                 break;
@@ -380,7 +380,7 @@
 {
     int cnt = (int)v.size();
     if (cnt <= 0)
-        throw new MgIndexOutOfRangeException(L"MgServerFeatureUtil.Minimum", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgIndexOutOfRangeException, L"MgServerFeatureUtil.Minimum", __LINE__, __WFILE__, NULL, L"", NULL);
     double min = v[0];
     for (int i = 1; i < cnt; ++i)
     {
@@ -395,7 +395,7 @@
 {
     int cnt = (int)v.size();
     if (cnt <= 0)
-        throw new MgIndexOutOfRangeException(L"MgServerFeatureUtil.Minimum", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgIndexOutOfRangeException, L"MgServerFeatureUtil.Minimum", __LINE__, __WFILE__, NULL, L"", NULL);
     INT64 min = v[0];
     for (int i = 1; i < cnt; ++i)
     {
@@ -410,7 +410,7 @@
 {
     int cnt = (int)v.size();
     if (cnt <= 0)
-        throw new MgIndexOutOfRangeException(L"MgServerFeatureUtil.Maximum", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgIndexOutOfRangeException, L"MgServerFeatureUtil.Maximum", __LINE__, __WFILE__, NULL, L"", NULL);
     double max = v[0];
     for (int i = 1; i < cnt; ++i)
     {
@@ -425,7 +425,7 @@
 {
     int cnt = (int)v.size();
     if (cnt <= 0)
-        throw new MgIndexOutOfRangeException(L"MgServerFeatureUtil.Maximum", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgIndexOutOfRangeException, L"MgServerFeatureUtil.Maximum", __LINE__, __WFILE__, NULL, L"", NULL);
     INT64 max = v[0];
     for (int i = 1; i < cnt; ++i)
     {
@@ -533,7 +533,7 @@
         arguments.Add(L"2");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(L"MgServerFeatureUtil.GetRaster",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureUtil.GetRaster",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
 
@@ -616,7 +616,7 @@
 
     if (source->GetCount() != target->GetCount())
     {
-        throw new MgInvalidArgumentException(L"MgServerFeatureUtil.UpdateParameterCollection",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureUtil.UpdateParameterCollection",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -1094,13 +1094,13 @@
         }
         case MgPropertyType::Feature:
         {
-            throw new MgInvalidPropertyTypeException(L"MgServerFeatureUtil.MgPropertyToFdoProperty",
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgServerFeatureUtil.MgPropertyToFdoProperty",
                 __LINE__, __WFILE__, NULL, L"", NULL);
             break;
         }
         case MgPropertyType::Raster:
         {
-            throw new MgInvalidPropertyTypeException(L"MgServerFeatureUtil.MgPropertyToFdoProperty",
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgServerFeatureUtil.MgPropertyToFdoProperty",
                 __LINE__, __WFILE__, NULL, L"", NULL);
             break;
         }
@@ -2289,7 +2289,7 @@
         {
             MgStringCollection args;
             args.Add(mgSchema->GetName());
-            throw new MgDuplicateObjectException(L"MgServerFeatureUtil.GetFdoFeatureSchemaCollection", __LINE__, __WFILE__, NULL, L"MgDuplicateObject", &args);
+            throw new MgException(MgExceptionCodes::MgDuplicateObjectException, L"MgServerFeatureUtil.GetFdoFeatureSchemaCollection", __LINE__, __WFILE__, NULL, L"MgDuplicateObject", &args);
         }
         else
         {
@@ -2907,7 +2907,7 @@
             arguments.Add(L"1");
             arguments.Add(buffer);
 
-            throw new MgInvalidArgumentException(L"MgServerFeatureUtil.GetFdoDataType",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureUtil.GetFdoDataType",
                 __LINE__, __WFILE__, &arguments, L"MgInvalidPropertyType", NULL);
         }
     }
@@ -2950,7 +2950,7 @@
             arguments.Add(L"1");
             arguments.Add(buffer);
 
-            throw new MgInvalidArgumentException(L"MgServerFeatureUtil.GetFdoParameterDirection",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureUtil.GetFdoParameterDirection",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
     }
@@ -2993,7 +2993,7 @@
             arguments.Add(L"1");
             arguments.Add(buffer);
 
-            throw new MgInvalidArgumentException(L"MgServerFeatureUtil.GetMgParameterDirection",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureUtil.GetMgParameterDirection",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
     }
@@ -3155,7 +3155,7 @@
     {
         FdoFeatureClass* fdoFeatureClass = dynamic_cast<FdoFeatureClass*>(fdoClassDef);
         if (NULL == fdoFeatureClass)
-            throw new MgInvalidArgumentException(L"MgServerFeatureUtil.UpdateFdoClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureUtil.UpdateFdoClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
 
         FdoPtr<FdoGeometricPropertyDefinition> defaultGeom = (FdoGeometricPropertyDefinition*)fdoPropDefCol->GetItem(geomName.c_str());
         fdoFeatureClass->SetGeometryProperty(defaultGeom);
@@ -3280,7 +3280,7 @@
         {
             FdoDataPropertyDefinition* fdoDataPropDef = dynamic_cast<FdoDataPropertyDefinition*>(fdoPropDef);
             if (NULL == fdoDataPropDef)
-                throw new MgInvalidArgumentException(L"MgServerFeatureUtil.UpdateFdoClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
+                throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureUtil.UpdateFdoClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
 
             UpdateDataPropertyDefinition((MgDataPropertyDefinition*)mgPropDef, fdoDataPropDef);
             break;
@@ -3290,7 +3290,7 @@
         {
             FdoObjectPropertyDefinition* fdoObjectPropDef = dynamic_cast<FdoObjectPropertyDefinition*>(fdoPropDef);
             if (NULL == fdoObjectPropDef)
-                throw new MgInvalidArgumentException(L"MgServerFeatureUtil.UpdateFdoClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
+                throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureUtil.UpdateFdoClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
 
             UpdateObjectPropertyDefinition((MgObjectPropertyDefinition*)mgPropDef, fdoObjectPropDef, fdoClassCol);
             break;
@@ -3301,7 +3301,7 @@
         {
             FdoGeometricPropertyDefinition* fdoGeometricPropDef = dynamic_cast<FdoGeometricPropertyDefinition*>(fdoPropDef);
             if (NULL == fdoGeometricPropDef)
-                throw new MgInvalidArgumentException(L"MgServerFeatureUtil.UpdateFdoClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
+                throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureUtil.UpdateFdoClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
 
             UpdateGeometricPropertyDefinition((MgGeometricPropertyDefinition*)mgPropDef, fdoGeometricPropDef);
             break;
@@ -3318,7 +3318,7 @@
         {
             FdoRasterPropertyDefinition* fdoRasterPropDef = dynamic_cast<FdoRasterPropertyDefinition*>(fdoPropDef);
             if (NULL == fdoRasterPropDef)
-                throw new MgInvalidArgumentException(L"MgServerFeatureUtil.UpdateFdoClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
+                throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerFeatureUtil.UpdateFdoClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
 
             UpdateRasterPropertyDefinition((MgRasterPropertyDefinition*)mgPropDef, fdoRasterPropDef);
             break;

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetConnectionPropertyValues.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetConnectionPropertyValues.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetConnectionPropertyValues.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -44,7 +44,7 @@
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(L"MgServerGetConnectionPropertyValues.GetConnectionPropertyValues",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerGetConnectionPropertyValues.GetConnectionPropertyValues",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
 
@@ -54,7 +54,7 @@
         arguments.Add(L"2");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(L"MgServerGetConnectionPropertyValues.GetConnectionPropertyValues",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerGetConnectionPropertyValues.GetConnectionPropertyValues",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
 
@@ -90,7 +90,7 @@
     {
         if(NULL == msfc.p)
         {
-            throw new MgConnectionFailedException(L"MgServerGetConnectionPropertyValues.GetConnectionPropertyValues", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerGetConnectionPropertyValues.GetConnectionPropertyValues", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // The reference to the FDO connection from the MgServerFeatureConnection object must be cleaned up before the parent object
@@ -113,7 +113,7 @@
             arguments.Add(L"2");
             arguments.Add(propertyName);
 
-            throw new MgInvalidArgumentException(L"MgServerGetConnectionPropertyValues.GetConnectionPropertyValues",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerGetConnectionPropertyValues.GetConnectionPropertyValues",
                 __LINE__, __WFILE__, &arguments, L"MgPropertyNotEnumerable", NULL);
         }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetLongTransactions.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetLongTransactions.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetLongTransactions.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -55,7 +55,7 @@
         {
             // TODO: specify which argument and message, once we have the mechanism
             STRING message = MgServerFeatureUtil::GetMessage(L"MgCommandNotSupported");
-            throw new MgInvalidOperationException(L"MgServerGetLongTransactions.GetLongTransactions", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGetLongTransactions.GetLongTransactions", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         FdoPtr<FdoIGetLongTransactions> fdoCommand = (FdoIGetLongTransactions*)fdoConn->CreateCommand(FdoCommandType_GetLongTransactions);
@@ -93,7 +93,7 @@
     }
     else
     {
-        throw new MgConnectionFailedException(L"MgServerGetLongTransactions::GetLongTransactions()", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerGetLongTransactions::GetLongTransactions()", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     MG_FEATURE_SERVICE_CHECK_CONNECTION_CATCH_AND_THROW(resId, L"MgServerGetLongTransactions.GetLongTransactions")

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetProviderCapabilities.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetProviderCapabilities.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetProviderCapabilities.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -46,7 +46,7 @@
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(L"MgServerGetProviderCapabilities.MgServerGetProviderCapabilities",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerGetProviderCapabilities.MgServerGetProviderCapabilities",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetSchemaMapping.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetSchemaMapping.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetSchemaMapping.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -110,7 +110,7 @@
     }
     else
     {
-        throw new MgConnectionFailedException(L"MgServerGetSchemaMapping::GetSchemaMapping()", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerGetSchemaMapping::GetSchemaMapping()", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     MG_FEATURE_SERVICE_CATCH_AND_THROW(L"MgServerGetSchemaMapping.GetSchemaMapping")

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetSpatialContexts.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetSpatialContexts.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGetSpatialContexts.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -62,7 +62,7 @@
             {
                 // TODO: specify which argument and message, once we have the mechanism
                 STRING message = MgServerFeatureUtil::GetMessage(L"MgCommandNotSupported");
-                throw new MgInvalidOperationException(L"MgServerGetSpatialContexts.GetSpatialContexts", __LINE__, __WFILE__, NULL, L"", NULL);
+                throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGetSpatialContexts.GetSpatialContexts", __LINE__, __WFILE__, NULL, L"", NULL);
             }
 
             FdoPtr<FdoIGetSpatialContexts> fdoCommand = (FdoIGetSpatialContexts*)fdoConn->CreateCommand(FdoCommandType_GetSpatialContexts);
@@ -89,7 +89,7 @@
         }
         else
         {
-            throw new MgConnectionFailedException(L"MgServerGetSpatialContexts.GetSpatialContexts()", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerGetSpatialContexts.GetSpatialContexts()", __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
     else

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGwsFeatureReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGwsFeatureReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerGwsFeatureReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -199,7 +199,7 @@
                 if (m_attributeNameDelimiters->GetCount() != (INT32)m_primaryExtendedFeatureDescription->GetCount())
                 {
                     // Should never get here
-                    throw new MgInvalidArgumentException(L"MgServerGwsFeatureReader.ReadNext",
+                    throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerGwsFeatureReader.ReadNext",
                         __LINE__, __WFILE__, NULL, L"MgInvalidCollectionSize", NULL);
                 }
 
@@ -318,7 +318,7 @@
                         if (m_attributeNameDelimiters->GetCount() != (INT32)m_primaryExtendedFeatureDescription->GetCount())
                         {
                             // Should never get here
-                            throw new MgInvalidArgumentException(L"MgServerGwsFeatureReader.ReadNext",
+                            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerGwsFeatureReader.ReadNext",
                                 __LINE__, __WFILE__, NULL, L"MgInvalidCollectionSize", NULL);
                         }
 
@@ -509,7 +509,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetBoolean",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetBoolean",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -546,7 +546,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetByte",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetByte",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -583,7 +583,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetDateTime",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetDateTime",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -622,7 +622,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetSingle",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetSingle",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -659,7 +659,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetDouble",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetDouble",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -696,7 +696,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetInt16",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetInt16",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -733,7 +733,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetInt32",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetInt32",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -772,7 +772,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetInt64",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetInt64",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -809,7 +809,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -850,7 +850,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetBLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetBLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -898,7 +898,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetCLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetCLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -934,7 +934,7 @@
 MgFeatureReader* MgServerGwsFeatureReader::GetFeatureObject(CREFSTRING propertyName)
 {
     // TODO: Figure out how to support object properties.
-    throw new MgNotImplementedException(L"MgServerGwsFeatureReader.GetFeatureObject", __LINE__, __WFILE__, NULL, L"", NULL);
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, L"MgServerGwsFeatureReader.GetFeatureObject", __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 //////////////////////////////////////////////////////////////////
@@ -976,7 +976,7 @@
             MgStringCollection arguments;
             arguments.Add(propertyName);
 
-            throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -1019,7 +1019,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetRaster",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetRaster",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1217,7 +1217,7 @@
 
 void MgServerGwsFeatureReader::Deserialize(MgStream* stream)
 {
-    throw new MgInvalidOperationException(L"MgServerGwsFeatureReader.Deserialize",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGwsFeatureReader.Deserialize",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
@@ -1230,55 +1230,55 @@
 /// <returns>MgByteReader holding XML.</returns>
 MgByteReader* MgServerGwsFeatureReader::ToXml()
 {
-    throw new MgInvalidOperationException(L"MgServerGwsFeatureReader.ToXml",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGwsFeatureReader.ToXml",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 string MgServerGwsFeatureReader::GetResponseElementName()
 {
-    throw new MgInvalidOperationException(L"MgServerGwsFeatureReader.GetResponseElementName",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGwsFeatureReader.GetResponseElementName",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 string MgServerGwsFeatureReader::GetBodyElementName()
 {
-    throw new MgInvalidOperationException(L"MgServerGwsFeatureReader.GetBodyElementName",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGwsFeatureReader.GetBodyElementName",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerGwsFeatureReader::ResponseStartUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerGwsFeatureReader.ResponseStartUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGwsFeatureReader.ResponseStartUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerGwsFeatureReader::ResponseEndUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerGwsFeatureReader.ResponseEndUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGwsFeatureReader.ResponseEndUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerGwsFeatureReader::BodyStartUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerGwsFeatureReader.BodyStartUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGwsFeatureReader.BodyStartUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerGwsFeatureReader::BodyEndUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerGwsFeatureReader.BodyEndUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGwsFeatureReader.BodyEndUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerGwsFeatureReader::HeaderToStringUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerGwsFeatureReader.HeaderToStringUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGwsFeatureReader.HeaderToStringUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerGwsFeatureReader::CurrentToStringUtf8(string& str, MgTransform* xform)
 {
-    throw new MgInvalidOperationException(L"MgServerGwsFeatureReader.CurrentToStringUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerGwsFeatureReader.CurrentToStringUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
@@ -1393,7 +1393,7 @@
             MgStringCollection arguments;
             arguments.Add(propertyName);
 
-            throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -1429,7 +1429,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerGwsFeatureReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerGwsFeatureReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1470,7 +1470,7 @@
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(L"MgServerGwsFeatureReader.DeterminePropertyFeatureSource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerGwsFeatureReader.DeterminePropertyFeatureSource",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
 
@@ -1809,7 +1809,7 @@
                 if (m_attributeNameDelimiters->GetCount() != nSecondaryFeatures)
                 {
                     // Should never get here
-                    throw new MgInvalidArgumentException(L"MgServerGwsFeatureReader.GetMgClassDefinition", __LINE__, __WFILE__, NULL, L"MgInvalidCollectionSize", NULL);
+                    throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerGwsFeatureReader.GetMgClassDefinition", __LINE__, __WFILE__, NULL, L"MgInvalidCollectionSize", NULL);
                 }
             }
 
@@ -1882,8 +1882,11 @@
 
                     FDO_SAFE_RELEASE(e);
 
-                    throw new MgFdoException(L"MgServerGwsFeatureReader.GetMgClassDefinition",
-                        __LINE__, __WFILE__, NULL, messageId, &arguments, nativeErrorCode);
+                    auto ex = new MgException(MgExceptionCodes::MgFdoException, L"MgServerGwsFeatureReader.GetMgClassDefinition",
+                        __LINE__, __WFILE__, NULL, messageId, &arguments);
+
+                    ex->SetNativeErrorCode(nativeErrorCode);
+                    throw ex;
                 }
             }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerInsertCommand.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerInsertCommand.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerInsertCommand.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -58,7 +58,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgServerInsertCommand::Execute", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerInsertCommand::Execute", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     FdoPtr<FdoIConnection> fdoConn = m_srvrFeatConn->GetConnection();
@@ -121,7 +121,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgServerGwsGetFeatures.BatchInsert", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerGwsGetFeatures.BatchInsert", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     char buff[32];
@@ -169,7 +169,7 @@
 
             MgStringCollection arguments;
             arguments.Add(message);
-            throw new MgFeatureServiceException(L"MgServerInsertCommand.SingleInsert", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerInsertCommand.SingleInsert", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
         bool available = false;
@@ -193,7 +193,7 @@
 
             MgStringCollection arguments;
             arguments.Add(message);
-            throw new MgFeatureServiceException(L"MgServerInsertCommand.SingleInsert", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerInsertCommand.SingleInsert", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
         // Performance improvement: Only return the key values

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSelectFeatures.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSelectFeatures.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSelectFeatures.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -174,7 +174,7 @@
 
             MgStringCollection arguments;
             arguments.Add(message);
-            throw new MgFeatureServiceException(L"MgServerSelectFeatures.SelectFeatures", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerSelectFeatures.SelectFeatures", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
         // Custom function specified using SelectAggregate,
@@ -225,7 +225,7 @@
                     arguments.Add(L"1");
                     arguments.Add(L"MgFeatureServiceCommand");
 
-                    throw new MgInvalidArgumentException(L"MgServerSelectFeatures::SelectFeatures()",
+                    throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerSelectFeatures::SelectFeatures()",
                         __LINE__, __WFILE__, &arguments, L"MgCollectionEmpty", NULL);
 
                 }
@@ -621,7 +621,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgServerSelectFeatures.ApplyOrderingOptions", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerSelectFeatures.ApplyOrderingOptions", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     if ((cnt == 1) && bExtended)
@@ -739,7 +739,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgServerSelectFeatures.AddCustomComputedProperty", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerSelectFeatures.AddCustomComputedProperty", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     // Downcast to FdoFunction
@@ -797,7 +797,7 @@
 
                 MgStringCollection arguments;
                 arguments.Add(message);
-                throw new MgFeatureServiceException(L"MgServerSelectFeatures.ValidateConstraintsOnCustomFunctions",
+                throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerSelectFeatures.ValidateConstraintsOnCustomFunctions",
                     __LINE__, __WFILE__, &arguments, L"", NULL);
             }
             MgServerFeatureUtil::ValidateCustomConstraints(m_customFunction);
@@ -888,7 +888,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgServerSelectFeatures.ApplyFdoGroupingProperties", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerSelectFeatures.ApplyFdoGroupingProperties", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     FdoPtr<FdoIdentifierCollection> fic = ((MgFeatureServiceCommand*)m_command)->GetGrouping();
@@ -944,7 +944,7 @@
 
         MgStringCollection arguments;
         arguments.Add(message);
-        throw new MgFeatureServiceException(L"MgServerSelectFeatures.ContainsCustomFunction",
+        throw new MgException(MgExceptionCodes::MgFeatureServiceException, L"MgServerSelectFeatures.ContainsCustomFunction",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
@@ -1277,7 +1277,7 @@
             }
             else
             {
-                throw new MgConnectionFailedException(L"MgServerSelectFeatures.JoinFeatures",
+                throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerSelectFeatures.JoinFeatures",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
 
@@ -1424,7 +1424,7 @@
                     }
                     else
                     {
-                        throw new MgConnectionFailedException(L"MgServerSelectFeatures.JoinFeatures",
+                        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerSelectFeatures.JoinFeatures",
                             __LINE__, __WFILE__, NULL, L"", NULL);
                     }
                 }
@@ -1667,7 +1667,7 @@
     {
         if (!conn->IsConnectionOpen())
         {
-            throw new MgConnectionFailedException(L"MgServerSelectFeatures.SupportsFdoJoin", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerSelectFeatures.SupportsFdoJoin", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         FdoPtr<FdoIConnection> fdoConn = conn->GetConnection();
@@ -1861,7 +1861,7 @@
     if (NULL == (FdoClassDefinition*)classDef)
     {
         //TODO: Refine message if available
-        throw new MgClassNotFoundException(L"MgServerSelectFeatures.IsFunctionOnPrimaryProperty", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgClassNotFoundException, L"MgServerSelectFeatures.IsFunctionOnPrimaryProperty", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     FdoPtr<FdoPropertyDefinitionCollection> properties = classDef->GetProperties();
@@ -1893,7 +1893,7 @@
     {
         if (!conn->IsConnectionOpen())
         {
-            throw new MgConnectionFailedException(L"MgServerSelectFeatures.SupportsFdoJoin", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerSelectFeatures.SupportsFdoJoin", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         FdoPtr<FdoIConnection> fdoConn = conn->GetConnection();
@@ -1935,7 +1935,7 @@
         if (NULL == (FdoClassDefinition*)classDef)
         {
             //TODO: Refine message if available
-            throw new MgClassNotFoundException(L"MgServerSelectFeatures.FilterContainsSecondaryProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgClassNotFoundException, L"MgServerSelectFeatures.FilterContainsSecondaryProperties", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         FdoPtr<FdoPropertyDefinitionCollection> propDefs = classDef->GetProperties();
@@ -2016,7 +2016,7 @@
     {
         if (!conn->IsConnectionOpen())
         {
-            throw new MgConnectionFailedException(L"MgServerSelectFeatures.SelectFdoJoin", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerSelectFeatures.SelectFdoJoin", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         CHECKNULL(m_command, L"MgServerSelectFeatures.SelectFdoJoin");
@@ -2256,7 +2256,7 @@
     if (NULL == (FdoClassDefinition*)classDef)
     {
         //TODO: Refine message if available
-        throw new MgClassNotFoundException(L"MgServerSelectFeatures.ApplyClassProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgClassNotFoundException, L"MgServerSelectFeatures.ApplyClassProperties", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     FdoPtr<FdoIdentifierCollection> propNames = m_command->GetPropertyNames();

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSqlCommand.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSqlCommand.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSqlCommand.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -166,11 +166,11 @@
         {
             // TODO: specify which argument and message, once we have the mechanism
             STRING message = MgServerFeatureUtil::GetMessage(L"MgCommandNotSupported");
-            throw new MgInvalidOperationException(L"MgServerSqlCommand.Validate", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerSqlCommand.Validate", __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
     else
     {
-        throw new MgConnectionFailedException(L"MgServerSqlCommand::Validate", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerSqlCommand::Validate", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSqlDataReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSqlDataReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerSqlDataReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -191,7 +191,7 @@
         }
         default:
         {
-            throw new MgInvalidPropertyTypeException(L"MgServerSqlDataReader.GetPropertyType",
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgServerSqlDataReader.GetPropertyType",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
@@ -238,7 +238,7 @@
         }
         default:
         {
-            throw new MgInvalidPropertyTypeException(L"MgServerSqlDataReader.GetPropertyType",
+            throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgServerSqlDataReader.GetPropertyType",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
@@ -310,7 +310,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetBoolean",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetBoolean",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -346,7 +346,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetBoolean",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetBoolean",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -379,7 +379,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetByte",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetByte",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -415,7 +415,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetByte",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetByte",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -448,7 +448,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetDateTime",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetDateTime",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -486,7 +486,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetDateTime",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetDateTime",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -522,7 +522,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetSingle",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetSingle",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -558,7 +558,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetSingle",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetSingle",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -591,7 +591,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetDouble",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetDouble",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -627,7 +627,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetDouble",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetDouble",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -660,7 +660,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetInt16",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetInt16",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -696,7 +696,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetInt16",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetInt16",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -729,7 +729,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetInt32",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetInt32",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -765,7 +765,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetInt32",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetInt32",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -800,7 +800,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetInt64",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetInt64",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -838,7 +838,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetInt64",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetInt64",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -871,7 +871,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -912,7 +912,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -950,7 +950,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetBLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetBLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -986,7 +986,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetBLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetBLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1019,7 +1019,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetCLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetCLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1055,7 +1055,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetCLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetCLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1104,7 +1104,7 @@
             MgStringCollection arguments;
             arguments.Add(propertyName);
 
-            throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -1155,7 +1155,7 @@
             MgStringCollection arguments;
             arguments.Add(buffer);
 
-            throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetGeometry",
+            throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetGeometry",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
         else
@@ -1179,7 +1179,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1218,7 +1218,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetLOB",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetLOB",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1336,7 +1336,7 @@
 
 void MgServerSqlDataReader::Deserialize(MgStream* stream)
 {
-    throw new MgInvalidOperationException(L"MgServerSqlDataReader.Deserialize",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerSqlDataReader.Deserialize",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
@@ -1348,55 +1348,55 @@
 /// <returns>MgByteReader holding XML.</returns>
 MgByteReader* MgServerSqlDataReader::ToXml()
 {
-    throw new MgInvalidOperationException(L"MgServerSqlDataReader.ToXml",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerSqlDataReader.ToXml",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 string MgServerSqlDataReader::GetResponseElementName()
 {
-    throw new MgInvalidOperationException(L"MgServerSqlDataReader.GetResponseElementName",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerSqlDataReader.GetResponseElementName",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 string MgServerSqlDataReader::GetBodyElementName()
 {
-    throw new MgInvalidOperationException(L"MgServerSqlDataReader.GetBodyElementName",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerSqlDataReader.GetBodyElementName",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerSqlDataReader::ResponseStartUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerSqlDataReader.ResponseStartUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerSqlDataReader.ResponseStartUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerSqlDataReader::ResponseEndUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerSqlDataReader.ResponseEndUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerSqlDataReader.ResponseEndUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerSqlDataReader::BodyStartUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerSqlDataReader.BodyStartUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerSqlDataReader.BodyStartUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerSqlDataReader::BodyEndUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerSqlDataReader.BodyEndUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerSqlDataReader.BodyEndUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerSqlDataReader::HeaderToStringUtf8(string& str)
 {
-    throw new MgInvalidOperationException(L"MgServerSqlDataReader.HeaderToStringUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerSqlDataReader.HeaderToStringUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 void MgServerSqlDataReader::CurrentToStringUtf8(string& str, MgTransform* xform)
 {
-    throw new MgInvalidOperationException(L"MgServerSqlDataReader.CurrentToStringUtf8",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgServerSqlDataReader.CurrentToStringUtf8",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
@@ -1411,7 +1411,7 @@
 /// MgFdoException
 MgRaster* MgServerSqlDataReader::GetRaster(CREFSTRING propertyName)
 {
-    throw new MgInvalidPropertyTypeException(L"MgServerSqlDataReader.GetRaster",
+    throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgServerSqlDataReader.GetRaster",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
@@ -1426,7 +1426,7 @@
 /// MgFdoException
 MgRaster* MgServerSqlDataReader::GetRaster(INT32 index)
 {
-    throw new MgInvalidPropertyTypeException(L"MgServerSqlDataReader.GetRaster",
+    throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, L"MgServerSqlDataReader.GetRaster",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
@@ -1451,7 +1451,7 @@
         MgStringCollection arguments;
         arguments.Add(propertyName);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else
@@ -1491,7 +1491,7 @@
         MgStringCollection arguments;
         arguments.Add(buffer);
 
-        throw new MgNullPropertyValueException(L"MgServerSqlDataReader.GetString",
+        throw new MgException(MgExceptionCodes::MgNullPropertyValueException, L"MgServerSqlDataReader.GetString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     else

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerUpdateFeatures.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerUpdateFeatures.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/ServerUpdateFeatures.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -48,7 +48,7 @@
     if ((NULL != m_SrvrFeatConn.p) && ( !m_SrvrFeatConn->IsConnectionOpen() ))
     {
 
-        throw new MgConnectionFailedException(L"MgServerUpdateFeatures::MgServerUpdateFeatures()",
+        throw new MgException(MgExceptionCodes::MgConnectionFailedException, L"MgServerUpdateFeatures::MgServerUpdateFeatures()",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 }
@@ -74,7 +74,7 @@
         arguments.Add(L"2");
         arguments.Add(L"0");
 
-        throw new MgInvalidArgumentException(L"MgServerUpdateFeatures.UpdateFeatures",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerUpdateFeatures.UpdateFeatures",
             __LINE__, __WFILE__, &arguments, L"MgCollectionEmpty", NULL);
     }
 
@@ -164,7 +164,7 @@
         arguments.Add(L"2");
         arguments.Add(L"0");
 
-        throw new MgInvalidArgumentException(L"MgServerUpdateFeatures.UpdateFeatures",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerUpdateFeatures.UpdateFeatures",
             __LINE__, __WFILE__, &arguments, L"MgCollectionEmpty", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Feature/TransformedGeometryFeatureReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Feature/TransformedGeometryFeatureReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Feature/TransformedGeometryFeatureReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -189,7 +189,7 @@
 //that will not return this type of reader
 BYTE_ARRAY_OUT MgTransformedGeometryFeatureReader::GetGeometry(CREFSTRING propertyName, INT32& length) 
 { 
-    throw new MgNotImplementedException(L"MgTransformedGeometryFeatureReader.GetGeometry", __LINE__, __WFILE__, NULL, L"", NULL);
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, L"MgTransformedGeometryFeatureReader.GetGeometry", __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 //This won't be used by RS_FeatureReader because stylization will use SelectFeatures()
@@ -196,7 +196,7 @@
 //that will not return this type of reader
 BYTE_ARRAY_OUT MgTransformedGeometryFeatureReader::GetGeometry(INT32 index, INT32& length) 
 { 
-    throw new MgNotImplementedException(L"MgTransformedGeometryFeatureReader.GetGeometry", __LINE__, __WFILE__, NULL, L"", NULL);
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, L"MgTransformedGeometryFeatureReader.GetGeometry", __LINE__, __WFILE__, NULL, L"", NULL);
 }
 
 MgRaster* MgTransformedGeometryFeatureReader::GetRaster(CREFSTRING propertyName) 
@@ -443,7 +443,7 @@
 
 void MgTransformedGeometryFeatureReader::Deserialize(MgStream* stream) 
 { 
-    throw new MgInvalidOperationException(L"MgTransformedGeometryFeatureReader.Deserialize",
+    throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgTransformedGeometryFeatureReader.Deserialize",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Kml/KmlOperationFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Kml/KmlOperationFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Kml/KmlOperationFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -69,7 +69,7 @@
             handler.reset(new MgOpGetMapKml());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgKmlOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -81,7 +81,7 @@
             handler.reset(new MgOpGetLayerKml());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgKmlOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -93,13 +93,13 @@
             handler.reset(new MgOpGetFeaturesKml());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgKmlOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
 
     default:
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgKmlOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetFeaturesKml.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetFeaturesKml.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetFeaturesKml.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -139,7 +139,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetFeaturesKml.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetFeaturesKml.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetLayerKml.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetLayerKml.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetLayerKml.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -105,7 +105,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetLayerKml.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetLayerKml.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetMapKml.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetMapKml.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Kml/OpGetMapKml.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetMapKml.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetMapKml.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/LegendPlotUtil.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/LegendPlotUtil.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/LegendPlotUtil.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -1238,7 +1238,7 @@
             arguments.Add(L"1");
             arguments.Add(pageUnits);
 
-            throw new MgInvalidArgumentException(L"MgLegendPlotUtil.AddCustomLogoElement",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLegendPlotUtil.AddCustomLogoElement",
                 __LINE__, __WFILE__, &arguments, L"MgInvalidPrintLayoutPageSizeUnits", NULL);
         }
     }
@@ -1275,7 +1275,7 @@
         else
         {
             // invalid positionUnits specified
-            throw new MgInvalidPrintLayoutPositionUnitsException(L"MgLegendPlotUtil.AddCustomLogoElement",
+            throw new MgException(MgExceptionCodes::MgInvalidPrintLayoutPositionUnitsException, L"MgLegendPlotUtil.AddCustomLogoElement",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -1314,7 +1314,7 @@
         else
         {
             // invalid positionUnits specified - should never get here
-            throw new MgInvalidPrintLayoutPositionUnitsException(L"MgLegendPlotUtil.AddCustomLogoElement",
+            throw new MgException(MgExceptionCodes::MgInvalidPrintLayoutPositionUnitsException, L"MgLegendPlotUtil.AddCustomLogoElement",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -1338,7 +1338,7 @@
         else
         {
             // invalid positionUnits specified
-            throw new MgInvalidPrintLayoutPositionUnitsException(L"MgLegendPlotUtil.AddCustomLogoElement",
+            throw new MgException(MgExceptionCodes::MgInvalidPrintLayoutPositionUnitsException, L"MgLegendPlotUtil.AddCustomLogoElement",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -1355,7 +1355,7 @@
         else
         {
             // invalid units specified - should never get here
-            throw new MgInvalidPrintLayoutSizeUnitsException(L"MgLegendPlotUtil.AddCustomLogoElement",
+            throw new MgException(MgExceptionCodes::MgInvalidPrintLayoutSizeUnitsException, L"MgLegendPlotUtil.AddCustomLogoElement",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -1398,7 +1398,7 @@
             arguments.Add(L"1");
             arguments.Add(pageUnits);
 
-            throw new MgInvalidArgumentException(L"MgLegendPlotUtil.AddCustomTextElement",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgLegendPlotUtil.AddCustomTextElement",
                 __LINE__, __WFILE__, &arguments, L"MgInvalidPrintLayoutPageSizeUnits", NULL);
         }
     }
@@ -1440,7 +1440,7 @@
         else
         {
             // invalid positionUnits specified
-            throw new MgInvalidPrintLayoutPositionUnitsException(L"MgLegendPlotUtil.AddCustomLogoElement", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidPrintLayoutPositionUnitsException, L"MgLegendPlotUtil.AddCustomLogoElement", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         if (positionUnits == L"percent")  // NOXLATE
@@ -1478,7 +1478,7 @@
         else
         {
             // invalid positionUnits specified - should never get here
-            throw new MgInvalidPrintLayoutPositionUnitsException(L"MgLegendPlotUtil.AddCustomLogoElement", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidPrintLayoutPositionUnitsException, L"MgLegendPlotUtil.AddCustomLogoElement", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         double textSize = 0.0;
@@ -1502,7 +1502,7 @@
         else
         {
             // invalid positionUnits specified
-            throw new MgInvalidPrintLayoutFontSizeUnitsException(L"MgLegendPlotUtil.AddCustomTextElement", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidPrintLayoutFontSizeUnitsException, L"MgLegendPlotUtil.AddCustomTextElement", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         if (sizeUnits == L"inches")  // NOXLATE
@@ -1520,7 +1520,7 @@
         else
         {
             // invalid units specified
-            throw new MgInvalidPrintLayoutFontSizeUnitsException(L"MgLegendPlotUtil.AddCustomTextElement", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidPrintLayoutFontSizeUnitsException, L"MgLegendPlotUtil.AddCustomTextElement", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         fontName = textInfo.GetFontName();
         fontHeight = textSize;

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/MappingOperationFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/MappingOperationFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/MappingOperationFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -82,7 +82,7 @@
             handler.reset(new MgOpGeneratePlot());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -94,7 +94,7 @@
             handler.reset(new MgOpGeneratePlot());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -106,7 +106,7 @@
             handler.reset(new MgOpGeneratePlot());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -118,7 +118,7 @@
             handler.reset(new MgOpGenerateMultiPlot());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -130,7 +130,7 @@
             handler.reset(new MgOpGenerateLegendPlot());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -142,7 +142,7 @@
             handler.reset(new MgOpGenerateLegendImage());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -154,7 +154,7 @@
             handler.reset(new MgOpMQueryFeatures());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
             L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -166,7 +166,7 @@
             handler.reset(new MgOpQueryFeaturesWms());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -178,7 +178,7 @@
             handler.reset(new MgOpCreateRuntimeMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -190,7 +190,7 @@
             handler.reset(new MgOpCreateRuntimeMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -202,7 +202,7 @@
             handler.reset(new MgOpCreateRuntimeMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -214,7 +214,7 @@
             handler.reset(new MgOpDescribeRuntimeMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -226,7 +226,7 @@
             handler.reset(new MgOpDescribeRuntimeMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -238,13 +238,13 @@
             handler.reset(new MgOpDescribeRuntimeMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
 
     default:
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgMappingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/MappingUtil.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/MappingUtil.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/MappingUtil.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -68,7 +68,7 @@
         STRING errorMsg = parser.GetErrorMessage();
         MgStringCollection arguments;
         arguments.Add(errorMsg);
-        throw new MgInvalidMapDefinitionException(L"MgMappingUtil::GetMapDefinition", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidMapDefinitionException, L"MgMappingUtil::GetMapDefinition", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     // detach the map definition from the parser - it's
@@ -895,8 +895,8 @@
             MgStringCollection argumentsWhy;
             argumentsWhy.Add(mgException->GetExceptionMessage(locale));
 
-            Ptr<MgStylizeLayerFailedException> exception;
-            exception = new MgStylizeLayerFailedException(L"MgMappingUtil.StylizeLayers", __LINE__, __WFILE__, &arguments, L"MgFormatInnerExceptionMessage", &argumentsWhy);
+            Ptr<MgException> exception;
+            exception = new MgException(MgExceptionCodes::MgStylizeLayerFailedException, L"MgMappingUtil.StylizeLayers", __LINE__, __WFILE__, &arguments, L"MgFormatInnerExceptionMessage", &argumentsWhy);
 
             STRING message = exception->GetExceptionMessage(locale);
             STRING stackTrace = exception->GetStackTrace(locale);
@@ -1296,7 +1296,8 @@
         arguments.Add(buf);
     }
 
-    mgException = new MgFdoException(L"MgStylizationUtil.ExceptionTrap", line, file, NULL, messageId, &arguments, nativeErrorCode);
+    mgException = new MgException(MgExceptionCodes::MgFdoException, L"MgStylizationUtil.ExceptionTrap", line, file, NULL, messageId, &arguments);
+    mgException->SetNativeErrorCode(nativeErrorCode);
 
     MG_CATCH(L"MgStylizationUtil.ExceptionTrap")
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpCreateRuntimeMap.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpCreateRuntimeMap.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpCreateRuntimeMap.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -187,7 +187,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpCreateRuntimeMap.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpCreateRuntimeMap.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpDescribeRuntimeMap.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpDescribeRuntimeMap.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpDescribeRuntimeMap.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -181,7 +181,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDescribeRuntimeMap.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDescribeRuntimeMap.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateLegendImage.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateLegendImage.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateLegendImage.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -107,7 +107,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGenerateLegendImage.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGenerateLegendImage.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateLegendPlot.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateLegendPlot.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateLegendPlot.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -103,7 +103,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGenerateLegendPlot.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGenerateLegendPlot.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateMultiPlot.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateMultiPlot.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGenerateMultiPlot.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -98,7 +98,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGenerateMultiPlot.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGenerateMultiPlot.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGeneratePlot.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGeneratePlot.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpGeneratePlot.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -182,7 +182,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGeneratePlot.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGeneratePlot.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpQueryFeatures.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpQueryFeatures.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpQueryFeatures.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -97,7 +97,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpQueryFeatures.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpQueryFeatures.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpQueryFeaturesWms.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpQueryFeaturesWms.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/OpQueryFeaturesWms.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -108,7 +108,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpQueryFeaturesWms.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpQueryFeaturesWms.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/RSMgFeatureReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/RSMgFeatureReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/RSMgFeatureReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -285,7 +285,7 @@
         STRING message;
         message = ex->GetExceptionMessage();
 
-        bool shouldThrow = (NULL == dynamic_cast<MgFdoException*>(ex));
+        bool shouldThrow = (ex->GetExceptionCode() == MgExceptionCodes::MgFdoException);
         ex->Release();
         if (shouldThrow)
         {

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/ServerMappingService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/ServerMappingService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/ServerMappingService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -457,10 +457,7 @@
             {
                 dstCs = m_pCSFactory->Create(srs);
             }
-            catch (MgInvalidCoordinateSystemException* e)
-            {
-                e->Release();
-            }
+            MG_CATCH_AND_RELEASE_IF_TYPE(MgInvalidCoordinateSystemException)
         }
 
         double metersPerUnit = (dstCs.p) ? dstCs->ConvertCoordinateSystemUnitsToMeters(1.0) : 1.0;
@@ -550,7 +547,7 @@
                 arguments.Add(L"1");
                 arguments.Add(L"MgMapPlotCollection");
 
-                throw new MgInvalidArgumentException(L"MgServerMappingService.GenerateMultiPlot",
+                throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerMappingService.GenerateMultiPlot",
                     __LINE__, __WFILE__, &arguments, L"MgInvalidMapPlotCollectionMapPlotInstruction", NULL);
             }
             break;
@@ -754,10 +751,7 @@
         {
             dstCs = m_pCSFactory->Create(srs);
         }
-        catch (MgInvalidCoordinateSystemException* e)
-        {
-            e->Release();
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgInvalidCoordinateSystemException)
     }
 
     double metersPerUnit = (dstCs.p) ? dstCs->ConvertCoordinateSystemUnitsToMeters(1.0) : 1.0;
@@ -852,7 +846,7 @@
 MgByteReader* MgServerMappingService::QueryFeatures(MgMap* map,
     CREFSTRING layerName, CREFSTRING coordinateSpace)
 {
-    throw new MgNotImplementedException(L"MgServerMappingService.QueryFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, L"MgServerMappingService.QueryFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
     return NULL;
 }
 
@@ -895,7 +889,7 @@
     MgStringCollection* layerNames, INT32 x, INT32 y,
     INT32 maxFeatures, CREFSTRING coordinateSpace)
 {
-    throw new MgNotImplementedException(L"MgServerMappingService.QueryFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, L"MgServerMappingService.QueryFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
     return NULL;
 }
 
@@ -1231,7 +1225,7 @@
     {
         MgStringCollection args;
         args.Add(iconFormat);
-        throw new MgInvalidArgumentException(L"MgServerMappingService.DescribeRuntimeMap", __LINE__, __WFILE__, NULL, L"MgInvalidImageFormat", &args);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerMappingService.DescribeRuntimeMap", __LINE__, __WFILE__, NULL, L"MgInvalidImageFormat", &args);
     }
     Ptr<MgByteReader> byteReader;
 
@@ -1526,7 +1520,7 @@
     {
         MgStringCollection args;
         args.Add(iconFormat);
-        throw new MgInvalidArgumentException(L"MgServerMappingService.CreateRuntimeMap", __LINE__, __WFILE__, NULL, L"MgInvalidImageFormat", &args);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerMappingService.CreateRuntimeMap", __LINE__, __WFILE__, NULL, L"MgInvalidImageFormat", &args);
     }
     Ptr<MgByteReader> byteReader;
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/ServerMappingServiceDefs.h
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/ServerMappingServiceDefs.h	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Mapping/ServerMappingServiceDefs.h	2020-10-21 14:38:32 UTC (rev 9747)
@@ -50,7 +50,7 @@
     }                                                                       \
     catch (exception& e)                                                    \
     {                                                                       \
-        mgException = MgSystemException::Create(e, methodName, __LINE__, __WFILE__); \
+        mgException = MgException::Create(e, methodName, __LINE__, __WFILE__); \
     }                                                                       \
     catch (FdoException* e)                                                 \
     {                                                                       \
@@ -64,11 +64,12 @@
             arguments.Add(buf);                                             \
         }                                                                   \
         FDO_SAFE_RELEASE(e);                                                \
-        mgException = new MgFdoException(methodName, __LINE__, __WFILE__, NULL, messageId, &arguments, nativeErrorCode); \
+        mgException = new MgException(MgExceptionCodes::MgFdoException, methodName, __LINE__, __WFILE__, NULL, messageId, &arguments); \
+        mgException->SetNativeErrorCode(nativeErrorCode);                   \
     }                                                                       \
     catch (...)                                                             \
     {                                                                       \
-        mgException = new MgUnclassifiedException(methodName, __LINE__, __WFILE__, NULL, L"", NULL); \
+        mgException = new MgException(MgExceptionCodes::MgUnclassifiedException, methodName, __LINE__, __WFILE__, NULL, L"", NULL); \
     }                                                                       \
 
 #define MG_SERVER_MAPPING_SERVICE_THROW()                                     \

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/OpProfileRenderDynamicOverlay.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/OpProfileRenderDynamicOverlay.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/OpProfileRenderDynamicOverlay.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -99,7 +99,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpProfileRenderDynamicOverlay.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpProfileRenderDynamicOverlay.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/OpProfileRenderMap.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/OpProfileRenderMap.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/OpProfileRenderMap.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -126,7 +126,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpProfileRenderMap.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpProfileRenderMap.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/ProfilingOperationFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/ProfilingOperationFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Profiling/ProfilingOperationFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -68,7 +68,7 @@
             handler.reset(new MgOpProfileRenderDynamicOverlay());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgProfilingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -80,13 +80,13 @@
             handler.reset(new MgOpProfileRenderMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgProfilingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
 
     default:
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgProfilingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpQueryFeatureProperties.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpQueryFeatureProperties.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpQueryFeatureProperties.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -147,7 +147,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpQueryFeatureProperties.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpQueryFeatureProperties.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpQueryFeatures.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpQueryFeatures.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpQueryFeatures.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -115,7 +115,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpQueryFeatures.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpQueryFeatures.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderDynamicOverlay.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderDynamicOverlay.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderDynamicOverlay.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -152,7 +152,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenderDynamicOverlay.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenderDynamicOverlay.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMap.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMap.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMap.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -484,7 +484,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenderMap.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenderMap.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMapLegend.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMapLegend.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMapLegend.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -106,7 +106,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenderMapLegend.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenderMapLegend.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMetatile.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMetatile.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMetatile.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -109,7 +109,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenderMetatile.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenderMetatile.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMetatileXYZ.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMetatileXYZ.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderMetatileXYZ.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -109,7 +109,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenderMetatileXYZ.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenderMetatileXYZ.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTile.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTile.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTile.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -215,7 +215,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenderTile.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenderTile.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileFromMetatile.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileFromMetatile.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileFromMetatile.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -82,7 +82,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenderTileFromMetatile.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenderTileFromMetatile.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileMVT.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileMVT.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileMVT.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -89,7 +89,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenderTileMVT.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenderTileMVT.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileUTFGrid.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileUTFGrid.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileUTFGrid.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -89,7 +89,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenderTileUTFGrid.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenderTileUTFGrid.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileXYZ.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileXYZ.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/OpRenderTileXYZ.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -212,7 +212,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenderTileXYZ.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenderTileXYZ.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/RenderingOperationFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/RenderingOperationFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/RenderingOperationFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -68,7 +68,7 @@
             handler.reset(new MgOpRenderTile());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -80,7 +80,7 @@
             handler.reset(new MgOpRenderTile());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -92,7 +92,7 @@
             handler.reset(new MgOpRenderTileXYZ());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -105,7 +105,7 @@
             handler.reset(new MgOpRenderTileXYZ());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -116,7 +116,7 @@
             handler.reset(new MgOpRenderMetatile());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -127,7 +127,7 @@
             handler.reset(new MgOpRenderMetatileXYZ());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -138,7 +138,7 @@
             handler.reset(new MgOpRenderTileFromMetatile());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -149,7 +149,7 @@
             handler.reset(new MgOpRenderTileUTFGrid());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -160,7 +160,7 @@
             handler.reset(new MgOpRenderTileMVT());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -172,7 +172,7 @@
             handler.reset(new MgOpRenderDynamicOverlay());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -184,7 +184,7 @@
             handler.reset(new MgOpRenderDynamicOverlay());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -196,7 +196,7 @@
             handler.reset(new MgOpRenderMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -208,7 +208,7 @@
             handler.reset(new MgOpRenderMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -220,7 +220,7 @@
             handler.reset(new MgOpRenderMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -233,7 +233,7 @@
             handler.reset(new MgOpRenderMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -245,7 +245,7 @@
             handler.reset(new MgOpRenderMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -256,7 +256,7 @@
             handler.reset(new MgOpRenderMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -267,7 +267,7 @@
             handler.reset(new MgOpRenderMap());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -278,7 +278,7 @@
             handler.reset(new MgOpQueryFeatures());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -289,7 +289,7 @@
             handler.reset(new MgOpQueryFeatureProperties());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -300,7 +300,7 @@
             handler.reset(new MgOpQueryFeatureProperties());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -311,7 +311,7 @@
             handler.reset(new MgOpQueryFeatureProperties());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -322,13 +322,13 @@
             handler.reset(new MgOpRenderMapLegend());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
 
     default:
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgRenderingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/ServerRenderingService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/ServerRenderingService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Rendering/ServerRenderingService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -308,7 +308,7 @@
         arguments.Add(L"2");
         arguments.Add(baseMapLayerGroupName);
 
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderTileUTFGrid",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderTileUTFGrid",
             __LINE__, __WFILE__, &arguments, L"MgMapLayerGroupNameNotFound", NULL);
     }
 
@@ -349,7 +349,7 @@
 
     // sanity check - number of image pixels cannot exceed MAX_PIXELS
     if (drawWidth * drawHeight > MAX_PIXELS)
-        throw new MgOutOfRangeException(L"MgServerRenderingService.RenderTileUTFGrid", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
+        throw new MgException(MgExceptionCodes::MgOutOfRangeException, L"MgServerRenderingService.RenderTileUTFGrid", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
 
     // create a temporary collection containing all the layers for the base group
     Ptr<MgLayerCollection> layers = map->GetLayers();
@@ -385,10 +385,7 @@
         {
             dstCs = m_pCSFactory->Create(srs);
         }
-        catch (MgInvalidCoordinateSystemException* e)
-        {
-            e->Release();
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgInvalidCoordinateSystemException)
     }
 
     RS_String units = dstCs.p ? dstCs->GetUnits() : L"";
@@ -461,7 +458,7 @@
         arguments.Add(L"2");
         arguments.Add(baseMapLayerGroupName);
 
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderTileMVT",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderTileMVT",
             __LINE__, __WFILE__, &arguments, L"MgMapLayerGroupNameNotFound", NULL);
     }
 
@@ -680,23 +677,23 @@
     double metersPerUnit = map->GetMetersPerUnit();
 
     if (width <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgMapDisplayWidthCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgMapDisplayWidthCannotBeLessThanOrEqualToZero", NULL);
 
     if (height <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgMapDisplayHeightCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgMapDisplayHeightCannotBeLessThanOrEqualToZero", NULL);
 
     if (dpi <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgMapDisplayDpiCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgMapDisplayDpiCannotBeLessThanOrEqualToZero", NULL);
 
     if (scale <= 0.0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgMapViewScaleCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgMapViewScaleCannotBeLessThanOrEqualToZero", NULL);
 
     if (metersPerUnit <= 0.0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgMapMetersPerUnitCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgMapMetersPerUnitCannotBeLessThanOrEqualToZero", NULL);
 
     // sanity check - number of image pixels cannot exceed MAX_PIXELS
     if (width * height > MAX_PIXELS)
-        throw new MgOutOfRangeException(L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
+        throw new MgException(MgExceptionCodes::MgOutOfRangeException, L"MgServerRenderingService.RenderDynamicOverlay", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
 
     // compute map extent that corresponds to pixel extent
     Ptr<MgPoint> pt          = map->GetViewCenter();
@@ -875,16 +872,16 @@
     double metersPerUnit = map->GetMetersPerUnit();
 
     if (width <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayWidthCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayWidthCannotBeLessThanOrEqualToZero", NULL);
 
     if (height <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayHeightCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayHeightCannotBeLessThanOrEqualToZero", NULL);
 
     if (dpi <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayDpiCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayDpiCannotBeLessThanOrEqualToZero", NULL);
 
     if (metersPerUnit <= 0.0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapMetersPerUnitCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapMetersPerUnitCannotBeLessThanOrEqualToZero", NULL);
 
     // compute a view center and scale from the given extents
     // and pass on to the RenderMap that uses center and scale
@@ -901,7 +898,7 @@
 
     // sanity check - number of image pixels cannot exceed MAX_PIXELS
     if (drawWidth * drawHeight > MAX_PIXELS)
-        throw new MgOutOfRangeException(L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
+        throw new MgException(MgExceptionCodes::MgOutOfRangeException, L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
 
     // use the supplied background color
     RS_Color bgcolor(backgroundColor->GetRed(),
@@ -1016,23 +1013,23 @@
     double metersPerUnit = map->GetMetersPerUnit();
 
     if (width <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayWidthCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayWidthCannotBeLessThanOrEqualToZero", NULL);
 
     if (height <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayHeightCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayHeightCannotBeLessThanOrEqualToZero", NULL);
 
     if (dpi <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayDpiCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapDisplayDpiCannotBeLessThanOrEqualToZero", NULL);
 
     if (scale <= 0.0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapViewScaleCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapViewScaleCannotBeLessThanOrEqualToZero", NULL);
 
     if (metersPerUnit <= 0.0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapMetersPerUnitCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgMapMetersPerUnitCannotBeLessThanOrEqualToZero", NULL);
 
     // sanity check - number of image pixels cannot exceed MAX_PIXELS
     if (width * height > MAX_PIXELS)
-        throw new MgOutOfRangeException(L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
+        throw new MgException(MgExceptionCodes::MgOutOfRangeException, L"MgServerRenderingService.RenderMap", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
 
     double unitsPerPixel = METERS_PER_INCH / (double)dpi / metersPerUnit;
     double mapWidth2 = 0.5 * (double)width * unitsPerPixel * scale;
@@ -1322,10 +1319,7 @@
         {
             dstCs = m_pCSFactory->Create(srs);
         }
-        catch (MgInvalidCoordinateSystemException* e)
-        {
-            e->Release();
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgInvalidCoordinateSystemException)
     }
 
     RS_String units = dstCs.p? dstCs->GetUnits() : L"";
@@ -1438,14 +1432,14 @@
     CHECKARGUMENTNULL(backgroundColor, L"MgServerRenderingService.RenderMapLegend");
     // validate map view parameters
     if (width <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMapLegend", __LINE__, __WFILE__, NULL, L"MgMapDisplayWidthCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMapLegend", __LINE__, __WFILE__, NULL, L"MgMapDisplayWidthCannotBeLessThanOrEqualToZero", NULL);
 
     if (height <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMapLegend", __LINE__, __WFILE__, NULL, L"MgMapDisplayHeightCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMapLegend", __LINE__, __WFILE__, NULL, L"MgMapDisplayHeightCannotBeLessThanOrEqualToZero", NULL);
 
     // sanity check - number of image pixels cannot exceed MAX_PIXELS
     if (width * height > MAX_PIXELS)
-        throw new MgOutOfRangeException(L"MgServerRenderingService.RenderMapLegend", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
+        throw new MgException(MgExceptionCodes::MgOutOfRangeException, L"MgServerRenderingService.RenderMapLegend", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
 
     RS_Color bgcolor(backgroundColor->GetRed(),
                      backgroundColor->GetGreen(),
@@ -1543,7 +1537,7 @@
         arguments.Add(L"5");
         arguments.Add(buffer);
 
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderForSelection",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderForSelection",
             __LINE__, __WFILE__, &arguments, L"MgValueCannotBeLessThanZero", NULL);
     }
 
@@ -1561,19 +1555,19 @@
     double metersPerUnit = map->GetMetersPerUnit();
 
     if (width <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderForSelection", __LINE__, __WFILE__, NULL, L"MgMapDisplayWidthCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderForSelection", __LINE__, __WFILE__, NULL, L"MgMapDisplayWidthCannotBeLessThanOrEqualToZero", NULL);
 
     if (height <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderForSelection", __LINE__, __WFILE__, NULL, L"MgMapDisplayHeightCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderForSelection", __LINE__, __WFILE__, NULL, L"MgMapDisplayHeightCannotBeLessThanOrEqualToZero", NULL);
 
     if (dpi <= 0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderForSelection", __LINE__, __WFILE__, NULL, L"MgMapDisplayDpiCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderForSelection", __LINE__, __WFILE__, NULL, L"MgMapDisplayDpiCannotBeLessThanOrEqualToZero", NULL);
 
     if (scale <= 0.0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderForSelection", __LINE__, __WFILE__, NULL, L"MgMapViewScaleCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderForSelection", __LINE__, __WFILE__, NULL, L"MgMapViewScaleCannotBeLessThanOrEqualToZero", NULL);
 
     if (metersPerUnit <= 0.0)
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderForSelection", __LINE__, __WFILE__, NULL, L"MgMapMetersPerUnitCannotBeLessThanOrEqualToZero", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderForSelection", __LINE__, __WFILE__, NULL, L"MgMapMetersPerUnitCannotBeLessThanOrEqualToZero", NULL);
 
     // compute map extent that corresponds to pixel extent
     Ptr<MgPoint> pt          = map->GetViewCenter();
@@ -1903,20 +1897,26 @@
                     maxFeatures -= numFeaturesProcessed;
                 }
             }
-            catch (MgFdoException* e)
+            catch (MgException* e)
             {
-                //TODO: what should we really be doing in this case?
-                //This can happen if the underlying FDO provider does not
-                //support a particular spatial operation. One way around this
-                //is to select all features which appear on the screen and then
-                //do our own geometry math.
-                #ifdef _DEBUG
-                STRING error = e->GetExceptionMessage();
-                ACE_DEBUG((LM_INFO, ACE_TEXT("(%t) RenderForSelection() - Error: %S\n"), error.c_str()));
-                #endif
-
-                // Let's throw the exception here, so that it can be recorded in the error log.
-                throw e;
+                if (e->GetExceptionCode() == MgExceptionCodes::MgFdoException)
+                {
+                    //TODO: what should we really be doing in this case?
+                    //This can happen if the underlying FDO provider does not
+                    //support a particular spatial operation. One way around this
+                    //is to select all features which appear on the screen and then
+                    //do our own geometry math.
+#ifdef _DEBUG
+                    STRING error = e->GetExceptionMessage();
+                    ACE_DEBUG((LM_INFO, ACE_TEXT("(%t) RenderForSelection() - Error: %S\n"), error.c_str()));
+#endif
+                    // Let's throw the exception here, so that it can be recorded in the error log.
+                    throw e;
+                }
+                else
+                {
+                    e->Raise();
+                }
             }
         }
     }
@@ -2458,7 +2458,7 @@
 
     // if we don't find a nearest scale then something is wrong with the map
     if (scaleIndex < 0)
-        throw new MgInvalidMapDefinitionException(L"MgServerRenderingService.RenderMetatile", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidMapDefinitionException, L"MgServerRenderingService.RenderMetatile", __LINE__, __WFILE__, NULL, L"", NULL);
 
     // get the layer group associated with the name
     Ptr<MgLayerGroupCollection> layerGroups = map->GetLayerGroups();
@@ -2469,7 +2469,7 @@
         arguments.Add(L"2");
         arguments.Add(baseMapLayerGroupName);
 
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMetatile",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMetatile",
             __LINE__, __WFILE__, &arguments, L"MgMapLayerGroupNameNotFound", NULL);
     }
 
@@ -2529,7 +2529,7 @@
         arguments.Add(L"2");
         arguments.Add(baseMapLayerGroupName);
 
-        throw new MgInvalidArgumentException(L"MgServerRenderingService.RenderMetatileXYZ",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerRenderingService.RenderMetatileXYZ",
             __LINE__, __WFILE__, &arguments, L"MgMapLayerGroupNameNotFound", NULL);
     }
 
@@ -2574,7 +2574,7 @@
 
     // sanity check - number of image pixels cannot exceed MAX_PIXELS
     if (drawWidth * drawHeight > MAX_PIXELS)
-        throw new MgOutOfRangeException(L"MgServerRenderingService.RenderMetatileXYZ", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
+        throw new MgException(MgExceptionCodes::MgOutOfRangeException, L"MgServerRenderingService.RenderMetatileXYZ", __LINE__, __WFILE__, NULL, L"MgInvalidImageSizeTooBig", NULL);
 
     // initialize the renderer (set clipping to false so that we label
     // the unclipped geometry)
@@ -2803,7 +2803,7 @@
             bs->SetMimeType(MgMimeType::Meta);
     }
     else
-        throw new MgNullReferenceException(L"MgImageProcessor.CreateImageFromRenderer", __LINE__, __WFILE__, NULL, L"MgNoDataFromRenderer", NULL);
+        throw new MgException(MgExceptionCodes::MgNullReferenceException, L"MgImageProcessor.CreateImageFromRenderer", __LINE__, __WFILE__, NULL, L"MgNoDataFromRenderer", NULL);
 
     if (NULL != pPRMResult)
     {

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ApplicationRepositoryManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ApplicationRepositoryManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ApplicationRepositoryManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -75,7 +75,7 @@
     {
         MG_LOG_AUTHENTICATION_ENTRY(MgResources::UnauthorizedAccess.c_str());
 
-        throw new MgUnauthorizedAccessException(
+        throw new MgException(MgExceptionCodes::MgUnauthorizedAccessException, 
             L"MgApplicationRepositoryManager.MgApplicationRepositoryManager",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -117,7 +117,7 @@
 
     if (NULL == resourceService)
     {
-        throw new MgServiceNotAvailableException(
+        throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, 
             L"MgApplicationRepositoryManager.Create",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -137,7 +137,7 @@
 
     if (NULL == appResourceContentMan)
     {
-        throw new MgInvalidCastException(
+        throw new MgException(MgExceptionCodes::MgInvalidCastException, 
             L"MgApplicationResourceContentManager.GetApplicationResourceContentManager",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -186,7 +186,7 @@
 
     if (!resource->IsRoot())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgApplicationRepositoryManager.UpdateRepository",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -257,7 +257,7 @@
 
     if (!resource->IsRoot())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgApplicationRepositoryManager.GetRepositoryContent",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -286,7 +286,7 @@
 MgByteReader* MgApplicationRepositoryManager::GetRepositoryHeader(
     MgResourceIdentifier* resource)
 {
-    throw new MgNotImplementedException(
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, 
         L"MgApplicationRepositoryManager.GetRepositoryHeader",
         __LINE__, __WFILE__, NULL, L"", NULL);
 
@@ -307,7 +307,7 @@
     MgResourceIdentifier* resource, INT32 depth, CREFSTRING type,
     INT32 properties, CREFSTRING fromDate, CREFSTRING toDate, bool computeChildren)
 {
-    throw new MgNotImplementedException(
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, 
         L"MgApplicationRepositoryManager.EnumerateResources",
         __LINE__, __WFILE__, NULL, L"", NULL);
 
@@ -336,7 +336,7 @@
 
     if (resource->IsFolder())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgApplicationRepositoryManager.GetResourceContent",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -369,7 +369,7 @@
     }
     else
     {
-        throw new MgInvalidResourcePreProcessingTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourcePreProcessingTypeException, 
             L"MgApplicationRepositoryManager.GetResourceContent",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -392,7 +392,7 @@
 MgByteReader* MgApplicationRepositoryManager::GetResourceHeader(
     MgResourceIdentifier* resource)
 {
-    throw new MgNotImplementedException(
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, 
         L"MgApplicationRepositoryManager.GetResourceHeader",
         __LINE__, __WFILE__, NULL, L"", NULL);
 
@@ -426,7 +426,7 @@
         arguments.Add(L"1");
         arguments.Add(sourceResource->ToString());
 
-        throw new MgInvalidArgumentException(L"MgApplicationRepositoryManager.MoveResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgApplicationRepositoryManager.MoveResource",
             __LINE__, __WFILE__, &arguments, L"MgInvalidResourceCannotBeRoot", NULL);
     }
 
@@ -437,7 +437,7 @@
         arguments.Add(L"2");
         arguments.Add(destResource->ToString());
 
-        throw new MgInvalidArgumentException(L"MgApplicationRepositoryManager.MoveResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgApplicationRepositoryManager.MoveResource",
             __LINE__, __WFILE__, &arguments, L"MgInvalidResourceCannotBeRoot", NULL);
     }
 
@@ -450,7 +450,7 @@
         arguments.Add(L"2");
         arguments.Add(destResource->ToString());
 
-        throw new MgInvalidArgumentException(L"MgApplicationRepositoryManager.MoveResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgApplicationRepositoryManager.MoveResource",
             __LINE__, __WFILE__, &arguments, L"MgResourceRootPathsDifferent", NULL);
     }
 
@@ -463,7 +463,7 @@
         arguments.Add(L"2");
         arguments.Add(destResource->ToString());
 
-        throw new MgInvalidArgumentException(L"MgApplicationRepositoryManager.MoveResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgApplicationRepositoryManager.MoveResource",
             __LINE__, __WFILE__, &arguments, L"MgResourceTypesDifferent", NULL);
     }
 
@@ -476,7 +476,7 @@
         arguments.Add(L"2");
         arguments.Add(destResource->ToString());
 
-        throw new MgInvalidArgumentException(L"MgApplicationRepositoryManager.MoveResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgApplicationRepositoryManager.MoveResource",
             __LINE__, __WFILE__, &arguments, L"MgResourcesIdentical", NULL);
     }
 
@@ -573,7 +573,7 @@
         arguments.Add(L"1");
         arguments.Add(sourceResource->ToString());
 
-        throw new MgInvalidArgumentException(L"MgApplicationRepositoryManager.CopyResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgApplicationRepositoryManager.CopyResource",
             __LINE__, __WFILE__, &arguments, L"MgInvalidResourceCannotBeRoot", NULL);
     }
 
@@ -584,7 +584,7 @@
         arguments.Add(L"2");
         arguments.Add(destResource->ToString());
 
-        throw new MgInvalidArgumentException(L"MgApplicationRepositoryManager.CopyResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgApplicationRepositoryManager.CopyResource",
             __LINE__, __WFILE__, &arguments, L"MgInvalidResourceCannotBeRoot", NULL);
     }
 
@@ -597,7 +597,7 @@
         arguments.Add(L"2");
         arguments.Add(destResource->ToString());
 
-        throw new MgInvalidArgumentException(L"MgApplicationRepositoryManager.CopyResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgApplicationRepositoryManager.CopyResource",
             __LINE__, __WFILE__, &arguments, L"MgResourceTypesDifferent", NULL);
     }
 
@@ -610,7 +610,7 @@
         arguments.Add(L"2");
         arguments.Add(destResource->ToString());
 
-        throw new MgInvalidArgumentException(L"MgApplicationRepositoryManager.CopyResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgApplicationRepositoryManager.CopyResource",
             __LINE__, __WFILE__, &arguments, L"MgResourcesIdentical", NULL);
     }
 
@@ -816,7 +816,7 @@
 
     if (resource->IsFolder())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgApplicationRepositoryManager.EnumerateResourceData",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -855,7 +855,7 @@
 
     if (resource->IsFolder())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgApplicationRepositoryManager.SetResourceData",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -923,7 +923,7 @@
                 MgStringCollection arguments;
                 arguments.Add(dataName);
 
-                throw new MgDuplicateResourceDataException(
+                throw new MgException(MgExceptionCodes::MgDuplicateResourceDataException, 
                     L"MgApplicationRepositoryManager.SetResourceData",
                     __LINE__, __WFILE__, &arguments, L"", NULL);
             }
@@ -951,7 +951,7 @@
 
             if (!cryptoManager.IsStringEncrypted(dataValue))
             {
-                throw new MgDecryptionException(
+                throw new MgException(MgExceptionCodes::MgDecryptionException, 
                     L"MgApplicationRepositoryManager.SetResourceData",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
@@ -961,7 +961,7 @@
     }
     else
     {
-        throw new MgInvalidResourceDataTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceDataTypeException, 
             L"MgApplicationRepositoryManager.SetResourceData",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -995,7 +995,7 @@
 
     if (resource->IsFolder())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgApplicationRepositoryManager.DeleteResourceData",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1044,7 +1044,7 @@
     }
     else if (MgResourceDataType::String != dataType)
     {
-        throw new MgInvalidResourceDataTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceDataTypeException, 
             L"MgApplicationRepositoryManager.DeleteResourceData",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1085,13 +1085,13 @@
         arguments.Add(L"2");
         arguments.Add(newDataName);
 
-        throw new MgInvalidArgumentException(L"MgApplicationRepositoryManager.RenameResourceData",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgApplicationRepositoryManager.RenameResourceData",
             __LINE__, __WFILE__, &arguments, L"MgFilenamesIdentical", NULL);
     }
 
     if (resource->IsFolder())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgApplicationRepositoryManager.RenameResourceData",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1137,7 +1137,7 @@
     }
     else
     {
-        throw new MgInvalidResourceDataTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceDataTypeException, 
             L"MgApplicationRepositoryManager.RenameResourceData",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1173,7 +1173,7 @@
 
     if (resource->IsFolder())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgApplicationRepositoryManager.RenameResourceData",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1250,7 +1250,7 @@
     }
     else
     {
-        throw new MgInvalidResourceDataTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceDataTypeException, 
             L"MgApplicationRepositoryManager.GetResourceData",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1287,7 +1287,7 @@
     }
     else if (!preProcessTags.empty())
     {
-        throw new MgInvalidResourcePreProcessingTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourcePreProcessingTypeException, 
             L"MgApplicationRepositoryManager.GetResourceData",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/DbEnvironment.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/DbEnvironment.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/DbEnvironment.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -262,7 +262,7 @@
 
             if (dbName.empty())
             {
-                throw new MgNullReferenceException(L"MgDbEnvironment.ResetDatabase",
+                throw new MgException(MgExceptionCodes::MgNullReferenceException, L"MgDbEnvironment.ResetDatabase",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/LibraryRepositoryManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/LibraryRepositoryManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/LibraryRepositoryManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -114,7 +114,7 @@
 
     if (!resource->IsRoot())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgLibraryRepositoryManager.GetRepositoryHeader",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -251,7 +251,7 @@
     {
         if (0 != depth)
         {
-            throw new MgArgumentOutOfRangeException(
+            throw new MgException(MgExceptionCodes::MgArgumentOutOfRangeException, 
                 L"MgLibraryRepositoryManager.EnumerateResources",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -258,7 +258,7 @@
 
         if (!type.empty() && !resource->IsResourceTypeOf(type))
         {
-            throw new MgInvalidResourceTypeException(
+            throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
                 L"MgLibraryRepositoryManager.EnumerateResources",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -268,7 +268,7 @@
 
     if (!toDate.empty() && fromDate > toDate)
     {
-        throw new MgArgumentOutOfRangeException(
+        throw new MgException(MgExceptionCodes::MgArgumentOutOfRangeException, 
             L"MgLibraryRepositoryManager.EnumerateResources",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -301,7 +301,7 @@
         CHECKARGUMENTNULL(resources, L"MgLibraryRepositoryManager.EnumerateResourceDocuments");
         if (resources->GetCount() <= 0)
         {
-            throw new MgNullArgumentException(
+            throw new MgException(MgExceptionCodes::MgNullArgumentException, 
                 L"MgLibraryRepositoryManager.EnumerateResourceDocuments",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -312,7 +312,7 @@
 
         if (MgResourceType::Folder == type)
         {
-            throw new MgInvalidResourceTypeException(
+            throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
                 L"MgLibraryRepositoryManager.EnumerateResourceDocuments",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -350,7 +350,7 @@
 
     if (resource->IsRoot())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgLibraryRepositoryManager.GetResourceHeader",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -437,7 +437,7 @@
 
     if (!resource->IsFolder())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgLibraryRepositoryManager.InheritPermissionsFrom",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/LibraryResourceContentManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/LibraryResourceContentManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/LibraryResourceContentManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -233,7 +233,7 @@
             }
             else
             {
-                throw new MgInvalidResourceDataTypeException(
+                throw new MgException(MgExceptionCodes::MgInvalidResourceDataTypeException, 
                     L"MgLibraryResourceContentManager.PackageResource",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpApplyResourcePackage.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpApplyResourcePackage.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpApplyResourcePackage.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -86,7 +86,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpApplyResourcePackage.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpApplyResourcePackage.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpChangeResourceOwner.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpChangeResourceOwner.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpChangeResourceOwner.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpChangeResourceOwner.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpChangeResourceOwner.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpCopyResource.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpCopyResource.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpCopyResource.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpCopyResource.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpCopyResource.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpCreateRepository.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpCreateRepository.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpCreateRepository.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -93,7 +93,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpCreateRepository.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpCreateRepository.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteRepository.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteRepository.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteRepository.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDeleteRepository.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDeleteRepository.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteResource.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteResource.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteResource.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDeleteResource.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDeleteResource.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteResourceData.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteResourceData.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpDeleteResourceData.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -91,7 +91,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDeleteResourceData.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDeleteResourceData.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateParentMapDefinitions.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateParentMapDefinitions.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateParentMapDefinitions.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -88,7 +88,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateParentMapDefinitions.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateParentMapDefinitions.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateParentTileSetDefinitions.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateParentTileSetDefinitions.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateParentTileSetDefinitions.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -88,7 +88,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateParentTileSetDefinitions.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateParentTileSetDefinitions.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateRepositories.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateRepositories.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateRepositories.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateRepositories.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateRepositories.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceData.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceData.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceData.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateResourceData.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateResourceData.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceDocuments.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceDocuments.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceDocuments.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -96,7 +96,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateResourceDocuments.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateResourceDocuments.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceReferences.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceReferences.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResourceReferences.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateResourceReferences.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateResourceReferences.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResources.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResources.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateResources.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -113,7 +113,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateResources.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateResources.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateUnmanagedData.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateUnmanagedData.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpEnumerateUnmanagedData.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -98,7 +98,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateUnmanagedData.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateUnmanagedData.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetRepositoryContent.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetRepositoryContent.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetRepositoryContent.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetRepositoryContent.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetRepositoryContent.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetRepositoryHeader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetRepositoryHeader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetRepositoryHeader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetRepositoryHeader.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetRepositoryHeader.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceContent.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceContent.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceContent.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -110,7 +110,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetResourceContent.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetResourceContent.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceContents.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceContents.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceContents.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -108,7 +108,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetResourceContents.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetResourceContents.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceData.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceData.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceData.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -114,7 +114,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetResourceData.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetResourceData.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceHeader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceHeader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceHeader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetResourceHeader.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetResourceHeader.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceModifiedDate.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceModifiedDate.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpGetResourceModifiedDate.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -83,7 +83,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetResourceModifiedDate.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetResourceModifiedDate.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpInheritPermissionsFrom.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpInheritPermissionsFrom.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpInheritPermissionsFrom.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpInheritPermissionsFrom.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpInheritPermissionsFrom.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpMoveResource.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpMoveResource.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpMoveResource.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -102,7 +102,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpMoveResource.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpMoveResource.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpRenameResourceData.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpRenameResourceData.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpRenameResourceData.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -99,7 +99,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenameResourceData.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenameResourceData.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpResourceExists.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpResourceExists.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpResourceExists.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -80,7 +80,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpResourceExists.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpResourceExists.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpSetResource.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpSetResource.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpSetResource.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -93,7 +93,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSetResource.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSetResource.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpSetResourceData.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpSetResourceData.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpSetResourceData.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -97,7 +97,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSetResourceData.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSetResourceData.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpUpdateRepository.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpUpdateRepository.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OpUpdateRepository.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -92,7 +92,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpUpdateRepository.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpUpdateRepository.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OperationInfo.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OperationInfo.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/OperationInfo.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -66,7 +66,7 @@
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, 
             L"MgOperationInfo.MgOperationInfo",
             __LINE__, __WFILE__, &arguments, L"MgStringEmpty", NULL);
     }
@@ -149,7 +149,7 @@
         MgStringCollection arguments;
         arguments.Add(name);
 
-        throw new MgParameterNotFoundException(
+        throw new MgException(MgExceptionCodes::MgParameterNotFoundException, 
             L"MgOperationInfo.GetParameter", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
@@ -175,7 +175,7 @@
         MgStringCollection arguments;
         arguments.Add(name);
 
-        throw new MgDuplicateParameterException(
+        throw new MgException(MgExceptionCodes::MgDuplicateParameterException, 
             L"MgOperationInfo.SetParameter", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/Repository.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/Repository.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/Repository.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -82,7 +82,7 @@
         MgStringCollection arguments;
         arguments.Add(pathname);
 
-        throw new MgRepositoryOpenFailedException(
+        throw new MgException(MgExceptionCodes::MgRepositoryOpenFailedException, 
             L"MgRepository.VerifyAccess",
             __LINE__, __WFILE__, &arguments, L"MgRepositoryAlreadyOpened", NULL);
     }
@@ -107,7 +107,7 @@
             MgUtil::Int32ToString(MG_DBXML_CURRENT_VERSION, version);
             whyArguments.Add(version);
 
-            throw new MgRepositoryOpenFailedException(
+            throw new MgException(MgExceptionCodes::MgRepositoryOpenFailedException, 
                 L"MgRepository.VerifyAccess",
                 __LINE__, __WFILE__, &whatArguments, L"MgRepositoryVersionMismatch", &whyArguments);
         }
@@ -138,7 +138,7 @@
     }
     else
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgRepository.IsTypeOf",
             __LINE__,  __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/RepositoryManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/RepositoryManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/RepositoryManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -117,7 +117,7 @@
 
     if (!m_transacted || NULL != m_dbTxn || NULL != m_xmlTxn.get())
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgRepositoryManager.CreateTransaction",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -136,7 +136,7 @@
     }
     else
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgRepositoryManager.CreateTransaction",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -153,7 +153,7 @@
 {
     if (!m_transacted)
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgRepositoryManager.ValidateTransaction",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -224,7 +224,7 @@
     {
         arguments.Add(resource.ToString());
 
-        throw new MgRepositoryNotFoundException(
+        throw new MgException(MgExceptionCodes::MgRepositoryNotFoundException, 
             methodName, lineNumber, fileName, &arguments, L"", NULL);
     }
     else if (resource.IsResourceTypeOf(MgResourceType::User))
@@ -231,7 +231,7 @@
     {
         arguments.Add(resource.GetName());
 
-        throw new MgUserNotFoundException(
+        throw new MgException(MgExceptionCodes::MgUserNotFoundException, 
             methodName, lineNumber, fileName, &arguments, L"", NULL);
     }
     else if (resource.IsResourceTypeOf(MgResourceType::Group))
@@ -238,7 +238,7 @@
     {
         arguments.Add(resource.GetName());
 
-        throw new MgGroupNotFoundException(
+        throw new MgException(MgExceptionCodes::MgGroupNotFoundException, 
             methodName, lineNumber, fileName, &arguments, L"", NULL);
     }
     else if (resource.IsResourceTypeOf(MgResourceType::Role))
@@ -245,7 +245,7 @@
     {
         arguments.Add(resource.GetName());
 
-        throw new MgRoleNotFoundException(
+        throw new MgException(MgExceptionCodes::MgRoleNotFoundException, 
             methodName, lineNumber, fileName, &arguments, L"", NULL);
     }
     else
@@ -252,7 +252,7 @@
     {
         arguments.Add(resource.ToString());
 
-        throw new MgResourceNotFoundException(
+        throw new MgException(MgExceptionCodes::MgResourceNotFoundException, 
             methodName, lineNumber, fileName, &arguments, L"", NULL);
     }
 }
@@ -280,7 +280,7 @@
     {
         arguments.Add(resource.ToString());
 
-        throw new MgDuplicateRepositoryException(
+        throw new MgException(MgExceptionCodes::MgDuplicateRepositoryException, 
             methodName, lineNumber, fileName, &arguments, L"", NULL);
     }
     else if (resource.IsResourceTypeOf(MgResourceType::User))
@@ -287,7 +287,7 @@
     {
         arguments.Add(resource.GetName());
 
-        throw new MgDuplicateUserException(
+        throw new MgException(MgExceptionCodes::MgDuplicateUserException, 
             methodName, lineNumber, fileName, &arguments, L"", NULL);
     }
     else if (resource.IsResourceTypeOf(MgResourceType::Group))
@@ -294,7 +294,7 @@
     {
         arguments.Add(resource.GetName());
 
-        throw new MgDuplicateGroupException(
+        throw new MgException(MgExceptionCodes::MgDuplicateGroupException, 
             methodName, lineNumber, fileName, &arguments, L"", NULL);
     }
     else if (resource.IsResourceTypeOf(MgResourceType::Role))
@@ -301,7 +301,7 @@
     {
         arguments.Add(resource.GetName());
 
-        throw new MgDuplicateRoleException(
+        throw new MgException(MgExceptionCodes::MgDuplicateRoleException, 
             methodName, lineNumber, fileName, &arguments, L"", NULL);
     }
     else
@@ -308,7 +308,7 @@
     {
         arguments.Add(resource.ToString());
 
-        throw new MgDuplicateResourceException(
+        throw new MgException(MgExceptionCodes::MgDuplicateResourceException, 
             methodName, lineNumber, fileName, &arguments, L"", NULL);
     }
 }
@@ -325,7 +325,7 @@
 
 MgByteReader* MgRepositoryManager::EnumerateRepositories()
 {
-    throw new MgNotImplementedException(
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, 
         L"MgRepositoryManager.EnumerateRepositories",
         __LINE__, __WFILE__, NULL, L"", NULL);
 
@@ -353,7 +353,7 @@
 
     if (!resource->IsRoot())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgRepositoryManager.CreateRepository", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -382,7 +382,7 @@
         arguments.Add(L"3");
         arguments.Add(L"MgByteReader");
 
-        throw new MgInvalidArgumentException(L"MgRepositoryManager.CreateRepository",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgRepositoryManager.CreateRepository",
             __LINE__, __WFILE__, &arguments, L"MgHeaderDocumentNotEmpty", NULL);
     }
 
@@ -414,7 +414,7 @@
 
 void MgRepositoryManager::DeleteRepository(MgResourceIdentifier* resource)
 {
-    throw new MgNotImplementedException(
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, 
         L"MgRepositoryManager.DeleteRepository",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
@@ -442,7 +442,7 @@
     {
         if (resource->IsRoot())
         {
-            throw new MgInvalidResourceTypeException(
+            throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
                 L"MgRepositoryManager.AddResource", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -452,7 +452,7 @@
             arguments.Add(L"2");
             arguments.Add(L"MgByteReader");
 
-            throw new MgInvalidArgumentException(L"MgRepositoryManager.AddResource",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgRepositoryManager.AddResource",
                 __LINE__, __WFILE__, &arguments, L"MgContentNotNull", NULL);
         }
     }
@@ -487,7 +487,7 @@
         arguments.Add(L"3");
         arguments.Add(L"MgByteReader");
 
-        throw new MgInvalidArgumentException(L"MgRepositoryManager.AddResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgRepositoryManager.AddResource",
             __LINE__, __WFILE__, &arguments, L"MgHeaderDocumentNotEmpty", NULL);
     }
 
@@ -501,7 +501,7 @@
         MgStringCollection arguments;
         arguments.Add(resource->GetRootPath());
 
-        throw new MgRepositoryNotFoundException(
+        throw new MgException(MgExceptionCodes::MgRepositoryNotFoundException, 
             L"MgRepositoryManager.AddResource",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -525,7 +525,7 @@
         arguments.Add(L"2");
         arguments.Add(L"MgByteReader");
 
-        throw new MgInvalidArgumentException(L"MgRepositoryManager.AddResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgRepositoryManager.AddResource",
             __LINE__, __WFILE__, &arguments, L"MgContentDocumentNotEmpty", NULL);
     }
 
@@ -618,7 +618,7 @@
     {
         if (resource->IsRoot())
         {
-            throw new MgInvalidResourceTypeException(
+            throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
                 L"MgRepositoryManager.UpdateResource", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -628,7 +628,7 @@
             arguments.Add(L"2");
             arguments.Add(L"MgByteReader");
 
-            throw new MgInvalidArgumentException(L"MgRepositoryManager.UpdateResource",
+            throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgRepositoryManager.UpdateResource",
                 __LINE__, __WFILE__, &arguments, L"MgContentNotNull", NULL);
         }
 
@@ -638,7 +638,7 @@
     {
         if (NULL == content && NULL == header)
         {
-            throw new MgNullArgumentException(
+            throw new MgException(MgExceptionCodes::MgNullArgumentException, 
                 L"MgRepositoryManager.UpdateResource", __LINE__, __WFILE__, NULL, L"", NULL);
         }
     }
@@ -693,7 +693,7 @@
 ///
 void MgRepositoryManager::DeleteResourceData(CREFSTRING resourceTags, MgResourceIdentifier* resource)
 {
-    throw new MgNotImplementedException(
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, 
         L"MgRepositoryManager.DeleteResourceData",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }
@@ -706,7 +706,7 @@
 void MgRepositoryManager::CopyResourceData(CREFSTRING sourceResourceTags,
     REFSTRING destResourceTags, bool overwrite)
 {
-    throw new MgNotImplementedException(
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, 
         L"MgRepositoryManager.CopyResourceData",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceContentManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceContentManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceContentManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -58,7 +58,7 @@
 
 MgByteReader* MgResourceContentManager::EnumerateRepositories()
 {
-    throw new MgNotImplementedException(
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, 
         L"MgResourceContentManager.EnumerateRepositories",
         __LINE__, __WFILE__, NULL, L"", NULL);
 
@@ -547,7 +547,7 @@
     if (!valid)
     {
         // TODO: Throw a more specific exception?
-        throw new MgXmlParserException(L"MgResourceContentManager.ValidateDocument",
+        throw new MgException(MgExceptionCodes::MgXmlParserException, L"MgResourceContentManager.ValidateDocument",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDataFileManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDataFileManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDataFileManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -43,7 +43,7 @@
         arguments.Add(L"1");
         arguments.Add(MgResources::BlankArgument);
 
-        throw new MgInvalidArgumentException(L"MgResourceDataFileManager.MgResourceDataFileManager",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgResourceDataFileManager.MgResourceDataFileManager",
             __LINE__, __WFILE__, &arguments, L"MgResourceDataFilePathEmpty", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDataStreamManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDataStreamManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDataStreamManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -79,7 +79,7 @@
     CHECKNULL(dataBuffer, L"MgResourceDataStreamManager.SetResourceData");
     if (0 == dataSize)
     {
-        throw new MgNullArgumentException(
+        throw new MgException(MgExceptionCodes::MgNullArgumentException, 
             L"MgResourceDataStreamManager.SetResourceData",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -133,7 +133,7 @@
         MgStringCollection arguments;
         arguments.Add(dataName);
 
-        throw new MgResourceDataNotFoundException(
+        throw new MgException(MgExceptionCodes::MgResourceDataNotFoundException, 
             L"MgResourceDataStreamManager.DeleteResourceData",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -186,7 +186,7 @@
         MgStringCollection arguments;
         arguments.Add(dataName);
 
-        throw new MgResourceDataNotFoundException(
+        throw new MgException(MgExceptionCodes::MgResourceDataNotFoundException, 
             L"MgResourceDataStreamManager.CopyResourceData",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -241,7 +241,7 @@
         MgStringCollection arguments;
         arguments.Add(dataName);
 
-        throw new MgResourceDataNotFoundException(
+        throw new MgException(MgExceptionCodes::MgResourceDataNotFoundException, 
             L"MgResourceDataStreamManager.GetResourceData",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDefinitionManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDefinitionManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceDefinitionManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -72,7 +72,7 @@
 
 void MgResourceDefinitionManager::DeleteRepository(MgResourceIdentifier* resource)
 {
-    throw new MgNotImplementedException(
+    throw new MgException(MgExceptionCodes::MgNotImplementedException, 
         L"MgResourceDefinitionManager.DeleteRepository",
         __LINE__, __WFILE__, NULL, L"", NULL);
 }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceHeader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceHeader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceHeader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -63,7 +63,7 @@
 
     if (NULL != m_xmlUtil.get() || NULL != m_resourceInfo.get())
     {
-        throw new MgInvalidOperationException(L"MgResourceHeader.Initialize",
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgResourceHeader.Initialize",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -174,7 +174,7 @@
 {
     if (NULL == m_resourceInfo.get())
     {
-        throw new MgNullReferenceException(L"MgResourceHeader.GetResourceInfo",
+        throw new MgException(MgExceptionCodes::MgNullReferenceException, L"MgResourceHeader.GetResourceInfo",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -277,7 +277,7 @@
                 MgStringCollection arguments;
                 arguments.Add(wcParentId);
 
-                throw new MgResourceNotFoundException(
+                throw new MgException(MgExceptionCodes::MgResourceNotFoundException, 
                     L"MgResourceHeader.GetDocument",
                     __LINE__, __WFILE__, &arguments, L"", NULL);
             }
@@ -305,7 +305,7 @@
     }
     else
     {
-        throw new MgXmlParserException(L"MgResourceHeader.GetDocument",
+        throw new MgException(MgExceptionCodes::MgXmlParserException, L"MgResourceHeader.GetDocument",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -326,7 +326,7 @@
 {
     if (NULL == m_xmlUtil.get() || NULL == m_resourceInfo.get())
     {
-        throw new MgNullReferenceException(
+        throw new MgException(MgExceptionCodes::MgNullReferenceException, 
             L"MgResourceHeader.CheckInitialization", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 }
@@ -347,7 +347,7 @@
 
     if (!IsFilteredOn(MgResourceHeaderProperties::Security))
     {
-        throw new MgInvalidOperationException(L"MgResourceHeader.GetSecurity",
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgResourceHeader.GetSecurity",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -374,7 +374,7 @@
 
     if (!IsFilteredOn(MgResourceHeaderProperties::Security))
     {
-        throw new MgInvalidOperationException(L"MgResourceHeader.SetSecurity",
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"MgResourceHeader.SetSecurity",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceHeaderManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceHeaderManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceHeaderManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -595,7 +595,7 @@
             MgStringCollection arguments;
             arguments.Add(resource.ToString());
 
-            throw new MgInvalidResourceNameException(
+            throw new MgException(MgExceptionCodes::MgInvalidResourceNameException, 
                 L"MgResourceHeaderManager.AddParentResources",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -988,7 +988,7 @@
     else
     {
         // TODO: Throw a more specific exception?
-        throw new MgXmlParserException(
+        throw new MgException(MgExceptionCodes::MgXmlParserException, 
             L"MgResourceHeaderManager.GetResourceModifiedDate",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1129,7 +1129,7 @@
         MgStringCollection arguments;
         arguments.Add(owner);
 
-        throw new MgUserNotFoundException(
+        throw new MgException(MgExceptionCodes::MgUserNotFoundException, 
             L"MgResourceHeaderManager.ChangeResourceOwner",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -1253,7 +1253,7 @@
             MgStringCollection arguments;
             arguments.Add(resource->ToString());
 
-            throw new MgPermissionDeniedException(
+            throw new MgException(MgExceptionCodes::MgPermissionDeniedException, 
                 L"MgResourceHeaderManager.ChangeResourceOwner",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1383,7 +1383,7 @@
             MgStringCollection arguments;
             arguments.Add(resource->ToString());
 
-            throw new MgPermissionDeniedException(
+            throw new MgException(MgExceptionCodes::MgPermissionDeniedException, 
                 L"MgResourceHeaderManager.InheritPermissionsFrom",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1571,7 +1571,7 @@
     else
     {
         // TODO: Throw a more specific exception?
-        throw new MgXmlParserException(
+        throw new MgException(MgExceptionCodes::MgXmlParserException, 
             L"MgResourceHeaderManager.CreatePermissionInfo",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1590,7 +1590,7 @@
     }
     else
     {
-        throw new MgXmlParserException(
+        throw new MgException(MgExceptionCodes::MgXmlParserException, 
             L"MgResourceHeaderManager.CreatePermissionInfo",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1608,7 +1608,7 @@
 
         if (nameResults.size() != permissionResults.size())
         {
-            throw new MgXmlParserException(
+            throw new MgException(MgExceptionCodes::MgXmlParserException, 
                 L"MgResourceHeaderManager.CreatePermissionInfo",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1631,7 +1631,7 @@
 
         if (nameResults.size() != permissionResults.size())
         {
-            throw new MgXmlParserException(
+            throw new MgException(MgExceptionCodes::MgXmlParserException, 
                 L"MgResourceHeaderManager.CreatePermissionInfo",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1726,7 +1726,7 @@
             MgStringCollection arguments;
             arguments.Add(resource.ToString());
 
-            throw new MgInvalidResourceNameException(
+            throw new MgException(MgExceptionCodes::MgInvalidResourceNameException, 
                 L"MgResourceHeaderManager.GetParentResources",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -2347,7 +2347,7 @@
         MgStringCollection arguments;
         arguments.Add(MgUtil::MultiByteToWideChar(xmlDoc.getName()));
 
-        throw new MgPermissionDeniedException(
+        throw new MgException(MgExceptionCodes::MgPermissionDeniedException, 
             L"MgResourceHeaderManager.CheckOwnership",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -2446,7 +2446,7 @@
         {
             MG_LOG_AUTHENTICATION_ENTRY(MgResources::UnauthorizedAccess.c_str());
 
-            throw new MgUnauthorizedAccessException(
+            throw new MgException(MgExceptionCodes::MgUnauthorizedAccessException, 
                 L"MgResourceHeaderManager.CheckPermission",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -2548,7 +2548,7 @@
                         MgStringCollection arguments;
                         arguments.Add(currPathname);
 
-                        throw new MgPermissionDeniedException(
+                        throw new MgException(MgExceptionCodes::MgPermissionDeniedException, 
                             L"MgResourceHeaderManager.CheckPermission",
                             __LINE__, __WFILE__, &arguments, L"", NULL);
                     }
@@ -2603,7 +2603,7 @@
                     MgStringCollection arguments;
                     arguments.Add(currPathname);
 
-                    throw new MgPermissionDeniedException(
+                    throw new MgException(MgExceptionCodes::MgPermissionDeniedException, 
                         L"MgResourceHeaderManager.CheckPermission",
                         __LINE__, __WFILE__, &arguments, L"", NULL);
                 }
@@ -2675,7 +2675,7 @@
     if (!valid)
     {
         // TODO: Throw a more specific exception?
-        throw new MgXmlParserException(L"MgResourceHeaderManager.ValidateDocument",
+        throw new MgException(MgExceptionCodes::MgXmlParserException, L"MgResourceHeaderManager.ValidateDocument",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceOperationFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceOperationFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceOperationFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -107,7 +107,7 @@
             handler.reset(new MgOpEnumerateRepositories());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -119,7 +119,7 @@
             handler.reset(new MgOpCreateRepository());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -131,7 +131,7 @@
             handler.reset(new MgOpDeleteRepository());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -143,7 +143,7 @@
             handler.reset(new MgOpUpdateRepository());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -155,7 +155,7 @@
             handler.reset(new MgOpGetRepositoryContent());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -167,7 +167,7 @@
             handler.reset(new MgOpGetRepositoryHeader());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -179,7 +179,7 @@
             handler.reset(new MgOpApplyResourcePackage());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -191,7 +191,7 @@
             handler.reset(new MgOpResourceExists());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -203,7 +203,7 @@
             handler.reset(new MgOpEnumerateResources());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -215,7 +215,7 @@
             handler.reset(new MgOpEnumerateResourceDocuments());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -227,7 +227,7 @@
             handler.reset(new MgOpSetResource());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -239,7 +239,7 @@
             handler.reset(new MgOpDeleteResource());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -252,7 +252,7 @@
             handler.reset(new MgOpMoveResource());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -264,7 +264,7 @@
             handler.reset(new MgOpCopyResource());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -276,7 +276,7 @@
             handler.reset(new MgOpGetResourceContent());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -288,7 +288,7 @@
             handler.reset(new MgOpGetResourceContents());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -300,7 +300,7 @@
             handler.reset(new MgOpGetResourceHeader());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -312,7 +312,7 @@
             handler.reset(new MgOpGetResourceModifiedDate());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -324,7 +324,7 @@
             handler.reset(new MgOpEnumerateResourceReferences());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -336,7 +336,7 @@
             handler.reset(new MgOpEnumerateParentMapDefinitions());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -348,7 +348,7 @@
             handler.reset(new MgOpEnumerateParentTileSetDefinitions());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -360,7 +360,7 @@
             handler.reset(new MgOpChangeResourceOwner());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -372,7 +372,7 @@
             handler.reset(new MgOpInheritPermissionsFrom());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -384,7 +384,7 @@
             handler.reset(new MgOpEnumerateResourceData());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -396,7 +396,7 @@
             handler.reset(new MgOpSetResourceData());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -408,7 +408,7 @@
             handler.reset(new MgOpDeleteResourceData());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -420,7 +420,7 @@
             handler.reset(new MgOpRenameResourceData());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -432,7 +432,7 @@
             handler.reset(new MgOpGetResourceData());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -444,13 +444,13 @@
             handler.reset(new MgOpEnumerateUnmanagedData());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
 
     default:
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgResourceOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourcePackageLoader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourcePackageLoader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourcePackageLoader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -58,7 +58,7 @@
 
     if (!resource->IsRepositoryTypeOf(MgRepositoryType::Library))
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgResourcePackageLoader.CreateResourceIdentifier",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourcePackageMaker.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourcePackageMaker.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourcePackageMaker.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -55,7 +55,7 @@
 
     if (!resource.IsRepositoryTypeOf(MgRepositoryType::Library))
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgResourcePackageMaker.GeneratePathnames",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceServiceDefs.h
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceServiceDefs.h	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ResourceServiceDefs.h	2020-10-21 14:38:32 UTC (rev 9747)
@@ -56,8 +56,8 @@
         }                                                                     \
                                                                               \
         arguments.Add(message);                                               \
-        mgException = new MgDbXmlException(methodName, __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments); \
-        (static_cast<MgThirdPartyException*>(mgException.p))->SetErrorCode(e.getDbErrno()); \
+        mgException = new MgException(MgExceptionCodes::MgDbXmlException, methodName, __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments); \
+        mgException->SetNativeErrorCode(e.getDbErrno());                      \
     }                                                                         \
     catch (DbException& e)                                                    \
     {                                                                         \
@@ -75,20 +75,20 @@
         }                                                                     \
                                                                               \
         arguments.Add(message);                                               \
-        mgException = new MgDbException(methodName, __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments); \
-        (static_cast<MgThirdPartyException*>(mgException.p))->SetErrorCode(e.get_errno()); \
+        mgException = new MgException(MgExceptionCodes::MgDbException, methodName, __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments); \
+        mgException->SetNativeErrorCode(e.get_errno()); \
     }                                                                      \
     catch (const XMLException& e)                                             \
     {                                                                         \
         MgStringCollection arguments;                                         \
         arguments.Add(X2W(e.getMessage()));                                   \
-        mgException = new MgXmlParserException(methodName, __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments); \
+        mgException = new MgException(MgExceptionCodes::MgXmlParserException, methodName, __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments); \
     }                                                                         \
     catch (const DOMException& e)                                             \
     {                                                                         \
         MgStringCollection arguments;                                         \
         arguments.Add(X2W(e.msg));                                            \
-        mgException = new MgXmlParserException(methodName, __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments); \
+        mgException = new MgException(MgExceptionCodes::MgXmlParserException, methodName, __LINE__, __WFILE__, NULL, L"MgFormatInnerExceptionMessage", &arguments); \
                                                                               \
     MG_CATCH(methodName)                                                      \
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ServerResourceService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ServerResourceService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ServerResourceService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -74,8 +74,8 @@
             {                                                                 \
                 ++numRetries;                                                 \
                                                                               \
-                if ((e->IsOfClass(MapGuide_Exception_MgDbXmlException) || e->IsOfClass(MapGuide_Exception_MgDbException)) \
-                 && (DB_LOCK_DEADLOCK == (static_cast<MgThirdPartyException*>(e))->GetErrorCode())) \
+                if ((e->GetExceptionCode() == MgExceptionCodes::MgDbXmlException || e->GetExceptionCode() == MgExceptionCodes::MgDbException) \
+                    && DB_LOCK_DEADLOCK == e->GetNativeErrorCode())           \
                 {                                                             \
                     if (numRetries < maxRetries)                              \
                     {                                                         \
@@ -279,7 +279,7 @@
 
     if (MgRepositoryType::Session != repositoryType)
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgServerResourceService.EnumerateRepositories",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -332,7 +332,7 @@
             {
                 MG_LOG_AUTHENTICATION_ENTRY(MgResources::UnauthorizedAccess.c_str());
 
-                throw new MgUnauthorizedAccessException(
+                throw new MgException(MgExceptionCodes::MgUnauthorizedAccessException, 
                     L"MgServerResourceService.EnumerateRepositories",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
@@ -341,7 +341,7 @@
             {
                 MG_LOG_AUTHENTICATION_ENTRY(MgResources::UnauthorizedAccess.c_str());
 
-                throw new MgUnauthorizedAccessException(
+                throw new MgException(MgExceptionCodes::MgUnauthorizedAccessException, 
                     L"MgServerResourceService.EnumerateRepositories",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
@@ -408,7 +408,7 @@
 
     if (!resource->IsRepositoryTypeOf(MgRepositoryType::Session))
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgServerResourceService.CreateRepository", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -464,7 +464,7 @@
         {
             MG_LOG_AUTHENTICATION_ENTRY(MgResources::UnauthorizedAccess.c_str());
 
-            throw new MgUnauthorizedAccessException(
+            throw new MgException(MgExceptionCodes::MgUnauthorizedAccessException, 
                 L"MgServerResourceService.CreateRepository",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -483,7 +483,7 @@
                 MgStringCollection arguments;
                 arguments.Add(resource->ToString());
 
-                throw new MgRepositoryCreationFailedException(
+                throw new MgException(MgExceptionCodes::MgRepositoryCreationFailedException, 
                     L"MgServerResourceService.CreateRepository", __LINE__, __WFILE__, &arguments, L"", NULL);
             }
 
@@ -529,7 +529,7 @@
             MgStringCollection arguments;
             arguments.Add(resource->ToString());
 
-            throw new MgDuplicateRepositoryException(
+            throw new MgException(MgExceptionCodes::MgDuplicateRepositoryException, 
                 L"MgServerResourceService.CreateRepository", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
     }
@@ -559,7 +559,7 @@
 
     if (!resource->IsRepositoryTypeOf(MgRepositoryType::Session))
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgServerResourceService.DeleteRepository", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -585,7 +585,7 @@
     {
         MG_LOG_AUTHENTICATION_ENTRY(MgResources::UnauthorizedAccess.c_str());
 
-        throw new MgUnauthorizedAccessException(
+        throw new MgException(MgExceptionCodes::MgUnauthorizedAccessException, 
             L"MgServerResourceService.CreateRepository",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -637,7 +637,7 @@
             MgStringCollection arguments;
             arguments.Add(name);
 
-            throw new MgRepositoryNotFoundException(
+            throw new MgException(MgExceptionCodes::MgRepositoryNotFoundException, 
                 L"MgServerResourceService.DeleteRepository",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -666,7 +666,7 @@
     CHECKARGUMENTNULL(resource, L"MgServerResourceService.UpdateRepository");
     if ((NULL == content && NULL == header))
     {
-        throw new MgNullArgumentException(
+        throw new MgException(MgExceptionCodes::MgNullArgumentException, 
             L"MgServerResourceService.UpdateRepository", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -757,7 +757,7 @@
 
     if (!resource->IsRepositoryTypeOf(MgRepositoryType::Library))
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgServerResourceService.GetRepositoryHeader",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -831,7 +831,7 @@
         MgStringCollection arguments;
         arguments.Add(packagePathname);
 
-        throw new MgFileNotFoundException(
+        throw new MgException(MgExceptionCodes::MgFileNotFoundException, 
             L"MgServerResourceService.LoadResourcePackage",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
@@ -867,7 +867,7 @@
 
     if (!resource->IsFolder())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgServerResourceService.MakeResourcePackage",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -874,7 +874,7 @@
 
     if (!resource->IsRepositoryTypeOf(MgRepositoryType::Library))
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgServerResourceService.MakeResourcePackage",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -945,7 +945,7 @@
 
     if (!resource->IsRepositoryTypeOf(MgRepositoryType::Library))
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgServerResourceService.EnumerateResources",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1180,7 +1180,7 @@
     bool hasPreprocess = (NULL != preProcessTags);
     if(hasPreprocess && resources->GetCount() != preProcessTags->GetCount())
     {
-        throw new MgInvalidArgumentException(
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, 
             L"MgServerResourceService.GetResourceContents", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -1237,7 +1237,7 @@
 
     if (!resource->IsRepositoryTypeOf(MgRepositoryType::Library))
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgServerResourceService.GetResourceHeader", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -1284,7 +1284,7 @@
 
     if (!resource->IsRepositoryTypeOf(MgRepositoryType::Library))
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgServerResourceService.GetResourceModifiedDate",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1369,7 +1369,7 @@
 
         if (NULL == resource)
         {
-            throw new MgInvalidCastException(
+            throw new MgException(MgExceptionCodes::MgInvalidCastException, 
                 L"MgServerResourceService.EnumerateParentMapDefinitions",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1389,7 +1389,7 @@
             }
             else
             {
-                throw new MgInvalidRepositoryTypeException(
+                throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
                     L"MgServerResourceService.EnumerateParentMapDefinitions",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
@@ -1493,7 +1493,7 @@
 
         if (NULL == resource)
         {
-            throw new MgInvalidCastException(
+            throw new MgException(MgExceptionCodes::MgInvalidCastException, 
                 L"MgServerResourceService.EnumerateParentTileSetDefinitions",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1513,7 +1513,7 @@
             }
             else
             {
-                throw new MgInvalidRepositoryTypeException(
+                throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
                     L"MgServerResourceService.EnumerateParentTileSetDefinitions",
                     __LINE__, __WFILE__, NULL, L"", NULL);
             }
@@ -1638,7 +1638,7 @@
 
     if (!resource->IsRepositoryTypeOf(MgRepositoryType::Library))
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgServerResourceService.ChangeResourceOwner",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1677,7 +1677,7 @@
 
     if (!resource->IsRepositoryTypeOf(MgRepositoryType::Library))
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgServerResourceService.InheritPermissionsFrom",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1946,7 +1946,7 @@
                 MgStringCollection arguments;
                 arguments.Add(name);
 
-                throw new MgRepositoryNotFoundException(
+                throw new MgException(MgExceptionCodes::MgRepositoryNotFoundException, 
                     L"MgServerResourceService.CreateApplicationRepositoryManager",
                     __LINE__, __WFILE__, &arguments, L"", NULL);
             }
@@ -1954,7 +1954,7 @@
     }
     else
     {
-        throw new MgInvalidRepositoryTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidRepositoryTypeException, 
             L"MgServerResourceService.CreateApplicationRepositoryManager",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SessionRepositoryManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SessionRepositoryManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SessionRepositoryManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -71,7 +71,7 @@
     {
         MG_LOG_AUTHENTICATION_ENTRY(MgResources::UnauthorizedAccess.c_str());
 
-        throw new MgUnauthorizedAccessException(
+        throw new MgException(MgExceptionCodes::MgUnauthorizedAccessException, 
             L"MgSessionRepositoryManager.EnumerateRepositories",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -105,7 +105,7 @@
 
     if (!resource->IsRoot())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgSessionRepositoryManager.DeleteRepository",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SessionResourceContentManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SessionResourceContentManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SessionResourceContentManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -230,7 +230,7 @@
         MgStringCollection arguments;
         arguments.Add(resource.ToString());
 
-        throw new MgPermissionDeniedException(
+        throw new MgException(MgExceptionCodes::MgPermissionDeniedException, 
             L"MgSessionResourceContentManager.CheckPermission",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SiteRepositoryManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SiteRepositoryManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SiteRepositoryManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -200,7 +200,7 @@
         arguments.Add(L"2");
         arguments.Add(role);
 
-        throw new MgInvalidArgumentException(L"MgSiteRepositoryManager.EnumerateUsers",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgSiteRepositoryManager.EnumerateUsers",
             __LINE__, __WFILE__, &arguments, L"MgGroupAndRoleNotEmpty", NULL);
     }
 
@@ -229,7 +229,7 @@
         {
             MG_LOG_AUTHENTICATION_ENTRY(MgResources::UnauthorizedAccess.c_str());
 
-            throw new MgUnauthorizedAccessException(
+            throw new MgException(MgExceptionCodes::MgUnauthorizedAccessException, 
                 L"MgSiteRepositoryManager.EnumerateUsers",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -333,7 +333,7 @@
         arguments.Add(L"2");
         arguments.Add(role);
 
-        throw new MgInvalidArgumentException(L"MgSiteRepositoryManager.EnumerateGroups",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgSiteRepositoryManager.EnumerateGroups",
             __LINE__, __WFILE__, &arguments, L"MgUserAndRoleNotEmpty", NULL);
     }
 
@@ -474,7 +474,7 @@
         arguments.Add(L"2");
         arguments.Add(group);
 
-        throw new MgInvalidArgumentException(L"MgSiteRepositoryManager.EnumerateRoles",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgSiteRepositoryManager.EnumerateRoles",
             __LINE__, __WFILE__, &arguments, L"MgUserAndGroupNotEmpty", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SiteResourceContentManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SiteResourceContentManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SiteResourceContentManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -544,7 +544,7 @@
 
         if (MgSecurityManager::IsSystemUser(id))
         {
-            throw new MgInvalidOperationException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
                 L"MgSiteResourceContentManager.DeleteUsers",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -559,7 +559,7 @@
             MgStringCollection arguments;
             arguments.Add(id);
 
-            throw new MgUserNotFoundException(
+            throw new MgException(MgExceptionCodes::MgUserNotFoundException, 
                 L"MgSiteResourceContentManager.DeleteUsers",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -606,7 +606,7 @@
         // Disallow changing the system user IDs.
         if (MgSecurityManager::IsSystemUser(userId))
         {
-            throw new MgInvalidOperationException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
                 L"MgSiteResourceContentManager.UpdateUser",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -623,7 +623,7 @@
     // Disallow changing the Anonymous user's blank password.
     if (!newPassword.empty() && MgUser::Anonymous == userId)
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgSiteResourceContentManager.UpdateUser",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -959,7 +959,7 @@
 
     if (MgGroup::Everyone == group)
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgSiteResourceContentManager.AddGroup",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1025,7 +1025,7 @@
 
         if (MgGroup::Everyone == id)
         {
-            throw new MgInvalidOperationException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
                 L"MgSiteResourceContentManager.DeleteGroups",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1040,7 +1040,7 @@
             MgStringCollection arguments;
             arguments.Add(id);
 
-            throw new MgGroupNotFoundException(
+            throw new MgException(MgExceptionCodes::MgGroupNotFoundException, 
                 L"MgSiteResourceContentManager.DeleteGroups",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1078,7 +1078,7 @@
 
     if (MgGroup::Everyone == group || MgGroup::Everyone == newGroup)
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgSiteResourceContentManager.UpdateGroup",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -1165,7 +1165,7 @@
             MgStringCollection arguments;
             arguments.Add(userRes.GetName());
 
-            throw new MgUserNotFoundException(
+            throw new MgException(MgExceptionCodes::MgUserNotFoundException, 
                 L"MgSiteResourceContentManager.GrantGroupMembershipsToUsers",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1191,7 +1191,7 @@
 
         if (MgGroup::Everyone == groupRes.GetName())
         {
-            throw new MgInvalidOperationException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
                 L"MgSiteResourceContentManager.GrantGroupMembershipsToUsers",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1211,7 +1211,7 @@
             // Users node must exist according to the schema.
             // Should not reach here as XML validation is performed when adding
             // a resource.
-            throw new MgXmlParserException(
+            throw new MgException(MgExceptionCodes::MgXmlParserException, 
                 L"MgSiteResourceContentManager.GrantGroupMembershipsToUsers",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1310,7 +1310,7 @@
             MgStringCollection arguments;
             arguments.Add(userRes.GetName());
 
-            throw new MgUserNotFoundException(
+            throw new MgException(MgExceptionCodes::MgUserNotFoundException, 
                 L"MgSiteResourceContentManager.RevokeGroupMembershipsFromUsers",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1330,7 +1330,7 @@
 
         if (MgGroup::Everyone == groupRes.GetName())
         {
-            throw new MgInvalidOperationException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
                 L"MgSiteResourceContentManager.RevokeGroupMembershipsFromUsers",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1340,7 +1340,7 @@
             MgStringCollection arguments;
             arguments.Add(groupRes.GetName());
 
-            throw new MgGroupNotFoundException(
+            throw new MgException(MgExceptionCodes::MgGroupNotFoundException, 
                 L"MgSiteResourceContentManager.RevokeGroupMembershipsFromUsers",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1555,7 +1555,7 @@
             MgStringCollection arguments;
             arguments.Add(userRes.GetName());
 
-            throw new MgUserNotFoundException(
+            throw new MgException(MgExceptionCodes::MgUserNotFoundException, 
                 L"MgSiteResourceContentManager.GrantRoleMembershipsToUsers",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1581,7 +1581,7 @@
 
         if (MgRole::Viewer == roleRes.GetName())
         {
-            throw new MgInvalidOperationException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
                 L"MgSiteResourceContentManager.GrantRoleMembershipsToUsers",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1601,7 +1601,7 @@
             // Users node must exist according to the schema.
             // Should not reach here as XML validation is performed when adding
             // a resource.
-            throw new MgXmlParserException(
+            throw new MgException(MgExceptionCodes::MgXmlParserException, 
                 L"MgSiteResourceContentManager.GrantRoleMembershipsToUsers",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1700,7 +1700,7 @@
             MgStringCollection arguments;
             arguments.Add(userRes.GetName());
 
-            throw new MgUserNotFoundException(
+            throw new MgException(MgExceptionCodes::MgUserNotFoundException, 
                 L"MgSiteResourceContentManager.RevokeRoleMembershipsFromUsers",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1720,7 +1720,7 @@
 
         if (MgRole::Viewer == roleRes.GetName())
         {
-            throw new MgInvalidOperationException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
                 L"MgSiteResourceContentManager.RevokeRoleMembershipsFromUsers",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1730,7 +1730,7 @@
             MgStringCollection arguments;
             arguments.Add(roleRes.GetName());
 
-            throw new MgRoleNotFoundException(
+            throw new MgException(MgExceptionCodes::MgRoleNotFoundException, 
                 L"MgSiteResourceContentManager.RevokeRoleMembershipsFromUsers",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1787,7 +1787,7 @@
             MgStringCollection arguments;
             arguments.Add(groupRes.GetName());
 
-            throw new MgGroupNotFoundException(
+            throw new MgException(MgExceptionCodes::MgGroupNotFoundException, 
                 L"MgSiteResourceContentManager.GrantRoleMembershipsToGroups",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1813,7 +1813,7 @@
 
         if (MgRole::Viewer == roleRes.GetName())
         {
-            throw new MgInvalidOperationException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
                 L"MgSiteResourceContentManager.GrantRoleMembershipsToGroups",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1833,7 +1833,7 @@
             // Groups node must exist according to the schema.
             // Should not reach here as XML validation is performed when adding
             // a resource.
-            throw new MgXmlParserException(
+            throw new MgException(MgExceptionCodes::MgXmlParserException, 
                 L"MgSiteResourceContentManager.GrantRoleMembershipsToGroups",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1941,7 +1941,7 @@
             MgStringCollection arguments;
             arguments.Add(groupRes.GetName());
 
-            throw new MgGroupNotFoundException(
+            throw new MgException(MgExceptionCodes::MgGroupNotFoundException, 
                 L"MgSiteResourceContentManager.RevokeRoleMembershipsFromGroups",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -1961,7 +1961,7 @@
 
         if (MgRole::Viewer == roleRes.GetName())
         {
-            throw new MgInvalidOperationException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
                 L"MgSiteResourceContentManager.RevokeRoleMembershipsFromGroups",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -1971,7 +1971,7 @@
             MgStringCollection arguments;
             arguments.Add(roleRes.GetName());
 
-            throw new MgRoleNotFoundException(
+            throw new MgException(MgExceptionCodes::MgRoleNotFoundException, 
                 L"MgSiteResourceContentManager.RevokeRoleMembershipsFromGroups",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
@@ -2012,7 +2012,7 @@
 
     if (MgGroup::Everyone == groupRes->GetName())
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgSiteResourceContentManager.RemoveUserFromGroup",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -2126,7 +2126,7 @@
     if ((MgRole::Administrator == roleRes->GetName() && MgUser::Administrator == userId)
      || (MgRole::Author        == roleRes->GetName() && MgUser::Author        == userId))
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgSiteResourceContentManager.RemoveUserFromRole",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -2240,7 +2240,7 @@
 
     if (MgRole::Viewer == roleRes->GetName() && MgGroup::Everyone == groupId)
     {
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgSiteResourceContentManager.RemoveGroupFromRole",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SystemRepositoryManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SystemRepositoryManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/SystemRepositoryManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -67,7 +67,7 @@
 
     if (resource->IsFolder())
     {
-        throw new MgInvalidResourceTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceTypeException, 
             L"MgSystemRepositoryManager.GetResourceContent",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -82,7 +82,7 @@
     }
     else
     {
-        throw new MgInvalidResourcePreProcessingTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourcePreProcessingTypeException, 
             L"MgSystemRepositoryManager.GetResourceContent",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/TagManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/TagManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/TagManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -92,7 +92,7 @@
         arguments.Add(L"1");
         arguments.Add(str);
 
-        throw new MgInvalidArgumentException(L"MgTagManager.CheckTagString",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgTagManager.CheckTagString",
             __LINE__, __WFILE__, &arguments, L"MgStringTooLong", NULL);
     }
 
@@ -105,7 +105,7 @@
         MgStringCollection whyArguments;
         whyArguments.Add(MgTagReservedCharacterSet);
 
-        throw new MgInvalidArgumentException(L"MgTagManager.CheckTagString",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgTagManager.CheckTagString",
             __LINE__, __WFILE__, &arguments, L"MgStringContainsReservedCharacters", &whyArguments);
     }
 }
@@ -127,7 +127,7 @@
         MgStringCollection arguments;
         arguments.Add(tag);
 
-        throw new MgResourceTagNotFoundException(L"MgTagManager.CheckTagString",
+        throw new MgException(MgExceptionCodes::MgResourceTagNotFoundException, L"MgTagManager.CheckTagString",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 }
@@ -170,7 +170,7 @@
         MgStringCollection arguments;
         arguments.Add(name);
 
-        throw new MgInvalidResourceDataNameException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceDataNameException, 
             L"MgTagManager.ValidateTag", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
@@ -179,7 +179,7 @@
         || (MgResourceDataType::String == type
                 && ((MgResourceDataName::UserCredentials != name) && (MgResourceDataName::ProxyServerName != name) && (MgResourceDataName::ProxyServerPort != name) && (MgResourceDataName::ProxyCredentials != name))))
     {
-        throw new MgInvalidResourceDataTypeException(
+        throw new MgException(MgExceptionCodes::MgInvalidResourceDataTypeException, 
             L"MgTagManager.ValidateTag", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 }
@@ -231,7 +231,7 @@
                 arguments.Add(L"1");
                 arguments.Add(tags);
 
-                throw new MgInvalidArgumentException(L"MgTagManager.ParseTags",
+                throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgTagManager.ParseTags",
                     __LINE__, __WFILE__, &arguments, L"MgTagFieldNotFound", NULL);
             }
             else if (fieldCount < MAX_RESOURCE_TAG_ATTRIBUTE_NUMBER)
@@ -408,7 +408,7 @@
         MgStringCollection arguments;
         arguments.Add(name);
 
-        throw new MgResourceDataNotFoundException(L"MgTagManager.GetTag",
+        throw new MgException(MgExceptionCodes::MgResourceDataNotFoundException, L"MgTagManager.GetTag",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
@@ -442,7 +442,7 @@
             MgStringCollection arguments;
             arguments.Add(name);
 
-            throw new MgDuplicateResourceDataException(L"MgTagManager.SetTag",
+            throw new MgException(MgExceptionCodes::MgDuplicateResourceDataException, L"MgTagManager.SetTag",
                 __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
@@ -478,7 +478,7 @@
         MgStringCollection arguments;
         arguments.Add(name);
 
-        throw new MgDuplicateResourceDataException(L"MgTagManager.AddTag",
+        throw new MgException(MgExceptionCodes::MgDuplicateResourceDataException, L"MgTagManager.AddTag",
             __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ZipFileReader.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ZipFileReader.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ZipFileReader.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -72,7 +72,7 @@
     {
         MgStringCollection arguments;
         arguments.Add(filePath);
-        throw new MgInvalidDwfPackageException(L"MgZipFileReader.MgZipFileReader", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidDwfPackageException, L"MgZipFileReader.MgZipFileReader", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 }
 
@@ -88,7 +88,7 @@
 #ifdef _DEBUG
         if (r != UNZ_OK)
         {
-            throw new MgInvalidDwfPackageException(L"MgZipFileReader.~MgZipFileReader", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidDwfPackageException, L"MgZipFileReader.~MgZipFileReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 #endif
     }
@@ -112,7 +112,7 @@
     {
         MgStringCollection arguments;
         arguments.Add(filePath);
-        throw new MgInvalidDwfPackageException(L"MgZipFileReader.ExtractArchive", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidDwfPackageException, L"MgZipFileReader.ExtractArchive", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     int err = UNZ_OK;
@@ -122,7 +122,7 @@
     {
         MgStringCollection arguments;
         arguments.Add(filePath);
-        throw new MgInvalidDwfPackageException(L"MgZipFileReader.ExtractArchive", __LINE__, __WFILE__, &arguments, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidDwfPackageException, L"MgZipFileReader.ExtractArchive", __LINE__, __WFILE__, &arguments, L"", NULL);
     }
 
     MgByteSourceUnzipImpl* impl = new MgByteSourceUnzipImpl(file_info, m_unzip);

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ZipFileWriter.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ZipFileWriter.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Resource/ZipFileWriter.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -92,7 +92,7 @@
     m_zip = zipOpen(mbFilePath.c_str(), 0);
     if (!m_zip)
     {
-        throw new MgInvalidDwfPackageException(L"MgZipFileWriter.MgZipFileWriter", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidDwfPackageException, L"MgZipFileWriter.MgZipFileWriter", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 }
 
@@ -108,7 +108,7 @@
 #ifdef _DEBUG
         if (r != ZIP_OK)
         {
-            throw new MgInvalidDwfPackageException(L"MgZipFileWriter.~MgZipFileWriter", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidDwfPackageException, L"MgZipFileWriter.~MgZipFileWriter", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 #endif
     }
@@ -156,7 +156,7 @@
 
     if (err != ZIP_OK)
     {
-        throw new MgInvalidDwfPackageException(L"MgZipFileWriter.AddArchive", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidDwfPackageException, L"MgZipFileWriter.AddArchive", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     const INT32 length = 4096;
@@ -168,7 +168,7 @@
         err = zipWriteInFileInZip(m_zip, buffer, numBytes);
         if (err < 0)
         {
-            throw new MgInvalidDwfPackageException(L"MgZipFileWriter.AddArchive", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgInvalidDwfPackageException, L"MgZipFileWriter.AddArchive", __LINE__, __WFILE__, NULL, L"", NULL);
         }
     } while ((err == ZIP_OK) && (numBytes > 0));
 
@@ -175,7 +175,7 @@
     err = zipCloseFileInZip(m_zip);
     if (err != ZIP_OK)
     {
-        throw new MgInvalidDwfPackageException(L"MgZipFileWriter.AddArchive", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidDwfPackageException, L"MgZipFileWriter.AddArchive", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     MG_RESOURCE_SERVICE_CATCH(L"MgZipFileWriter.AddArchive")

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpBringOnline.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpBringOnline.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpBringOnline.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -84,7 +84,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpBringOnline.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpBringOnline.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpClearLog.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpClearLog.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpClearLog.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -88,7 +88,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpClearLog.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpClearLog.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpDeleteLog.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpDeleteLog.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpDeleteLog.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -88,7 +88,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDeleteLog.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDeleteLog.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpDeletePackage.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpDeletePackage.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpDeletePackage.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -88,7 +88,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDeletePackage.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDeletePackage.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnableMaximumLogSize.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnableMaximumLogSize.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnableMaximumLogSize.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnableMaximumLogSize.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnableMaximumLogSize.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnumerateLogs.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnumerateLogs.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnumerateLogs.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -84,7 +84,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateLogs.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateLogs.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnumeratePackages.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnumeratePackages.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpEnumeratePackages.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -84,7 +84,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumeratePackages.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumeratePackages.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetConfigurationProperties.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetConfigurationProperties.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetConfigurationProperties.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -89,7 +89,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetConfigurationProperties.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetConfigurationProperties.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetDocument.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetDocument.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetDocument.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -99,7 +99,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetDocument.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetDocument.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetInformationProperties.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetInformationProperties.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetInformationProperties.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetInformationProperties.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetInformationProperties.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetLog.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetLog.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetLog.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -151,7 +151,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetLog.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetLog.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetLogFile.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetLogFile.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetLogFile.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -88,7 +88,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetLogFile.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetLogFile.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetPackageLog.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetPackageLog.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetPackageLog.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -88,7 +88,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetPackageLog.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetPackageLog.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetPackageStatus.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetPackageStatus.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetPackageStatus.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -88,7 +88,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetPackageStatus.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetPackageStatus.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetSiteStatus.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetSiteStatus.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetSiteStatus.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetSiteStatus.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetSiteStatus.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetSiteVersion.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetSiteVersion.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpGetSiteVersion.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -94,7 +94,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetSiteVersion.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetSiteVersion.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpIsMaximumLogSizeEnabled.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpIsMaximumLogSizeEnabled.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpIsMaximumLogSizeEnabled.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -94,7 +94,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpIsMaximumLogSizeEnabled.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpIsMaximumLogSizeEnabled.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpIsOnline.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpIsOnline.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpIsOnline.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -94,7 +94,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpIsOnline.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpIsOnline.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpLoadPackage.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpLoadPackage.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpLoadPackage.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -88,7 +88,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpLoadPackage.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpLoadPackage.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpMakePackage.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpMakePackage.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpMakePackage.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -93,7 +93,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpMakePackage.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpMakePackage.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpNotifyResourcesChanged.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpNotifyResourcesChanged.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpNotifyResourcesChanged.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -101,7 +101,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpNotifyResourcesChanged.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpNotifyResourcesChanged.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRegisterServicesOnServers.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRegisterServicesOnServers.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRegisterServicesOnServers.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -91,7 +91,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRegisterServicesOnServers.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRegisterServicesOnServers.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRemoveConfigurationProperties.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRemoveConfigurationProperties.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRemoveConfigurationProperties.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -93,7 +93,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRemoveConfigurationProperties.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRemoveConfigurationProperties.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRenameLog.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRenameLog.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpRenameLog.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -91,7 +91,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRenameLog.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRenameLog.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetConfigurationProperties.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetConfigurationProperties.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetConfigurationProperties.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -93,7 +93,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSetConfigurationProperties.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSetConfigurationProperties.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetDocument.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetDocument.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetDocument.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -93,7 +93,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSetDocument.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSetDocument.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetLogDelimiter.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetLogDelimiter.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetLogDelimiter.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSetLogDelimiter.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSetLogDelimiter.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetMaximumLogSize.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetMaximumLogSize.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpSetMaximumLogSize.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -87,7 +87,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSetMaximumLogSize.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSetMaximumLogSize.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpTakeOffline.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpTakeOffline.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpTakeOffline.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -84,7 +84,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpTakeOffline.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpTakeOffline.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpUnregisterServicesOnServers.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpUnregisterServicesOnServers.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/OpUnregisterServicesOnServers.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -91,7 +91,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpUnregisterServicesOnServers.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpUnregisterServicesOnServers.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/ServerAdminOperationFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/ServerAdminOperationFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/ServerAdminOperationFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -425,7 +425,7 @@
         break;
 
     default:
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgServerAdminOperationFactory.GetOperation",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
@@ -432,7 +432,7 @@
 
     if (NULL == handler.get())
     {
-        throw new MgInvalidOperationVersionException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
             L"MgServerAdminOperationFactory.GetOperation",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/ServerAdminService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/ServerAdminService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/ServerAdmin/ServerAdminService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -169,7 +169,7 @@
         arguments.Add(L"1");
         arguments.Add(log);
 
-        throw new MgInvalidArgumentException(L"MgServerAdminService.ClearLog",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerAdminService.ClearLog",
             __LINE__, __WFILE__, &arguments, L"MgInvalidLogType", NULL);
     }
 
@@ -260,7 +260,7 @@
         arguments.Add(L"1");
         arguments.Add(log);
 
-        throw new MgInvalidArgumentException(L"MgServerAdminService.GetLog",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerAdminService.GetLog",
             __LINE__, __WFILE__, &arguments, L"MgInvalidLogType", NULL);
     }
 
@@ -319,7 +319,7 @@
         arguments.Add(L"1");
         arguments.Add(log);
 
-        throw new MgInvalidArgumentException(L"MgServerAdminService.GetLog",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerAdminService.GetLog",
             __LINE__, __WFILE__, &arguments, L"MgInvalidLogType", NULL);
     }
 
@@ -378,7 +378,7 @@
         arguments.Add(L"1");
         arguments.Add(log);
 
-        throw new MgInvalidArgumentException(L"MgServerAdminService.GetLog",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerAdminService.GetLog",
             __LINE__, __WFILE__, &arguments, L"MgInvalidLogType", NULL);
     }
 
@@ -934,7 +934,7 @@
     MgServerManager* pMan = MgServerManager::GetInstance();
     if (NULL == pMan)
     {
-        throw new MgNullReferenceException(L"MgServerAdminService::GetDocument", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgNullReferenceException, L"MgServerAdminService::GetDocument", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     byteReader = pMan->GetDocument(identifier);

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddGroup.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddGroup.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddGroup.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpAddGroup.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpAddGroup.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddServer.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddServer.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddServer.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -100,7 +100,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpAddServer.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpAddServer.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddUser.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddUser.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAddUser.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -120,7 +120,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpAddUser.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpAddUser.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAuthenticate.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAuthenticate.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpAuthenticate.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -104,7 +104,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpAuthenticate.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpAuthenticate.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpCreateSession.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpCreateSession.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpCreateSession.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -99,7 +99,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpCreateSession.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpCreateSession.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDeleteGroups.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDeleteGroups.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDeleteGroups.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -89,7 +89,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDeleteGroups.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDeleteGroups.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDeleteUsers.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDeleteUsers.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDeleteUsers.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -90,7 +90,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDeleteUsers.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDeleteUsers.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDestroySession.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDestroySession.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpDestroySession.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -98,7 +98,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpDestroySession.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpDestroySession.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateGroups.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateGroups.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateGroups.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -106,7 +106,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateGroups.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateGroups.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateRoles.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateRoles.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateRoles.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -106,7 +106,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateRoles.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateRoles.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateServers.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateServers.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateServers.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -86,7 +86,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateServers.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateServers.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateUsers.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateUsers.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpEnumerateUsers.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -111,7 +111,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpEnumerateUsers.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpEnumerateUsers.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGetSessionTimeout.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGetSessionTimeout.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGetSessionTimeout.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetSessionTimeout.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetSessionTimeout.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGetUserForSession.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGetUserForSession.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGetUserForSession.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetUserForSession.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetUserForSession.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantGroupMembershipsToUsers.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantGroupMembershipsToUsers.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantGroupMembershipsToUsers.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGrantGroupMembershipsToUsers.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGrantGroupMembershipsToUsers.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantRoleMembershipsToGroups.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantRoleMembershipsToGroups.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantRoleMembershipsToGroups.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGrantRoleMembershipsToGroups.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGrantRoleMembershipsToGroups.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantRoleMembershipsToUsers.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantRoleMembershipsToUsers.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpGrantRoleMembershipsToUsers.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGrantRoleMembershipsToUsers.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGrantRoleMembershipsToUsers.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRemoveServer.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRemoveServer.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRemoveServer.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -90,7 +90,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRemoveServer.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRemoveServer.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRequestServer.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRequestServer.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRequestServer.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -99,7 +99,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRequestServer.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRequestServer.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeGroupMembershipsFromUsers.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeGroupMembershipsFromUsers.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeGroupMembershipsFromUsers.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRevokeGroupMembershipsFromUsers.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRevokeGroupMembershipsFromUsers.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeRoleMembershipsFromGroups.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeRoleMembershipsFromGroups.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeRoleMembershipsFromGroups.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRevokeRoleMembershipsFromGroups.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRevokeRoleMembershipsFromGroups.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeRoleMembershipsFromUsers.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeRoleMembershipsFromUsers.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpRevokeRoleMembershipsFromUsers.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -95,7 +95,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpRevokeRoleMembershipsFromUsers.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpRevokeRoleMembershipsFromUsers.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateGroup.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateGroup.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateGroup.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -100,7 +100,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpUpdateGroup.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpUpdateGroup.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateServer.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateServer.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateServer.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -105,7 +105,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpUpdateServer.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpUpdateServer.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateUser.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateUser.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/OpUpdateUser.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -125,7 +125,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpUpdateUser.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpUpdateUser.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/ServerSiteService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/ServerSiteService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/ServerSiteService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -82,7 +82,7 @@
 
         if (NULL == dynamic_cast<MgServerResourceService*>(service.p))
         {
-            throw new MgServiceNotAvailableException(
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, 
                 L"MgServerSiteService.GetResourceService",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
@@ -695,7 +695,7 @@
 
     if (NULL == userInformation)
     {
-        throw new MgAuthenticationFailedException(
+        throw new MgException(MgExceptionCodes::MgAuthenticationFailedException, 
             L"MgServerSiteService.Authenticate", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -746,7 +746,7 @@
     }
     else
     {
-        throw new MgDuplicateSessionException(
+        throw new MgException(MgExceptionCodes::MgDuplicateSessionException, 
             L"MgServerSiteService.CreateSession", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -858,7 +858,7 @@
         arguments.Add(L"1");
         arguments.Add(session);
 
-        throw new MgInvalidArgumentException(L"MgServerSiteService.GetUserForSession()",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgServerSiteService.GetUserForSession()",
             __LINE__, __WFILE__, &arguments, L"MgInvalidSessionsId", NULL);
     }
 
@@ -1093,7 +1093,7 @@
 
     if (!bAllowed)
     {
-        throw new MgUnauthorizedAccessException(L"MgServerSiteService.ValidateAuthorOrSelf",
+        throw new MgException(MgExceptionCodes::MgUnauthorizedAccessException, L"MgServerSiteService.ValidateAuthorOrSelf",
                 __LINE__, __WFILE__, NULL, L"", NULL);
     }
 }

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Site/SiteOperationFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Site/SiteOperationFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Site/SiteOperationFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -113,7 +113,7 @@
             handler.reset( new MgOpAuthenticate() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -125,7 +125,7 @@
             handler.reset( new MgOpEnumerateUsers() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -137,7 +137,7 @@
             handler.reset( new MgOpAddUser() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -149,7 +149,7 @@
             handler.reset( new MgOpUpdateUser() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -161,7 +161,7 @@
             handler.reset( new MgOpDeleteUsers() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -173,7 +173,7 @@
             handler.reset( new MgOpGrantRoleMembershipsToUsers() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -185,7 +185,7 @@
             handler.reset( new MgOpRevokeRoleMembershipsFromUsers() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -197,7 +197,7 @@
             handler.reset( new MgOpGrantGroupMembershipsToUsers() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -209,7 +209,7 @@
             handler.reset( new MgOpRevokeGroupMembershipsFromUsers() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -221,7 +221,7 @@
             handler.reset( new MgOpEnumerateGroups() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -233,7 +233,7 @@
             handler.reset( new MgOpAddGroup() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -245,7 +245,7 @@
             handler.reset( new MgOpUpdateGroup() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -257,7 +257,7 @@
             handler.reset( new MgOpDeleteGroups() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -269,7 +269,7 @@
             handler.reset( new MgOpGrantRoleMembershipsToGroups() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -281,7 +281,7 @@
             handler.reset( new MgOpRevokeRoleMembershipsFromGroups() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -293,7 +293,7 @@
             handler.reset( new MgOpEnumerateRoles() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -305,7 +305,7 @@
             handler.reset( new MgOpEnumerateServers() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -317,7 +317,7 @@
             handler.reset( new MgOpAddServer() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -329,7 +329,7 @@
             handler.reset( new MgOpRemoveServer() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -341,7 +341,7 @@
             handler.reset( new MgOpUpdateServer() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -353,7 +353,7 @@
             handler.reset( new MgOpRequestServer() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -365,7 +365,7 @@
             handler.reset( new MgOpCreateSession() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -377,7 +377,7 @@
             handler.reset( new MgOpDestroySession() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -389,7 +389,7 @@
             handler.reset( new MgOpGetSessionTimeout() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -401,13 +401,13 @@
             handler.reset( new MgOpGetUserForSession() );
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgDrawingOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
 
     default:
-        throw new MgInvalidOperationException(L"GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, L"GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
     MG_SITE_SERVICE_CATCH_AND_THROW( L"MgSiteOperationFactory::GetOperation" );

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/MetatileLockUtil.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/MetatileLockUtil.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/MetatileLockUtil.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -50,7 +50,7 @@
 #endif
             MgStringCollection arguments;
             arguments.Add(tilePathname);
-            throw new MgFileIoException(L"MgServerTileService.GetTile",
+            throw new MgException(MgExceptionCodes::MgFileIoException, L"MgServerTileService.GetTile",
                 __LINE__, __WFILE__, &arguments, L"MgWaitForLockTimedOut", NULL);
         }
 #ifdef _DEBUG

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpClearCache.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpClearCache.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpClearCache.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -106,7 +106,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpClearCache.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpClearCache.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetDefaultTileSizeX.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetDefaultTileSizeX.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetDefaultTileSizeX.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -97,7 +97,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetDefaultTileSizeX.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetDefaultTileSizeX.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetDefaultTileSizeY.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetDefaultTileSizeY.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetDefaultTileSizeY.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -97,7 +97,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetDefaultTileSizeY.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetDefaultTileSizeY.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetTile.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetTile.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetTile.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -140,7 +140,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetTile.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetTile.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetTileProviders.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetTileProviders.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpGetTileProviders.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -80,7 +80,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpGetTileProviders.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpGetTileProviders.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpSetTile.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpSetTile.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/OpSetTile.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -110,7 +110,7 @@
 
     if (!m_argsRead)
     {
-        throw new MgOperationProcessingException(L"MgOpSetTile.Execute",
+        throw new MgException(MgExceptionCodes::MgOperationProcessingException, L"MgOpSetTile.Execute",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/ServerTileService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/ServerTileService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/ServerTileService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -51,7 +51,7 @@
     // if we don't find a nearest scale then something is wrong with the map
     if (scaleIndex < 0)
     {
-        throw new MgInvalidMapDefinitionException(L"MgServerTileService.GetTile",
+        throw new MgException(MgExceptionCodes::MgInvalidMapDefinitionException, L"MgServerTileService.GetTile",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -490,7 +490,7 @@
             MgStringCollection arguments;
             arguments.Add(resource->ToString());
 
-            throw new MgPermissionDeniedException(L"MgServerTileService.GetTileCache", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgPermissionDeniedException, L"MgServerTileService.GetTileCache", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
         Ptr<MgByteReader> content = resourceService->GetResourceContent(resource);
@@ -510,7 +510,7 @@
             STRING errorMsg = parser.GetErrorMessage();
             MgStringCollection arguments;
             arguments.Add(errorMsg);
-            throw new MgXmlParserException(L"MgServerTileService.GetTileCache", __LINE__, __WFILE__, &arguments, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgXmlParserException, L"MgServerTileService.GetTileCache", __LINE__, __WFILE__, &arguments, L"", NULL);
         }
 
         MdfModel::TileSetDefinition* tileset = parser.DetachTileSetDefinition();
@@ -651,7 +651,7 @@
     {
         MgStringCollection arguments;
         arguments.Add(provider);
-        throw new MgUnknownTileProviderException(L"MgServerTileService.GetTileCache", __LINE__, __WFILE__, &arguments, L"UnknownTileProvider", NULL);
+        throw new MgException(MgExceptionCodes::MgUnknownTileProviderException, L"MgServerTileService.GetTileCache", __LINE__, __WFILE__, &arguments, L"UnknownTileProvider", NULL);
     }
 
     MG_CATCH_AND_THROW(L"MgServerTileService.GetTileCache")

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheDefault.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheDefault.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheDefault.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -193,7 +193,7 @@
         arguments.Add(L"5");
         arguments.Add(buffer);
 
-        throw new MgInvalidArgumentException(L"MgTileCacheDefault.GetTileForResource",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgTileCacheDefault.GetTileForResource",
             __LINE__, __WFILE__, &arguments, L"MgInvalidScaleIndex", NULL);
     }
 
@@ -234,7 +234,7 @@
                 MgStringCollection arguments;
                 arguments.Add(lockPathname);
 
-                throw new MgFileIoException(L"MgTileCacheDefault.GetTileForResource",
+                throw new MgException(MgExceptionCodes::MgFileIoException, L"MgTileCacheDefault.GetTileForResource",
                     __LINE__, __WFILE__, &arguments, L"MgUnableToLockTileFile", NULL);
             }
 
@@ -255,7 +255,7 @@
                 MgStringCollection arguments;
                 arguments.Add(lockPathname);
 
-                throw new MgFileIoException(L"MgTileCacheDefault.GetTileForResource",
+                throw new MgException(MgExceptionCodes::MgFileIoException, L"MgTileCacheDefault.GetTileForResource",
                     __LINE__, __WFILE__, &arguments, L"MgUnableToOpenLockFile", NULL);
             }
             else
@@ -303,7 +303,7 @@
     // if we don't find a nearest scale then something is wrong with the map
     if (scaleIndex < 0)
     {
-        throw new MgInvalidMapDefinitionException(L"MgServerTileService.GetTile",
+        throw new MgException(MgExceptionCodes::MgInvalidMapDefinitionException, L"MgServerTileService.GetTile",
             __LINE__, __WFILE__, NULL, L"", NULL);
     }
 
@@ -335,7 +335,7 @@
                 MgStringCollection arguments;
                 arguments.Add(lockPathname);
 
-                throw new MgFileIoException(L"MgServerTileService.GetTile",
+                throw new MgException(MgExceptionCodes::MgFileIoException, L"MgServerTileService.GetTile",
                     __LINE__, __WFILE__, &arguments, L"MgUnableToLockTileFile", NULL);
             }
 
@@ -356,7 +356,7 @@
                 MgStringCollection arguments;
                 arguments.Add(lockPathname);
 
-                throw new MgFileIoException(L"MgServerTileService.GetTile",
+                throw new MgException(MgExceptionCodes::MgFileIoException, L"MgServerTileService.GetTile",
                     __LINE__, __WFILE__, &arguments, L"MgUnableToOpenLockFile", NULL);
             }
             else
@@ -441,7 +441,7 @@
         arguments.Add(L"3");
         arguments.Add(buffer);
 
-        throw new MgInvalidArgumentException(L"MgTileCacheDefault.GetTile",
+        throw new MgException(MgExceptionCodes::MgInvalidArgumentException, L"MgTileCacheDefault.GetTile",
             __LINE__, __WFILE__, &arguments, L"MgInvalidScaleIndex", NULL);
     }
 
@@ -467,7 +467,7 @@
             MgStringCollection arguments;
             arguments.Add(lockPathname);
 
-            throw new MgFileIoException(L"MgTileCacheDefault.SetTile",
+            throw new MgException(MgExceptionCodes::MgFileIoException, L"MgTileCacheDefault.SetTile",
                 __LINE__, __WFILE__, &arguments, L"MgUnableToOpenLockFile", NULL);
         }
         else
@@ -551,7 +551,7 @@
         MgStringCollection arguments;
         arguments.Add(mapDefinition->ToString());
 
-        throw new MgPermissionDeniedException(
+        throw new MgException(MgExceptionCodes::MgPermissionDeniedException, 
             funcName, __LINE__, __WFILE__, &arguments, L"", NULL);
     }
     return resourceService.Detach();

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheDefaultProvider.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheDefaultProvider.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheDefaultProvider.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -238,7 +238,7 @@
                 {
                     MgStringCollection arguments;
                     arguments.Add(metaTileLockPathname);
-                    throw new MgFileIoException(L"MgServerTileService.GetTile",
+                    throw new MgException(MgExceptionCodes::MgFileIoException, L"MgServerTileService.GetTile",
                         __LINE__, __WFILE__, &arguments, L"MgUnableToLockMetaTileFile", NULL);
                 }
             }
@@ -286,7 +286,7 @@
                 {
                     MgStringCollection arguments;
                     arguments.Add(metaTileLockPathname);
-                    throw new MgFileIoException(L"MgServerTileService.GetTile",
+                    throw new MgException(MgExceptionCodes::MgFileIoException, L"MgServerTileService.GetTile",
                         __LINE__, __WFILE__, &arguments, L"MgUnableToCreateLockFile", NULL);
                 }
                 else
@@ -319,7 +319,7 @@
         // Bail if no server-side impl exists (we can't use proxy impl)
         if (NULL == svcRendering)
         {
-            throw new MgServiceNotAvailableException(L"MgTileCacheDefaultProvider.GetMetatileForResource", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"MgTileCacheDefaultProvider.GetMetatileForResource", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         //Ptr<MgByteReader> metaTileBitMap = GetTile(metaTileName, map, scaleIndex, baseMapLayerGroupName, metaTileColumn, metaTileRow);

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheXYZProvider.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheXYZProvider.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileCacheXYZProvider.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -345,7 +345,7 @@
                 {
                     MgStringCollection arguments;
                     arguments.Add(metaTileLockPathname);
-                    throw new MgFileIoException(L"MgServerTileService.GetTile",
+                    throw new MgException(MgExceptionCodes::MgFileIoException, L"MgServerTileService.GetTile",
                         __LINE__, __WFILE__, &arguments, L"MgUnableToLockMetaTileFile", NULL);
                 }
             }
@@ -393,7 +393,7 @@
                 {
                     MgStringCollection arguments;
                     arguments.Add(metaTileLockPathname);
-                    throw new MgFileIoException(L"MgServerTileService.GetTile",
+                    throw new MgException(MgExceptionCodes::MgFileIoException, L"MgServerTileService.GetTile",
                         __LINE__, __WFILE__, &arguments, L"MgUnableToCreateLockFile", NULL);
                 }
                 else

Modified: sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileOperationFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileOperationFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/Services/Tile/TileOperationFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -69,7 +69,7 @@
             handler.reset(new MgOpGetTile());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgTileOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -81,7 +81,7 @@
             handler.reset(new MgOpSetTile());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgTileOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -93,7 +93,7 @@
             handler.reset(new MgOpClearCache());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgTileOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -105,7 +105,7 @@
             handler.reset(new MgOpClearCache());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgTileOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -117,7 +117,7 @@
             handler.reset(new MgOpGetDefaultTileSizeX());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgTileOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -129,7 +129,7 @@
             handler.reset(new MgOpGetDefaultTileSizeY());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgTileOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -141,7 +141,7 @@
             handler.reset(new MgOpGetDefaultTileSizeX());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgTileOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -153,7 +153,7 @@
             handler.reset(new MgOpGetDefaultTileSizeY());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgTileOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
@@ -165,13 +165,13 @@
             handler.reset(new MgOpGetTileProviders());
             break;
         default:
-            throw new MgInvalidOperationVersionException(
+            throw new MgException(MgExceptionCodes::MgInvalidOperationVersionException, 
                 L"MgTileOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         break;
 
     default:
-        throw new MgInvalidOperationException(
+        throw new MgException(MgExceptionCodes::MgInvalidOperationException, 
             L"MgTileOperationFactory.GetOperation", __LINE__, __WFILE__, NULL, L"", NULL);
     }
 

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/CatchHelperMacros.h
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/CatchHelperMacros.h	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/CatchHelperMacros.h	2020-10-21 14:38:32 UTC (rev 9747)
@@ -17,10 +17,19 @@
 
 #include "catch.hpp"
 #define REQUIRE_THROWS_MG(action, extype) \
-    try { \
+    try \
+    { \
         action; \
         FAIL("Expected exception to be thrown"); \
     } \
-    catch (extype ex) { \
-        SAFE_RELEASE(ex); \
+    catch (MgException* ex) \
+    { \
+        if (ex->GetExceptionCode() == MgExceptionCodes::extype) \
+        { \
+            SAFE_RELEASE(ex); \
+        } \
+        else \
+        { \
+            ex->Raise(); \
+        } \
     }

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestCoordinateSystem.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestCoordinateSystem.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestCoordinateSystem.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -810,7 +810,7 @@
         REQUIRE(pCoordinateSystem);
 
         ogcWkt = InvalidWkt;
-        REQUIRE_THROWS_MG(pCoordinateSystem = factory.Create(ogcWkt), MgCoordinateSystemConversionFailedException*);
+        REQUIRE_THROWS_MG(pCoordinateSystem = factory.Create(ogcWkt), MgCoordinateSystemConversionFailedException);
 
         ogcWkt = ArbitraryWkt_Feet;
         pCoordinateSystem = factory.Create(ogcWkt);
@@ -854,16 +854,19 @@
         Ptr<MgCoordinateSystem> pCoordinateSystem = factory.Create(ogcWkt);
         REQUIRE(pCoordinateSystem);
     }
-    catch(MgCoordinateSystemConversionFailedException* e)
-    {
-        // This exception is expected
-        SAFE_RELEASE(e);
-    }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        if (e->GetExceptionCode() == MgExceptionCodes::MgCoordinateSystemConversionFailedException)
+        {
+            // This exception is expected
+            SAFE_RELEASE(e);
+        }
+        else 
+        {
+            STRING message = e->GetDetails(TEST_LOCALE);
+            SAFE_RELEASE(e);
+            FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        }
     }
     catch(...)
     {
@@ -956,7 +959,7 @@
                     }
                     else
                     {
-                        throw new MgInvalidPropertyTypeException(
+                        throw new MgException(MgExceptionCodes::MgInvalidPropertyTypeException, 
                             L"TestCoordinateSystem.TestCase_EnumerateCategories", __LINE__, __WFILE__, NULL, L"", NULL);
                     }
                 }
@@ -1039,7 +1042,7 @@
         bResult = pCoordinateSystem->IsValid();
         REQUIRE(bResult == true);
 
-        REQUIRE_THROWS_MG(pCoordinateSystem = factory.Create(InvalidWkt), MgCoordinateSystemConversionFailedException*);
+        REQUIRE_THROWS_MG(pCoordinateSystem = factory.Create(InvalidWkt), MgCoordinateSystemConversionFailedException);
     }
     catch(MgException* e)
     {
@@ -1383,7 +1386,7 @@
         MgCoordinateXY coord1(0.0, 0.0);
         MgCoordinateXY coord2(4.0, 3.0);
 
-        REQUIRE_THROWS_MG(double meters = pCoordinateSystem->MeasureGreatCircleDistance(&coord1, &coord2), MgInvalidCoordinateSystemTypeException*);
+        REQUIRE_THROWS_MG(double meters = pCoordinateSystem->MeasureGreatCircleDistance(&coord1, &coord2), MgInvalidCoordinateSystemTypeException);
     }
     catch(MgException* e)
     {
@@ -3998,10 +4001,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4032,10 +4032,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4066,10 +4063,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4100,10 +4094,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4134,10 +4125,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4168,10 +4156,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4202,10 +4187,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4236,10 +4218,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4270,10 +4249,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4304,10 +4280,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4338,10 +4311,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4372,10 +4342,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4406,10 +4373,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4440,10 +4404,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4474,10 +4435,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4508,10 +4466,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4542,10 +4497,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4576,10 +4528,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4610,10 +4559,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4644,10 +4590,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4678,10 +4621,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4712,10 +4652,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4746,10 +4683,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -4780,10 +4714,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -5390,10 +5321,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -5424,10 +5352,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -5458,10 +5383,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -5492,10 +5414,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -5526,10 +5445,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -5560,10 +5476,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -5594,10 +5507,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -5628,10 +5538,7 @@
         {
             Ptr<MgCoordinateSystemTransform> transform = factory.GetTransform(coordinateSystemSource, coordinateSystemTarget);
         }
-        catch(MgCoordinateSystemInitializationFailedException* e)
-        {
-            SAFE_RELEASE(e);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgCoordinateSystemInitializationFailedException)
     }
     catch(MgException* e)
     {
@@ -6388,7 +6295,7 @@
         ogcWkt = factory->ConvertCoordinateSystemCodeToWkt(L"ePsG:4326");
         REQUIRE(ogcWkt == EPSG_4326_Wkt);
 
-        REQUIRE_THROWS_MG(ogcWkt = factory->ConvertCoordinateSystemCodeToWkt(L"test:4000"), MgCoordinateSystemLoadFailedException*);
+        REQUIRE_THROWS_MG(ogcWkt = factory->ConvertCoordinateSystemCodeToWkt(L"test:4000"), MgCoordinateSystemLoadFailedException);
 
         ogcWkt = factory->ConvertEpsgCodeToWkt(4326);
         REQUIRE(ogcWkt == EPSG_4326_Wkt);

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestDrawingService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestDrawingService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestDrawingService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -69,7 +69,7 @@
     {
         Ptr<MgDrawingService> m_svcDrawing = TestServiceFactory::CreateDrawingService();
         Ptr<MgResourceIdentifier> resId1 = new MgResourceIdentifier(L"Library://UnitTests/Drawings/SpaceShip.DrawingSource");
-        REQUIRE_THROWS_MG(m_svcDrawing->EnumerateSectionResources(resId1, L"foo"), MgDwfSectionNotFoundException*);
+        REQUIRE_THROWS_MG(m_svcDrawing->EnumerateSectionResources(resId1, L"foo"), MgDwfSectionNotFoundException);
         
         STRING sect1 = L"com.autodesk.dwf.ePlot_9E2723744244DB8C44482263E654F764";
         Ptr<MgByteReader> rdr1 = m_svcDrawing->EnumerateSectionResources(resId1, sect1);

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestFeatureService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestFeatureService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestFeatureService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -90,13 +90,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetFeatureProviders", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetFeatureProviders", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetFeatureProviders", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetFeatureProviders", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgByteReader> byteReader = pService->GetFeatureProviders();
@@ -133,13 +133,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_TestConnectionSDFProvider", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_TestConnectionSDFProvider", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService.p == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_TestConnectionSDFProvider", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_TestConnectionSDFProvider", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -185,7 +185,7 @@
         MgFdoConnectionManager* pManager = MgFdoConnectionManager::GetInstance();
         if (pManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_TestFdoConnectionManager", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_TestFdoConnectionManager", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         const STRING provider = L"OSGeo.SDF";
@@ -255,19 +255,19 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetConnectionPropertyValues", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetConnectionPropertyValues", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetConnectionPropertyValues", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetConnectionPropertyValues", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING provider = L"";
         STRING property = L"";
         STRING connectionString = L"";
-        REQUIRE_THROWS_MG(pService->GetConnectionPropertyValues(provider, property, connectionString), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetConnectionPropertyValues(provider, property, connectionString), MgInvalidArgumentException);
 
         provider = L"OSGeo.SDF";
         property = L"ReadOnly";
@@ -304,13 +304,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetCapabilities", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetCapabilities", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetCapabilities", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetCapabilities", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING provider = L"OSGeo.SDF";
@@ -318,7 +318,7 @@
         MgFdoConnectionManager* fdoConnectionManager = MgFdoConnectionManager::GetInstance();
         if (fdoConnectionManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetCapabilities", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetCapabilities", __LINE__, __WFILE__, NULL, L"", NULL);
         }
         STRING providerNoVersion = fdoConnectionManager->UpdateProviderName(provider);
 
@@ -328,7 +328,7 @@
 
         provider = L"";
 
-        REQUIRE_THROWS_MG(pService->GetCapabilities(provider), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetCapabilities(provider), MgInvalidArgumentException);
     }
     catch(MgException* e)
     {
@@ -360,20 +360,20 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_TestConnectionResourceIdentifier", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_TestConnectionResourceIdentifier", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_TestConnectionResourceIdentifier", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_TestConnectionResourceIdentifier", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
-        REQUIRE_THROWS_MG(pService->TestConnection(resource), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->TestConnection(resource), MgInvalidRepositoryTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        REQUIRE_THROWS_MG(pService->TestConnection(resource), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->TestConnection(resource), MgInvalidResourceTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         bool bResult = pService->TestConnection(resource);
@@ -409,13 +409,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetSchemas", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetSchemas", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetSchemas", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetSchemas", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -423,10 +423,10 @@
         MgUserInformation::SetCurrentUserInfo(adminUserInfo);
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
-        REQUIRE_THROWS_MG(pService->GetSchemas(resource), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->GetSchemas(resource), MgInvalidRepositoryTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        REQUIRE_THROWS_MG(pService->GetSchemas(resource), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->GetSchemas(resource), MgInvalidResourceTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         Ptr<MgStringCollection> schemas = pService->GetSchemas(resource);
@@ -462,13 +462,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetClasses", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetClasses", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetClasses", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetClasses", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -477,10 +477,10 @@
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING schemaName = L"";
-        REQUIRE_THROWS_MG(pService->GetClasses(resource, schemaName), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->GetClasses(resource, schemaName), MgInvalidRepositoryTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        REQUIRE_THROWS_MG(pService->GetClasses(resource, schemaName), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->GetClasses(resource, schemaName), MgInvalidResourceTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         schemaName = L"SHP_Schema";
@@ -517,19 +517,19 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetClassDefinition", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING schemaName = L"";
         STRING className = L"";
-        REQUIRE_THROWS_MG(pService->GetClassDefinition(resource, schemaName, className), MgClassNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GetClassDefinition(resource, schemaName, className), MgClassNotFoundException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         schemaName = L"SHP_Schema";
@@ -567,13 +567,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetIdentityProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetIdentityProperties", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetIdentityProperties", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetIdentityProperties", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -609,7 +609,7 @@
         // Here is where exception should be thrown
         classNames->Clear();
         classNames->Add(L"IDontExist");
-        REQUIRE_THROWS_MG(pService->GetIdentityProperties(fsId, L"UnitTest", classNames), MgFdoException*);
+        REQUIRE_THROWS_MG(pService->GetIdentityProperties(fsId, L"UnitTest", classNames), MgFdoException);
     }
     catch(MgException* e)
     {
@@ -641,13 +641,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_DescribeSchema", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_DescribeSchema", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_DescribeSchema", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_DescribeSchema", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -656,11 +656,11 @@
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING schemaName = L"";
-        REQUIRE_THROWS_MG(pService->DescribeSchema(resource, schemaName, NULL), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->DescribeSchema(resource, schemaName, NULL), MgInvalidRepositoryTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
         schemaName = L"";
-        REQUIRE_THROWS_MG(pService->DescribeSchema(resource, schemaName, NULL), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->DescribeSchema(resource, schemaName, NULL), MgInvalidResourceTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         schemaName = L"";
@@ -713,13 +713,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_ApplySchema", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_ApplySchema", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_ApplySchema", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_ApplySchema", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -978,19 +978,19 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING className = L"";
         Ptr<MgFeatureQueryOptions> options = new MgFeatureQueryOptions();
-        REQUIRE_THROWS_MG(pService->SelectFeatures(resource, className, options), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->SelectFeatures(resource, className, options), MgInvalidArgumentException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         className = L"Parcels";
@@ -1028,13 +1028,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         //Create our test data store
@@ -1158,13 +1158,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == 0)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_SelectFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_VotingDistricts.FeatureSource");
@@ -1177,7 +1177,7 @@
         options->SetOrderingFilter(orderProps, MgOrderingOption::Descending);
 
         //Invalid conditions for ordered select
-        REQUIRE_THROWS_MG(pService->SelectFeatures(resource, className, options), MgFeatureServiceException*);
+        REQUIRE_THROWS_MG(pService->SelectFeatures(resource, className, options), MgFeatureServiceException);
         
         orderProps->Clear();
         orderProps->Add(L"ID");
@@ -1236,19 +1236,19 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_SelectAggregate", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_SelectAggregate", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SelectAggregate", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_SelectAggregate", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING className = L"";
         Ptr<MgFeatureAggregateOptions> options = new MgFeatureAggregateOptions();
-        REQUIRE_THROWS_MG(pService->SelectAggregate(resource, className, options), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->SelectAggregate(resource, className, options), MgInvalidArgumentException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         className = L"Parcels";
@@ -1289,18 +1289,18 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_ExecuteSqlQuery", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_ExecuteSqlQuery", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_ExecuteSqlQuery", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_ExecuteSqlQuery", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         const STRING sqlQuery = L"";
-        REQUIRE_THROWS_MG(pService->ExecuteSqlQuery(resource, sqlQuery), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->ExecuteSqlQuery(resource, sqlQuery), MgInvalidArgumentException);
 
         //TODO test with correct input
     }
@@ -1335,18 +1335,18 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_ExecuteSqlNonQuery", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_ExecuteSqlNonQuery", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_ExecuteSqlNonQuery", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_ExecuteSqlNonQuery", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         const STRING sqlNonQuery = L"";
-        REQUIRE_THROWS_MG(pService->ExecuteSqlNonQuery(resource, sqlNonQuery), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->ExecuteSqlNonQuery(resource, sqlNonQuery), MgInvalidArgumentException);
 
         //TODO test with correct input
     }
@@ -1380,13 +1380,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetSpatialContexts", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetSpatialContexts", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetSpatialContexts", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetSpatialContexts", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -1395,10 +1395,10 @@
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         bool activeOnly = false;
-        REQUIRE_THROWS_MG(pService->GetSpatialContexts(resource, activeOnly), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->GetSpatialContexts(resource, activeOnly), MgInvalidRepositoryTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        REQUIRE_THROWS_MG(pService->GetSpatialContexts(resource, activeOnly), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->GetSpatialContexts(resource, activeOnly), MgInvalidResourceTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
 
@@ -1469,13 +1469,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetLongTransactions", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetLongTransactions", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetLongTransactions", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetLongTransactions", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -1484,10 +1484,10 @@
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         bool activeOnly = false;
-        REQUIRE_THROWS_MG(pService->GetLongTransactions(resource, activeOnly), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->GetLongTransactions(resource, activeOnly), MgInvalidRepositoryTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        REQUIRE_THROWS_MG(pService->GetLongTransactions(resource, activeOnly), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->GetLongTransactions(resource, activeOnly), MgInvalidResourceTypeException);
 
         //TODO test with correct input
     }
@@ -1521,36 +1521,36 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_SetLongTransaction", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_SetLongTransaction", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SetLongTransaction", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_SetLongTransaction", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING longTransactionName = L"Live";
 
         // verify exception when passing in a NULL resource
-        REQUIRE_THROWS_MG(pService->SetLongTransaction(NULL, longTransactionName), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->SetLongTransaction(NULL, longTransactionName), MgNullArgumentException);
 
         // verify exception when passing in an invalid resource type
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
-        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgInvalidResourceTypeException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Geography/World.MapDefinition");
-        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgInvalidResourceTypeException*);
+        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgInvalidResourceTypeException);
 
         // verify exception when session is not set
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
-        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgSessionNotFoundException*);
+        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgSessionNotFoundException);
 
         // set the user information for the current thread to be administrator - this
         // alone doesn't create a session
         Ptr<MgUserInformation> userInfo = new MgUserInformation(MgUser::Administrator, L"");
         MgUserInformation::SetCurrentUserInfo(userInfo);
-        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgSessionNotFoundException*);
+        REQUIRE_THROWS_MG(pService->SetLongTransaction(resource, longTransactionName), MgSessionNotFoundException);
 
         // now set a session
         userInfo->SetMgSessionId(userInfo->CreateMgSessionId());
@@ -1593,17 +1593,17 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING readerId = L"0";
-        REQUIRE_THROWS_MG(pService->GetFeatures(readerId), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetFeatures(readerId), MgInvalidArgumentException);
 
         //TODO test with correct input
     }
@@ -1637,13 +1637,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_CloseFeatureReader", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_CloseFeatureReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_CloseFeatureReader", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_CloseFeatureReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING readerId = L"0";
@@ -1682,17 +1682,17 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetSqlRows", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetSqlRows", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetSqlRows", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetSqlRows", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING sqlReader = L"0";
-        REQUIRE_THROWS_MG(pService->GetSqlRows(sqlReader), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetSqlRows(sqlReader), MgInvalidArgumentException);
 
         //TODO test with correct input
     }
@@ -1726,13 +1726,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_CloseSqlReader", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_CloseSqlReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_CloseSqlReader", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_CloseSqlReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING sqlReader = L"0";
@@ -1771,19 +1771,19 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetRaster", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetRaster", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetRaster", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetRaster", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING featureReader = L"0";
         INT32 xSize = 0;
         INT32 ySize = 0;
-        REQUIRE_THROWS_MG(pService->GetRaster(featureReader, xSize, ySize, L""), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetRaster(featureReader, xSize, ySize, L""), MgInvalidArgumentException);
 
         //TODO test with correct input
     }
@@ -1817,17 +1817,17 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_GetDataRows", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_GetDataRows", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_GetDataRows", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_GetDataRows", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING dataReader = L"0";
-        REQUIRE_THROWS_MG(pService->GetDataRows(dataReader), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetDataRows(dataReader), MgInvalidArgumentException);
 
         //TODO test with correct input
     }
@@ -1861,13 +1861,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_CloseDataReader", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_CloseDataReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_CloseDataReader", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_CloseDataReader", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         STRING dataReader = L"0";
@@ -1906,7 +1906,7 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_JoinFeatures",
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_JoinFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -1913,7 +1913,7 @@
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_JoinFeatures",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_JoinFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -1977,7 +1977,7 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_JoinFeaturesChainedInner1ToMany",
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_JoinFeaturesChainedInner1ToMany",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -1984,7 +1984,7 @@
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_JoinFeaturesChainedInner1ToMany",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_JoinFeaturesChainedInner1ToMany",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -2052,7 +2052,7 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_CreateFeatureSource",
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_CreateFeatureSource",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -2059,7 +2059,7 @@
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_CreateFeatureSource",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_CreateFeatureSource",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -2066,7 +2066,7 @@
         Ptr<MgResourceService> pResourceService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_CreateFeatureSource",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_CreateFeatureSource",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -2171,13 +2171,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_ConcurrentAccess", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_ConcurrentAccess", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_ConcurrentAccess", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_ConcurrentAccess", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
@@ -2205,7 +2205,7 @@
 
         // Create another reader - this one should timeout and throw exception
         Ptr<MgFeatureReader> readerFail;
-        REQUIRE_THROWS_MG(readerFail = pService->SelectFeatures(resource, className, options), MgAllProviderConnectionsUsedException*);
+        REQUIRE_THROWS_MG(readerFail = pService->SelectFeatures(resource, className, options), MgAllProviderConnectionsUsedException);
 
         if (!featureReaders.empty())
         {
@@ -2274,13 +2274,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> featureSource = new MgResourceIdentifier(L"Library://UnitTests/Data/SavePointTest.FeatureSource");
@@ -2377,13 +2377,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_SavePoint", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> featureSource = new MgResourceIdentifier(L"Library://UnitTests/Data/TestInsert.FeatureSource");
@@ -2459,7 +2459,7 @@
         nameVal->SetValue(L"Bar");
 
         //Execute again, expect MgFdoException due to constraint violation
-        REQUIRE_THROWS_MG(result = pService->UpdateFeatures(featureSource, commands, true), MgFdoException*);
+        REQUIRE_THROWS_MG(result = pService->UpdateFeatures(featureSource, commands, true), MgFdoException);
         
         //Expect one inserted result
         Ptr<MgFeatureQueryOptions> query = new MgFeatureQueryOptions();
@@ -2517,13 +2517,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_JoinFdoFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_JoinFdoFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_JoinFdoFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_JoinFdoFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> lFeatureSource = new MgResourceIdentifier(L"Library://UnitTests/Data/FdoJoin.FeatureSource");
@@ -2599,19 +2599,19 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_BenchmarkSqliteJoin", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_BenchmarkSqliteJoin", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_BenchmarkSqliteJoin", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_BenchmarkSqliteJoin", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (featSvc == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_BenchmarkSqliteJoin",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_BenchmarkSqliteJoin",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -2699,19 +2699,19 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_BenchmarkSqliteAggregateJoin", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_BenchmarkSqliteAggregateJoin", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_BenchmarkSqliteAggregateJoin", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_BenchmarkSqliteAggregateJoin", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (featSvc == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_BenchmarkSqliteAggregateJoin",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_BenchmarkSqliteAggregateJoin",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -2818,13 +2818,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_UpdateFeaturesPartialFailure", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_UpdateFeaturesPartialFailure", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (featSvc == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_UpdateFeaturesPartialFailure",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_UpdateFeaturesPartialFailure",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -2878,13 +2878,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_InsertFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_InsertFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (featSvc == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_InsertFeatures",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_InsertFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -2954,13 +2954,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_InsertFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_InsertFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (featSvc == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_InsertFeatures",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_InsertFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -3037,13 +3037,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_UpdateMatchingFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_UpdateMatchingFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (featSvc == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_UpdateMatchingFeatures",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_UpdateMatchingFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -3147,13 +3147,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_DeleteFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_DeleteFeatures", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (featSvc == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_DeleteFeatures",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_DeleteFeatures",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -3249,13 +3249,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_TransactedCrud", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_TransactedCrud", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> featSvc = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (featSvc == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_TransactedCrud",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_TransactedCrud",
                 __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
@@ -3386,19 +3386,19 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == NULL)
         {
-            throw new MgNullReferenceException(L"TestFeatureService.TestCase_FeatureReader_GetPropertyIndex_BadProp", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestFeatureService.TestCase_FeatureReader_GetPropertyIndex_BadProp", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == NULL)
         {
-            throw new MgServiceNotAvailableException(L"TestFeatureService.TestCase_FeatureReader_GetPropertyIndex_BadProp", __LINE__, __WFILE__, NULL, L"", NULL);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestFeatureService.TestCase_FeatureReader_GetPropertyIndex_BadProp", __LINE__, __WFILE__, NULL, L"", NULL);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING className = L"";
         Ptr<MgFeatureQueryOptions> options = new MgFeatureQueryOptions();
-        REQUIRE_THROWS_MG(pService->SelectFeatures(resource, className, options), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->SelectFeatures(resource, className, options), MgInvalidArgumentException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         className = L"Parcels";

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestGeometry.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestGeometry.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestGeometry.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -1058,7 +1058,7 @@
 
         Ptr<MgPolygon> testPolygon = CreatePolygon();
         // TODO: Need to investigate why this test throws an exception
-        //CPPUNIT_ASSERT_THROW_MG(testPolygon->Buffer(5.0, measure), MgUnclassifiedException*);
+        //CPPUNIT_ASSERT_THROW_MG(testPolygon->Buffer(5.0, measure), MgUnclassifiedException);
     }
     catch (MgException* e)
     {
@@ -2390,9 +2390,9 @@
         Ptr<MgWktReaderWriter> wktRw = new MgWktReaderWriter();
         Ptr<MgGeometry> geom = wktRw->Read(L"POINT (1 1)");
 
-        REQUIRE_THROWS_MG(simp->Simplify(nullptr, 1.0, MgGeometrySimplificationAlgorithmType::DouglasPeucker), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(simp->Simplify(geom, 1.0, -1), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(simp->Simplify(geom, 1.0, 2), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(simp->Simplify(nullptr, 1.0, MgGeometrySimplificationAlgorithmType::DouglasPeucker), MgNullArgumentException);
+        REQUIRE_THROWS_MG(simp->Simplify(geom, 1.0, -1), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(simp->Simplify(geom, 1.0, 2), MgInvalidArgumentException);
     }
     catch (MgException* e)
     {
@@ -2684,13 +2684,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestGeometry::TestCase_PreparedGeometry", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestGeometry::TestCase_PreparedGeometry", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestGeometry::TestCase_PreparedGeometry", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestGeometry::TestCase_PreparedGeometry", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgAgfReaderWriter> agfRw = new MgAgfReaderWriter();
@@ -2702,7 +2702,7 @@
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
         STRING className = L"";
         Ptr<MgFeatureQueryOptions> options = new MgFeatureQueryOptions();
-        REQUIRE_THROWS_MG(pService->SelectFeatures(resource, className, options), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->SelectFeatures(resource, className, options), MgInvalidArgumentException);
 
         resource = new MgResourceIdentifier(L"Library://UnitTests/Data/Sheboygan_Parcels.FeatureSource");
         className = L"Parcels";

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestKmlService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestKmlService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestKmlService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -132,16 +132,23 @@
             STRING mimeType = reader->GetMimeType();
             REQUIRE(mimeType.compare(MgMimeType::Kml) == 0);
         }
-        catch(MgConnectionFailedException* e)
+        catch (MgException* e)
         {
-            SAFE_RELEASE(e);
-            ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestCase_GetMapKml skipped because unable to connect to test server.\n")));
+            if (e->GetExceptionCode() == MgExceptionCodes::MgConnectionFailedException)
+            {
+                SAFE_RELEASE(e);
+                ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestCase_GetMapKml skipped because unable to connect to test server.\n")));
 
-            // We need to update the mapguide server status so that it can be used again because we have used the
-            // same exception class for servers outside the one actually executing this code.
-            MgSiteManager* siteManager = MgSiteManager::GetInstance();
-            Ptr<MgSiteInfo> siteInfo = siteManager->GetSiteInfo(0);
-            siteInfo->SetStatus(MgSiteInfo::Ok);
+                // We need to update the mapguide server status so that it can be used again because we have used the
+                // same exception class for servers outside the one actually executing this code.
+                MgSiteManager* siteManager = MgSiteManager::GetInstance();
+                Ptr<MgSiteInfo> siteInfo = siteManager->GetSiteInfo(0);
+                siteInfo->SetStatus(MgSiteInfo::Ok);
+            }
+            else
+            {
+                e->Raise();
+            }
         }
 
         //compare results against referenced content
@@ -186,16 +193,23 @@
             STRING mimeType = reader->GetMimeType();
             REQUIRE(mimeType.compare(MgMimeType::Kmz) == 0);
         }
-        catch(MgConnectionFailedException* e)
+        catch (MgException* e)
         {
-            SAFE_RELEASE(e);
-            ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestCase_GetMapKmz skipped because unable to connect to test server.\n")));
+            if (e->GetExceptionCode() == MgExceptionCodes::MgConnectionFailedException)
+            {
+                SAFE_RELEASE(e);
+                ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestCase_GetMapKmz skipped because unable to connect to test server.\n")));
 
-            // We need to update the mapguide server status so that it can be used again because we have used the
-            // same exception class for servers outside the one actually executing this code.
-            MgSiteManager* siteManager = MgSiteManager::GetInstance();
-            Ptr<MgSiteInfo> siteInfo = siteManager->GetSiteInfo(0);
-            siteInfo->SetStatus(MgSiteInfo::Ok);
+                // We need to update the mapguide server status so that it can be used again because we have used the
+                // same exception class for servers outside the one actually executing this code.
+                MgSiteManager* siteManager = MgSiteManager::GetInstance();
+                Ptr<MgSiteInfo> siteInfo = siteManager->GetSiteInfo(0);
+                siteInfo->SetStatus(MgSiteInfo::Ok);
+            }
+            else
+            {
+                e->Raise();
+            }
         }
     }
     catch(MgException* e)
@@ -238,16 +252,23 @@
             STRING mimeType = reader->GetMimeType();
             REQUIRE(mimeType.compare(MgMimeType::Kml) == 0);
         }
-        catch(MgConnectionFailedException* e)
+        catch (MgException* e)
         {
-            SAFE_RELEASE(e);
-            ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestCase_GetLayerKml skipped because unable to connect to test server.\n")));
+            if (e->GetExceptionCode() == MgExceptionCodes::MgConnectionFailedException)
+            {
+                SAFE_RELEASE(e);
+                ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestCase_GetLayerKml skipped because unable to connect to test server.\n")));
 
-            // We need to update the mapguide server status so that it can be used again because we have used the
-            // same exception class for servers outside the one actually executing this code.
-            MgSiteManager* siteManager = MgSiteManager::GetInstance();
-            Ptr<MgSiteInfo> siteInfo = siteManager->GetSiteInfo(0);
-            siteInfo->SetStatus(MgSiteInfo::Ok);
+                // We need to update the mapguide server status so that it can be used again because we have used the
+                // same exception class for servers outside the one actually executing this code.
+                MgSiteManager* siteManager = MgSiteManager::GetInstance();
+                Ptr<MgSiteInfo> siteInfo = siteManager->GetSiteInfo(0);
+                siteInfo->SetStatus(MgSiteInfo::Ok);
+            }
+            else
+            {
+                e->Raise();
+            }
         }
 
         //compare results against referenced content
@@ -294,16 +315,23 @@
             STRING mimeType = reader->GetMimeType();
             REQUIRE(mimeType.compare(MgMimeType::Kml) == 0);
         }
-        catch(MgConnectionFailedException* e)
+        catch (MgException* e)
         {
-            SAFE_RELEASE(e);
-            ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestCase_GetFeaturesKml skipped because unable to connect to test server.\n")));
+            if (e->GetExceptionCode() == MgExceptionCodes::MgConnectionFailedException)
+            {
+                SAFE_RELEASE(e);
+                ACE_DEBUG((LM_INFO, ACE_TEXT("\nTestCase_GetFeaturesKml skipped because unable to connect to test server.\n")));
 
-            // We need to update the mapguide server status so that it can be used again because we have used the
-            // same exception class for servers outside the one actually executing this code.
-            MgSiteManager* siteManager = MgSiteManager::GetInstance();
-            Ptr<MgSiteInfo> siteInfo = siteManager->GetSiteInfo(0);
-            siteInfo->SetStatus(MgSiteInfo::Ok);
+                // We need to update the mapguide server status so that it can be used again because we have used the
+                // same exception class for servers outside the one actually executing this code.
+                MgSiteManager* siteManager = MgSiteManager::GetInstance();
+                Ptr<MgSiteInfo> siteInfo = siteManager->GetSiteInfo(0);
+                siteInfo->SetStatus(MgSiteInfo::Ok);
+            }
+            else
+            {
+                e->Raise();
+            }
         }
 
         //compare results against referenced content

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestLogManager.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestLogManager.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestLogManager.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -227,12 +227,12 @@
         Ptr<MgStringProperty> newTestNameProp = new MgStringProperty(L"LogNameProperty", NewTestName);
         REQUIRE(logs->Contains(newTestNameProp));
 
-        REQUIRE_THROWS_MG(pMgLogManager->RenameLog(L"", NewTestName), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(pMgLogManager->RenameLog(NewTestName, L""), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(pMgLogManager->RenameLog(TestName, TestName), MgDuplicateFileException*);
-        REQUIRE_THROWS_MG(pMgLogManager->RenameLog(L"DoesNotExist.log", L"NewDoesNotExist.log"), MgFileNotFoundException*);
+        REQUIRE_THROWS_MG(pMgLogManager->RenameLog(L"", NewTestName), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(pMgLogManager->RenameLog(NewTestName, L""), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(pMgLogManager->RenameLog(TestName, TestName), MgDuplicateFileException);
+        REQUIRE_THROWS_MG(pMgLogManager->RenameLog(L"DoesNotExist.log", L"NewDoesNotExist.log"), MgFileNotFoundException);
 #ifdef _WIN32
-        REQUIRE_THROWS_MG(pMgLogManager->RenameLog(NewTestName, L"?"), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->RenameLog(NewTestName, L"?"), MgInvalidArgumentException);
 #endif
     }
     catch (MgException* e)
@@ -440,12 +440,12 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetAccessLog(nullptr, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetAccessLog(nullptr, toDate), MgNullArgumentException);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);
         toDate = new MgDateTime(2005, 2, 19, 18, 0, 0, 0);
-        REQUIRE_THROWS_MG(pMgLogManager->GetAccessLog(fromDate, toDate), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetAccessLog(fromDate, toDate), MgInvalidArgumentException);
 
         // Search a log file with an invalid log entry as the first entry
         CreateFile(path + JunkName, L"asdfasdfasdf");
@@ -452,7 +452,7 @@
         pMgLogManager->SetAccessLogFileName(JunkName);
         fromDate = new MgDateTime(2005, 3, 8, 0, 0, 0, 0);
         toDate = new MgDateTime(2005, 3, 9, 0, 0, 0, 0);
-        REQUIRE_THROWS_MG(pMgLogManager->GetAccessLog(fromDate, toDate), MgInvalidLogEntryException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetAccessLog(fromDate, toDate), MgInvalidLogEntryException);
 
         pMgLogManager->SetAccessLogFileName(originalName);
     }
@@ -479,7 +479,7 @@
 TEST_CASE("GetAccessLogInvalid", "[LogManager]")
 {
     MgLogManager* pMgLogManager = MgLogManager::GetInstance();
-    REQUIRE_THROWS_MG(pMgLogManager->GetAccessLog(-1), MgArgumentOutOfRangeException*);
+    REQUIRE_THROWS_MG(pMgLogManager->GetAccessLog(-1), MgArgumentOutOfRangeException);
 }
 
 ///----------------------------------------------------------------------------
@@ -659,12 +659,12 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetAdminLog(nullptr, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetAdminLog(nullptr, toDate), MgNullArgumentException);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);
         toDate = new MgDateTime(2005, 2, 19, 18, 0, 0, 0);
-        REQUIRE_THROWS_MG(pMgLogManager->GetAdminLog(fromDate, toDate), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetAdminLog(fromDate, toDate), MgInvalidArgumentException);
 
         pMgLogManager->SetAdminLogFileName(originalName);
     }
@@ -691,7 +691,7 @@
 TEST_CASE("GetAdminLogInvalid", "[LogManager]")
 {
     MgLogManager* pMgLogManager = MgLogManager::GetInstance();
-    REQUIRE_THROWS_MG(pMgLogManager->GetAdminLog(-1), MgArgumentOutOfRangeException*);
+    REQUIRE_THROWS_MG(pMgLogManager->GetAdminLog(-1), MgArgumentOutOfRangeException);
 }
 
 ///----------------------------------------------------------------------------
@@ -871,12 +871,12 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetAuthenticationLog(nullptr, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetAuthenticationLog(nullptr, toDate), MgNullArgumentException);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);
         toDate = new MgDateTime(2005, 2, 19, 18, 0, 0, 0);
-        REQUIRE_THROWS_MG(pMgLogManager->GetAuthenticationLog(fromDate, toDate), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetAuthenticationLog(fromDate, toDate), MgInvalidArgumentException);
 
         pMgLogManager->SetAuthenticationLogFileName(originalName);
     }
@@ -903,7 +903,7 @@
 TEST_CASE("GetAuthenticationLogInvalid", "[LogManager]")
 {
     MgLogManager* pMgLogManager = MgLogManager::GetInstance();
-    REQUIRE_THROWS_MG(pMgLogManager->GetAuthenticationLog(-1), MgArgumentOutOfRangeException*);
+    REQUIRE_THROWS_MG(pMgLogManager->GetAuthenticationLog(-1), MgArgumentOutOfRangeException);
 }
 
 ///----------------------------------------------------------------------------
@@ -1083,12 +1083,12 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetErrorLog(nullptr, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetErrorLog(nullptr, toDate), MgNullArgumentException);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);
         toDate = new MgDateTime(2005, 2, 19, 18, 0, 0, 0);
-        REQUIRE_THROWS_MG(pMgLogManager->GetErrorLog(fromDate, toDate), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetErrorLog(fromDate, toDate), MgInvalidArgumentException);
 
         pMgLogManager->SetErrorLogFileName(originalName);
     }
@@ -1115,7 +1115,7 @@
 TEST_CASE("GetErrorLogInvalid", "[LogManager]")
 {
     MgLogManager* pMgLogManager = MgLogManager::GetInstance();
-    REQUIRE_THROWS_MG(pMgLogManager->GetErrorLog(-1), MgArgumentOutOfRangeException*);
+    REQUIRE_THROWS_MG(pMgLogManager->GetErrorLog(-1), MgArgumentOutOfRangeException);
 }
 
 ///----------------------------------------------------------------------------
@@ -1295,12 +1295,12 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetSessionLog(nullptr, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetSessionLog(nullptr, toDate), MgNullArgumentException);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);
         toDate = new MgDateTime(2005, 2, 19, 18, 0, 0, 0);
-        REQUIRE_THROWS_MG(pMgLogManager->GetSessionLog(fromDate, toDate), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetSessionLog(fromDate, toDate), MgInvalidArgumentException);
 
         pMgLogManager->SetSessionLogFileName(originalName);
     }
@@ -1327,7 +1327,7 @@
 TEST_CASE("GetSessionLogInvalid", "[LogManager]")
 {
     MgLogManager* pMgLogManager = MgLogManager::GetInstance();
-    REQUIRE_THROWS_MG(pMgLogManager->GetSessionLog(-1), MgArgumentOutOfRangeException*);
+    REQUIRE_THROWS_MG(pMgLogManager->GetSessionLog(-1), MgArgumentOutOfRangeException);
 }
 
 ///----------------------------------------------------------------------------
@@ -1507,12 +1507,12 @@
         REQUIRE(logContents.length() == 0);
 
         // Use a null value for the date
-        REQUIRE_THROWS_MG(pMgLogManager->GetTraceLog(nullptr, toDate), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetTraceLog(nullptr, toDate), MgNullArgumentException);
 
         // Use dates more than 24 hours apart
         fromDate = new MgDateTime(2005, 2, 18, 14, 0, 0, 0);
         toDate = new MgDateTime(2005, 2, 19, 18, 0, 0, 0);
-        REQUIRE_THROWS_MG(pMgLogManager->GetTraceLog(fromDate, toDate), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pMgLogManager->GetTraceLog(fromDate, toDate), MgInvalidArgumentException);
 
         pMgLogManager->SetTraceLogFileName(originalName);
     }
@@ -1539,7 +1539,7 @@
 TEST_CASE("GetTraceLogInvalid", "[LogManager]")
 {
     MgLogManager* pMgLogManager = MgLogManager::GetInstance();
-    REQUIRE_THROWS_MG(pMgLogManager->GetTraceLog(-1), MgArgumentOutOfRangeException*);
+    REQUIRE_THROWS_MG(pMgLogManager->GetTraceLog(-1), MgArgumentOutOfRangeException);
 }
 
 ///----------------------------------------------------------------------------

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestLogManagerThread.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestLogManagerThread.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestLogManagerThread.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -32,7 +32,7 @@
     MgLogManager* pMan = MgLogManager::GetInstance();
     if (nullptr == pMan)
     {
-        throw new MgNullReferenceException(L"TestLogManagerThread.svc", __LINE__, __WFILE__, nullptr, L"", nullptr);
+        throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestLogManagerThread.svc", __LINE__, __WFILE__, nullptr, L"", nullptr);
     }
 
     INT32 nResult = 0;

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestMisc.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestMisc.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestMisc.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -32,6 +32,57 @@
 #define THREAD_GROUP 65520
 #define TESTREQUESTS 5000
 
+TEST_CASE("Exceptions", "[Misc]")
+{
+    // Testing MG_CATCH_AND_RELEASE_IF_TYPE
+    try 
+    {
+        try
+        {
+            MgObject* ptr = nullptr;
+            CHECKNULL(ptr, L"TestMisc::TestCase_Exceptions");
+        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgNullReferenceException)
+    }
+    catch (MgException* ex)
+    {
+        FAIL("Expected MG_CATCH_AND_RELEASE_IF_TYPE macro to have caught the exception and release it");
+        SAFE_RELEASE(ex);
+    }
+
+    // Testing proper message extraction
+    try
+    {
+        MgObject* ptr = nullptr;
+        CHECKNULL(ptr, L"TestMisc::TestCase_Exceptions");
+    }
+    catch (MgException* ex)
+    {
+        // If proper message extraction is working, we should never see "Failed to retrieve message for $EXCEPTION"
+        // anywhere in the details
+        STRING msg = ex->GetDetails(TestServiceFactory::TEST_LOCALE);
+        REQUIRE(msg.find(L"Failed to retrieve message for ") == STRING::npos);
+        SAFE_RELEASE(ex);
+    }
+
+    // Testing native error code preservation through serialization
+    {
+        Ptr<MgException> ex = new MgException(MgExceptionCodes::MgFdoException, L"TestMisc::TestCase_Exceptions", __LINE__, __WFILE__, nullptr, L"", nullptr);
+        ex->SetNativeErrorCode(1234);
+
+        Ptr<MgMemoryStreamHelper> helper = new MgMemoryStreamHelper();
+        Ptr<MgStream> stream = new MgStream(helper);
+
+        ex->Serialize(stream);
+        
+        Ptr<MgException> ex2 = static_cast<MgException*>(MgException::CreateObject());
+        ex2->Deserialize(stream);
+
+        REQUIRE(MgExceptionCodes::MgFdoException == ex2->GetExceptionCode());
+        REQUIRE(1234 == ex2->GetNativeErrorCode());
+    }
+}
+
 TEST_CASE("CommonExceptionMessages", "[Misc]")
 {
     try
@@ -903,10 +954,7 @@
             map1->Save();
             FAIL("Expected MgGroupNotFoundException to be thrown");
         }
-        catch (MgGroupNotFoundException* gnex)
-        {
-            SAFE_RELEASE(gnex);
-        }
+        MG_CATCH_AND_RELEASE_IF_TYPE(MgGroupNotFoundException)
     }
     catch (MgException* e)
     {

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestPerformance.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestPerformance.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestPerformance.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -45,13 +45,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if(serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestPerformance.TestCase_BenchmarkSelectFeatures", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestPerformance.TestCase_BenchmarkSelectFeatures", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestPerformance.TestCase_BenchmarkSelectFeatures", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestPerformance.TestCase_BenchmarkSelectFeatures", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceIdentifier> resource = new MgResourceIdentifier();
@@ -77,17 +77,20 @@
         ACE_DEBUG((LM_INFO, ACE_TEXT("  Execution Time (Average of %d runs): = %6.4f (s)\n"), iterations, ((GetTickCount()-lStart)/1000.0)/(double)iterations ));
         ACE_DEBUG((LM_INFO, ACE_TEXT("TestCase_BenchmarkSelectFeatures - END\n")));
     }
-    catch(MgResourceNotFoundException* e)
-    {
-        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
-        SAFE_RELEASE(e);
-        ACE_DEBUG((LM_INFO, ACE_TEXT("\n%W\nAre the performance test resources installed?\n\n"), message.c_str()));
-    }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
-        SAFE_RELEASE(e);
-        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        if (e->GetExceptionCode() == MgExceptionCodes::MgResourceNotFoundException)
+        {
+            STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+            SAFE_RELEASE(e);
+            ACE_DEBUG((LM_INFO, ACE_TEXT("\n%W\nAre the performance test resources installed?\n\n"), message.c_str()));
+        }
+        else
+        {
+            STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+            SAFE_RELEASE(e);
+            FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        }
     }
     catch(FdoException* e)
     {
@@ -113,7 +116,7 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if(serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestPerformance.TestCase_BenchmarkJoinFeatures",
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestPerformance.TestCase_BenchmarkJoinFeatures",
                 __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
@@ -120,7 +123,7 @@
         Ptr<MgFeatureService> pService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestPerformance.TestCase_BenchmarkJoinFeatures",
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestPerformance.TestCase_BenchmarkJoinFeatures",
                 __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
@@ -427,17 +430,20 @@
 
         ACE_DEBUG((LM_INFO, ACE_TEXT("TestCase_BenchmarkJoinFeatures - END\n")));
     }
-    catch(MgResourceNotFoundException* e)
-    {
-        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
-        SAFE_RELEASE(e);
-        ACE_DEBUG((LM_INFO, ACE_TEXT("\n%W\nAre the performance test resources installed?\n\n"), message.c_str()));
-    }
     catch(MgException* e)
     {
-        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
-        SAFE_RELEASE(e);
-        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        if (e->GetExceptionCode() == MgExceptionCodes::MgResourceNotFoundException)
+        {
+            STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+            SAFE_RELEASE(e);
+            ACE_DEBUG((LM_INFO, ACE_TEXT("\n%W\nAre the performance test resources installed?\n\n"), message.c_str()));
+        }
+        else
+        {
+            STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+            SAFE_RELEASE(e);
+            FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        }
     }
     catch(FdoException* e)
     {

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestResourceService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestResourceService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestResourceService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -164,13 +164,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateRepositories", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_EnumerateRepositories", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateRepositories", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_EnumerateRepositories", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -184,7 +184,7 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try to enumerate an invalid type of repository
-            REQUIRE_THROWS_MG(pService->EnumerateRepositories(L"Library"), MgInvalidRepositoryTypeException*);
+            REQUIRE_THROWS_MG(pService->EnumerateRepositories(L"Library"), MgInvalidRepositoryTypeException);
 
             //Enumerate the Session repositories
             Ptr<MgByteReader> byteReader = pService->EnumerateRepositories(L"Session");
@@ -199,7 +199,7 @@
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->EnumerateRepositories(L"Session"), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->EnumerateRepositories(L"Session"), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -222,13 +222,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_CreateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_CreateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_CreateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_CreateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -242,16 +242,16 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try to create a repository using a nullptr identifier
-            REQUIRE_THROWS_MG(pService->CreateRepository(nullptr, nullptr, nullptr), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->CreateRepository(nullptr, nullptr, nullptr), MgNullArgumentException);
 
             //Try to create a repository using an invalid repository identifier
-            REQUIRE_THROWS_MG(pService->CreateRepository(&resourceIdentifier, nullptr, nullptr), MgInvalidRepositoryTypeException*);
+            REQUIRE_THROWS_MG(pService->CreateRepository(&resourceIdentifier, nullptr, nullptr), MgInvalidRepositoryTypeException);
 
             //Create a new repository
             pService->CreateRepository(&sessionRepositoryIdentifier, nullptr, nullptr);
 
             //Try to create the same repository again
-            REQUIRE_THROWS_MG(pService->CreateRepository(&sessionRepositoryIdentifier, nullptr, nullptr), MgDuplicateRepositoryException*);
+            REQUIRE_THROWS_MG(pService->CreateRepository(&sessionRepositoryIdentifier, nullptr, nullptr), MgDuplicateRepositoryException);
         }
 
         //Try to create a repository while not an admin
@@ -261,7 +261,7 @@
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->CreateRepository(&sessionRepositoryIdentifier, nullptr, nullptr), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->CreateRepository(&sessionRepositoryIdentifier, nullptr, nullptr), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -284,13 +284,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_UpdateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_UpdateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_UpdateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_UpdateRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -307,18 +307,18 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try to use a nullptr argument
-            REQUIRE_THROWS_MG(pService->UpdateRepository(nullptr, nullptr, nullptr), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, nullptr, nullptr), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->UpdateRepository(nullptr, nullptr, nullptr), MgNullArgumentException);
+            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, nullptr, nullptr), MgNullArgumentException);
 
             //Try to update a repository that doesn't exist
             contentSource = new MgByteSource(repositoryContentFileName);
             Ptr<MgByteReader> contentReader = contentSource->GetReader();
-            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryNotExist, contentReader, nullptr), MgRepositoryNotFoundException*);
+            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryNotExist, contentReader, nullptr), MgRepositoryNotFoundException);
 
             //Try to update the repository using invalid content
             string str = "asdf";
             Ptr<MgByteReader> byteReader = MgUtil::GetByteReader(str);
-            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, byteReader, nullptr), MgDbXmlException*);
+            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, byteReader, nullptr), MgDbXmlException);
 
             //Try to update the repository using valid header
             headerSource = new MgByteSource(repositoryHeaderFileName);
@@ -334,7 +334,7 @@
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
             Ptr<MgByteReader> contentReader = contentSource->GetReader();
-            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, contentReader, nullptr), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->UpdateRepository(&sessionRepositoryIdentifier, contentReader, nullptr), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -357,13 +357,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetRepositoryContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_GetRepositoryContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetRepositoryContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_GetRepositoryContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -377,10 +377,10 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try to get repository content using a nullptr argument
-            REQUIRE_THROWS_MG(pService->GetRepositoryContent(nullptr), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->GetRepositoryContent(nullptr), MgNullArgumentException);
 
             //Try to get the repository contents of a repository that doesn't exist
-            REQUIRE_THROWS_MG(pService->GetRepositoryContent(&sessionRepositoryNotExist), MgRepositoryNotFoundException*);
+            REQUIRE_THROWS_MG(pService->GetRepositoryContent(&sessionRepositoryNotExist), MgRepositoryNotFoundException);
 
             //Get the repository content using a valid argument
             Ptr<MgByteReader> byteReader = pService->GetRepositoryContent(&sessionRepositoryIdentifier);
@@ -395,7 +395,7 @@
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->GetRepositoryContent(&sessionRepositoryIdentifier), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->GetRepositoryContent(&sessionRepositoryIdentifier), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -418,20 +418,20 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetRepositoryHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_GetRepositoryHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetRepositoryHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_GetRepositoryHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try to get repository header using a nullptr argument
-        REQUIRE_THROWS_MG(pService->GetRepositoryHeader(nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetRepositoryHeader(nullptr), MgNullArgumentException);
 
         //Try to get repository header of a repository other than Library://
-        REQUIRE_THROWS_MG(pService->GetRepositoryHeader(&sessionRepositoryIdentifier), MgInvalidRepositoryTypeException*);
+        REQUIRE_THROWS_MG(pService->GetRepositoryHeader(&sessionRepositoryIdentifier), MgInvalidRepositoryTypeException);
 
         // Set the user information for the current thread to be administrator.
         Ptr<MgUserInformation> adminUserInfo = new MgUserInformation(adminName, adminPass);
@@ -462,13 +462,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_ApplyResourcePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_ApplyResourcePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_ApplyResourcePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_ApplyResourcePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -482,7 +482,7 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try using nullptr argument
-            REQUIRE_THROWS_MG(pService->ApplyResourcePackage(nullptr), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->ApplyResourcePackage(nullptr), MgNullArgumentException);
 
             Ptr<MgByteSource> byteSource = new MgByteSource(packageName);
             byteSource->SetMimeType(MgMimeType::Binary);
@@ -503,7 +503,7 @@
             byteSource->SetMimeType(MgMimeType::Binary);
             Ptr<MgByteReader> byteReader = byteSource->GetReader();
 
-            REQUIRE_THROWS_MG(pService->ApplyResourcePackage(byteReader), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->ApplyResourcePackage(byteReader), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -526,13 +526,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_DeleteRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_DeleteRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_DeleteRepository", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -544,7 +544,7 @@
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->DeleteRepository(&sessionRepositoryIdentifier), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->DeleteRepository(&sessionRepositoryIdentifier), MgUnauthorizedAccessException);
         }
 
         //Sets the user information for the current thread to be administrator
@@ -556,10 +556,10 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try to use a nullptr argument
-            REQUIRE_THROWS_MG(pService->DeleteRepository(nullptr), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->DeleteRepository(nullptr), MgNullArgumentException);
 
             //Try to delete a repository that does not exist
-            REQUIRE_THROWS_MG(pService->DeleteRepository(&sessionRepositoryNotExist), MgRepositoryNotFoundException*);
+            REQUIRE_THROWS_MG(pService->DeleteRepository(&sessionRepositoryNotExist), MgRepositoryNotFoundException);
 
             //Delete the repository that was created earlier in TestCase_CreateRepository
             pService->DeleteRepository(&sessionRepositoryIdentifier);
@@ -586,7 +586,7 @@
 
         if (nullptr == serviceManager)
         {
-            throw new MgNullReferenceException(
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, 
                 L"TestResourceService.TestCase_ResourceExists",
                 __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
@@ -596,7 +596,7 @@
 
         if (nullptr == service)
         {
-            throw new MgServiceNotAvailableException(
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, 
                 L"TestResourceService.TestCase_ResourceExists",
                 __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
@@ -607,7 +607,7 @@
 
         // Try to check a nullptr resource.
         bool existed = false;
-        REQUIRE_THROWS_MG(service->ResourceExists(nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(service->ResourceExists(nullptr), MgNullArgumentException);
 
         // Try to check a resource that exists
         existed = service->ResourceExists(&libraryRepositoryIdentifier);
@@ -637,17 +637,17 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateResources", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_EnumerateResources", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateResources", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_EnumerateResources", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try to enumerate resources using a nullptr argument
-        REQUIRE_THROWS_MG(pService->EnumerateResources(nullptr, -1, L"", true), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->EnumerateResources(nullptr, -1, L"", true), MgNullArgumentException);
 
         // Enumerate the Library resource.
         Ptr<MgByteReader> byteReader = pService->EnumerateResources(&libraryRepositoryIdentifier, -1, L"", true);
@@ -675,13 +675,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_SetResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_SetResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_SetResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_SetResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteSource> contentSource;
@@ -698,8 +698,8 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try to use nullptr arguments
-            REQUIRE_THROWS_MG(pService->SetResource(nullptr, nullptr, nullptr), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->SetResource(&resourceIdentifier, nullptr, nullptr), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->SetResource(nullptr, nullptr, nullptr), MgNullArgumentException);
+            REQUIRE_THROWS_MG(pService->SetResource(&resourceIdentifier, nullptr, nullptr), MgNullArgumentException);
 
             //Add a new resource
             contentSource = new MgByteSource(resourceContentFileName);
@@ -725,7 +725,7 @@
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
             Ptr<MgByteReader> contentReader = contentSource->GetReader();
-            REQUIRE_THROWS_MG(pService->SetResource(&resourceIdentifier2, contentReader, nullptr), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->SetResource(&resourceIdentifier2, contentReader, nullptr), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -749,13 +749,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_MoveResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_MoveResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_MoveResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_MoveResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -770,12 +770,12 @@
 
 
             //Try to use nullptr arguments
-            REQUIRE_THROWS_MG(pService->MoveResource(nullptr, nullptr, true, false), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->MoveResource(&resourceIdentifier, nullptr, true, true), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->MoveResource(nullptr, &resourceIdentifier, true, false), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->MoveResource(nullptr, nullptr, true, false), MgNullArgumentException);
+            REQUIRE_THROWS_MG(pService->MoveResource(&resourceIdentifier, nullptr, true, true), MgNullArgumentException);
+            REQUIRE_THROWS_MG(pService->MoveResource(nullptr, &resourceIdentifier, true, false), MgNullArgumentException);
 
             //Try to move a resource that doesn't exist
-            REQUIRE_THROWS_MG(pService->MoveResource(&resourceNotExist, &resourceIdentifier2, false, true), MgResourceNotFoundException*);
+            REQUIRE_THROWS_MG(pService->MoveResource(&resourceNotExist, &resourceIdentifier2, false, true), MgResourceNotFoundException);
 
             //Move the resource that was added earlier with cascade = true, and check referencing resource.
             pService->MoveResource(&resourceIdentifier, &resourceIdentifier2, false, true);
@@ -792,7 +792,7 @@
             REQUIRE(referenceContent.find(featureIdTag) != STRING::npos);
 
             //Try to move the resource into itself (ie. itself)
-            REQUIRE_THROWS_MG(pService->MoveResource(&resourceIdentifier, &resourceIdentifier, false), MgInvalidArgumentException*);
+            REQUIRE_THROWS_MG(pService->MoveResource(&resourceIdentifier, &resourceIdentifier, false), MgInvalidArgumentException);
         }
 
 
@@ -803,7 +803,7 @@
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->MoveResource(&resourceIdentifier, &resourceIdentifier2, false), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->MoveResource(&resourceIdentifier, &resourceIdentifier2, false), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -827,13 +827,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_CopyResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_CopyResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_CopyResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_CopyResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -847,18 +847,18 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try to use nullptr arguments
-            REQUIRE_THROWS_MG(pService->CopyResource(nullptr, nullptr, true), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->CopyResource(&resourceIdentifier, nullptr, true), MgNullArgumentException*);
-            REQUIRE_THROWS_MG(pService->CopyResource(nullptr, &resourceIdentifier2, true), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->CopyResource(nullptr, nullptr, true), MgNullArgumentException);
+            REQUIRE_THROWS_MG(pService->CopyResource(&resourceIdentifier, nullptr, true), MgNullArgumentException);
+            REQUIRE_THROWS_MG(pService->CopyResource(nullptr, &resourceIdentifier2, true), MgNullArgumentException);
 
             //Try to use source & destination as the same thing
-            REQUIRE_THROWS_MG(pService->CopyResource(&resourceIdentifier2, &resourceIdentifier2, false), MgInvalidArgumentException*);
+            REQUIRE_THROWS_MG(pService->CopyResource(&resourceIdentifier2, &resourceIdentifier2, false), MgInvalidArgumentException);
 
             //Copy the moved resource to another location
             pService->CopyResource(&resourceIdentifier, &resourceIdentifier2, false);
 
             //Try to copy a resource to one that should now exist
-            REQUIRE_THROWS_MG(pService->CopyResource(&resourceIdentifier2, &resourceIdentifier, false), MgDuplicateResourceException*);
+            REQUIRE_THROWS_MG(pService->CopyResource(&resourceIdentifier2, &resourceIdentifier, false), MgDuplicateResourceException);
         }
 
         //Try to copy resource while not an admin
@@ -868,7 +868,7 @@
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->CopyResource(&resourceIdentifier, &resourceIdentifier2, false), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->CopyResource(&resourceIdentifier, &resourceIdentifier2, false), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -890,13 +890,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_GetResourceContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_GetResourceContent", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -907,10 +907,10 @@
         byteReader = nullptr;
 
         //Try to get the content using nullptr arguments
-        REQUIRE_THROWS_MG(pService->GetResourceContent(nullptr, L""), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetResourceContent(nullptr, L""), MgNullArgumentException);
 
         //Try to get the content of a resource that doesn't exist
-        REQUIRE_THROWS_MG(pService->GetResourceContent(&resourceNotExist, L""), MgResourceNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GetResourceContent(&resourceNotExist, L""), MgResourceNotFoundException);
 
         //Get the content of the resource that was added in TestCase_SetResource
         byteReader = pService->GetResourceContent(&resourceIdentifier, L"");
@@ -937,13 +937,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceContents", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_GetResourceContents", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceContents", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_GetResourceContents", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -951,13 +951,13 @@
         MgUserInformation::SetCurrentUserInfo(adminUserInfo);
 
         //Try to get the contents using nullptr arguments
-        REQUIRE_THROWS_MG(pService->GetResourceContents(nullptr, nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetResourceContents(nullptr, nullptr), MgNullArgumentException);
 
         //Try to get the content of a resource that doesn't exist
         Ptr<MgStringCollection> resourceNotExistCol = new MgStringCollection();
         resourceNotExistCol->Add(resourceNotExist.ToString());
         resourceNotExistCol->Add(resourceIdentifier.ToString());
-        REQUIRE_THROWS_MG(pService->GetResourceContents(resourceNotExistCol, nullptr), MgResourceNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GetResourceContents(resourceNotExistCol, nullptr), MgResourceNotFoundException);
 
         //Get the content of the resource that was added in TestCase_SetResource
         Ptr<MgStringCollection> resourceIds = new MgStringCollection();
@@ -990,13 +990,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_GetResourceHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_GetResourceHeader", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -1007,10 +1007,10 @@
         byteReader = nullptr;
 
         //Try to get the content using nullptr arguments
-        REQUIRE_THROWS_MG(pService->GetResourceHeader(nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetResourceHeader(nullptr), MgNullArgumentException);
 
         //Try to get the content of a resource that doesn't exist
-        REQUIRE_THROWS_MG(pService->GetResourceHeader(&resourceNotExist), MgResourceNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GetResourceHeader(&resourceNotExist), MgResourceNotFoundException);
 
         //Get the content of the resource that was added in TestCase_SetResource
         byteReader = pService->GetResourceHeader(&resourceIdentifier);
@@ -1037,13 +1037,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateReferences", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_EnumerateReferences", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateReferences", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_EnumerateReferences", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -1054,7 +1054,7 @@
         byteReader = nullptr;
 
         //Try to get the content using nullptr arguments
-        REQUIRE_THROWS_MG(pService->EnumerateReferences(nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->EnumerateReferences(nullptr), MgNullArgumentException);
 
         //Get the content of the resource that was added in TestCase_SetResource
         byteReader = pService->EnumerateReferences(&resourceIdentifier);
@@ -1081,13 +1081,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_ChangeResourceOwner", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_ChangeResourceOwner", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_ChangeResourceOwner", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_ChangeResourceOwner", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -1101,14 +1101,14 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try to change the user using nullptr arguments
-            REQUIRE_THROWS_MG(pService->ChangeResourceOwner(nullptr, L"", false), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->ChangeResourceOwner(nullptr, L"", false), MgNullArgumentException);
 
             //Try to change the owner of a resource that doesn't exist
             //TODO: this does not throw exception, should it?
-            //REQUIRE_THROWS_MG(pService->ChangeResourceOwner(&resourceNotExist, adminName, false), MgResourceNotFoundException*);
+            //REQUIRE_THROWS_MG(pService->ChangeResourceOwner(&resourceNotExist, adminName, false), MgResourceNotFoundException);
 
             //Try to change the owner of the resource created to a user that doesn't exist
-            REQUIRE_THROWS_MG(pService->ChangeResourceOwner(&resourceIdentifier, L"DoesNotExist", false), MgUserNotFoundException*);
+            REQUIRE_THROWS_MG(pService->ChangeResourceOwner(&resourceIdentifier, L"DoesNotExist", false), MgUserNotFoundException);
 
             //Change the resource owner to administrator
             pService->ChangeResourceOwner(&resourceIdentifier, adminName, false);
@@ -1121,7 +1121,7 @@
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->ChangeResourceOwner(&resourceIdentifier, adminName, false), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->ChangeResourceOwner(&resourceIdentifier, adminName, false), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -1144,13 +1144,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_InheritPermissionsFrom", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_InheritPermissionsFrom", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_InheritPermissionsFrom", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_InheritPermissionsFrom", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -1164,7 +1164,7 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try to use a nullptr argument
-            REQUIRE_THROWS_MG(pService->InheritPermissionsFrom(nullptr), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->InheritPermissionsFrom(nullptr), MgNullArgumentException);
 
             //Set resources to inherit permissions
             pService->InheritPermissionsFrom(&libraryRepositoryIdentifier);
@@ -1177,7 +1177,7 @@
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->InheritPermissionsFrom(&libraryRepositoryIdentifier), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->InheritPermissionsFrom(&libraryRepositoryIdentifier), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -1201,13 +1201,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_EnumerateResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_EnumerateResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -1218,10 +1218,10 @@
         byteReader = nullptr;
 
         //Try enumerating using a nullptr argument
-        REQUIRE_THROWS_MG(pService->EnumerateResourceData(nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->EnumerateResourceData(nullptr), MgNullArgumentException);
 
         //Try enumerating using a resource that doesn't exist
-        REQUIRE_THROWS_MG(pService->EnumerateResourceData(&resourceNotExist), MgResourceNotFoundException*);
+        REQUIRE_THROWS_MG(pService->EnumerateResourceData(&resourceNotExist), MgResourceNotFoundException);
 
         //Enumerate the resource data of the resource added earlier
         byteReader = pService->EnumerateResourceData(&resourceIdentifier);
@@ -1248,13 +1248,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_SetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_SetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_SetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_SetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -1271,12 +1271,12 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try using a nullptr identifier
-            REQUIRE_THROWS_MG(pService->SetResourceData(nullptr, L"", L"", nullptr), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->SetResourceData(nullptr, L"", L"", nullptr), MgNullArgumentException);
 
             //Try to name the resource data with a 0 character string
             dataSource = new MgByteSource(dataFileName);
             Ptr<MgByteReader> dataReader = dataSource->GetReader();
-            REQUIRE_THROWS_MG(pService->SetResourceData(&resourceIdentifier, L"", L"File", dataReader), MgInvalidArgumentException*);
+            REQUIRE_THROWS_MG(pService->SetResourceData(&resourceIdentifier, L"", L"File", dataReader), MgInvalidArgumentException);
 
             //Set the resource data
             dataSource = new MgByteSource(dataFileName);
@@ -1293,7 +1293,7 @@
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
             Ptr<MgByteReader> dataReader = dataSource->GetReader();
-            REQUIRE_THROWS_MG(pService->SetResourceData(&resourceIdentifier, resourceDataName, L"File", dataReader), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->SetResourceData(&resourceIdentifier, resourceDataName, L"File", dataReader), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -1316,13 +1316,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_RenameResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_RenameResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_RenameResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_RenameResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -1336,16 +1336,16 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try using a null argument for the idenfier
-            REQUIRE_THROWS_MG(pService->RenameResourceData(nullptr, resourceDataName, resourceDataName2, true), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->RenameResourceData(nullptr, resourceDataName, resourceDataName2, true), MgNullArgumentException);
 
             //Try using a resource identifier that doesn't exist
-            REQUIRE_THROWS_MG(pService->RenameResourceData(&resourceNotExist, resourceDataName, resourceDataName2, true), MgResourceNotFoundException*);
+            REQUIRE_THROWS_MG(pService->RenameResourceData(&resourceNotExist, resourceDataName, resourceDataName2, true), MgResourceNotFoundException);
 
             //Try to use a resource data name that doesn't exist
-            REQUIRE_THROWS_MG(pService->RenameResourceData(&resourceIdentifier, L"DoesNotExist", resourceDataName2, true), MgResourceDataNotFoundException*);
+            REQUIRE_THROWS_MG(pService->RenameResourceData(&resourceIdentifier, L"DoesNotExist", resourceDataName2, true), MgResourceDataNotFoundException);
 
             //Try to name the resource data with a 0 character string
-            REQUIRE_THROWS_MG(pService->RenameResourceData(&resourceIdentifier, resourceDataName, L"", true), MgInvalidArgumentException*);
+            REQUIRE_THROWS_MG(pService->RenameResourceData(&resourceIdentifier, resourceDataName, L"", true), MgInvalidArgumentException);
 
             //Try to do a valid rename
             pService->RenameResourceData(&resourceIdentifier, resourceDataName, resourceDataName2, false);
@@ -1359,7 +1359,7 @@
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->RenameResourceData(&resourceIdentifier, resourceDataName, resourceDataName2, false), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->RenameResourceData(&resourceIdentifier, resourceDataName, resourceDataName2, false), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -1382,13 +1382,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_GetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_GetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_GetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_GetResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Set the user information for the current thread to be administrator.
@@ -1399,16 +1399,16 @@
         byteReader = nullptr;
 
         //Try to get resource data using a nullptr identifier
-        REQUIRE_THROWS_MG(pService->GetResourceData(nullptr, resourceDataName, L""), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetResourceData(nullptr, resourceDataName, L""), MgNullArgumentException);
 
         //Try to get resource data using an empty data name string
-        REQUIRE_THROWS_MG(pService->GetResourceData(&resourceIdentifier, L"", L""), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetResourceData(&resourceIdentifier, L"", L""), MgInvalidArgumentException);
 
         //Try to get the resource data of a resource that does not exist
-        REQUIRE_THROWS_MG(pService->GetResourceData(&resourceNotExist, resourceDataName, L""), MgResourceNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GetResourceData(&resourceNotExist, resourceDataName, L""), MgResourceNotFoundException);
 
         //Try to get the resource data of a data name that doesn't exist
-        REQUIRE_THROWS_MG(pService->GetResourceData(&resourceIdentifier, L"DoesNotExist", L""), MgResourceDataNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GetResourceData(&resourceIdentifier, L"DoesNotExist", L""), MgResourceDataNotFoundException);
 
         //Get resource data using valid arguments
         byteReader = pService->GetResourceData(&resourceIdentifier, resourceDataName, L"");
@@ -1433,13 +1433,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_DeleteResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_DeleteResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_DeleteResourceData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -1453,13 +1453,13 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try using a nullptr resource identifier
-            REQUIRE_THROWS_MG(pService->DeleteResourceData(nullptr, resourceDataName), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->DeleteResourceData(nullptr, resourceDataName), MgNullArgumentException);
 
             //Try using an empty string for the resource data name
-            REQUIRE_THROWS_MG(pService->DeleteResourceData(&resourceIdentifier, L""), MgInvalidArgumentException*);
+            REQUIRE_THROWS_MG(pService->DeleteResourceData(&resourceIdentifier, L""), MgInvalidArgumentException);
 
             //Try deleting data that does not exist
-            REQUIRE_THROWS_MG(pService->DeleteResourceData(&resourceIdentifier, L"DoesNotExist"), MgResourceDataNotFoundException*);
+            REQUIRE_THROWS_MG(pService->DeleteResourceData(&resourceIdentifier, L"DoesNotExist"), MgResourceDataNotFoundException);
 
             //Delete the resource data that was set earlier
             pService->DeleteResourceData(&resourceIdentifier, resourceDataName);
@@ -1472,7 +1472,7 @@
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->DeleteResourceData(&resourceIdentifier, resourceDataName2), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->DeleteResourceData(&resourceIdentifier, resourceDataName2), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -1496,19 +1496,19 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgFeatureService> pFeatureService = dynamic_cast<MgFeatureService*>(serviceManager->RequestService(MgServiceType::FeatureService));
         if (pFeatureService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_DeleteResource", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -1522,7 +1522,7 @@
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
             //Try to use a nullptr argument
-            REQUIRE_THROWS_MG(pService->DeleteResource(nullptr), MgNullArgumentException*);
+            REQUIRE_THROWS_MG(pService->DeleteResource(nullptr), MgNullArgumentException);
 
             //Try to delete a resource that doesn't exist. We allow doing this for performance reason.
             pService->DeleteResource(&resourceNotExist);
@@ -1540,7 +1540,7 @@
         {
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
-            REQUIRE_THROWS_MG(pService->DeleteResource(&resourceIdentifier), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->DeleteResource(&resourceIdentifier), MgUnauthorizedAccessException);
         }
 
         // Try to delete resource after FDO exception
@@ -1620,13 +1620,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestResourceService.TestCase_EnumerateUnmanagedData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestResourceService.TestCase_EnumerateUnmanagedData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgResourceService> pService = dynamic_cast<MgResourceService*>(serviceManager->RequestService(MgServiceType::ResourceService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestResourceService.TestCase_EnumerateUnmanagedData", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestResourceService.TestCase_EnumerateUnmanagedData", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Try to enumerate mappings

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestServerAdminService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestServerAdminService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestServerAdminService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -47,13 +47,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_TakeOffline", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService.TestCase_TakeOffline", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_TakeOffline", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService.TestCase_TakeOffline", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         pService->TakeOffline();
@@ -85,13 +85,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_BringOnline", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService.TestCase_BringOnline", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_BringOnline", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService.TestCase_BringOnline", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         pService->BringOnline();
@@ -123,13 +123,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_GetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_GetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = MgServerManager::GetInstance()->GetConfigurationProperties(L"GeneralProperties");
@@ -166,13 +166,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_SetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_SetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_SetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_SetConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"GeneralProperties");
@@ -215,13 +215,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_RemoveConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_RemoveConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_RemoveConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_RemoveConfigurationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // add a property to unmanaged data mappings
@@ -273,13 +273,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_ClearLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService.TestCase_ClearLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_ClearLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService.TestCase_ClearLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         REQUIRE(pService->ClearLog(MgLogFileType::Access));
@@ -288,7 +288,7 @@
         REQUIRE(pService->ClearLog(MgLogFileType::Error));
         REQUIRE(pService->ClearLog(MgLogFileType::Session));
         REQUIRE(pService->ClearLog(MgLogFileType::Trace));
-        REQUIRE_THROWS_MG(pService->ClearLog(L"Invalid"), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->ClearLog(L"Invalid"), MgInvalidArgumentException);
     }
     catch(MgException* e)
     {
@@ -316,13 +316,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService.TestCase_GetLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService.TestCase_GetLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -345,7 +345,7 @@
         byteReader = pService->GetLog(MgLogFileType::Trace);
         REQUIRE(byteReader.p != nullptr);
 
-        REQUIRE_THROWS_MG(pService->GetLog(L"Invalid"), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetLog(L"Invalid"), MgInvalidArgumentException);
     }
     catch(MgException* e)
     {
@@ -373,13 +373,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -402,7 +402,7 @@
         byteReader = pService->GetLog(MgLogFileType::Trace, 3);
         REQUIRE(byteReader.p != nullptr);
 
-        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, -1), MgArgumentOutOfRangeException*);
+        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, -1), MgArgumentOutOfRangeException);
     }
     catch(MgException* e)
     {
@@ -430,13 +430,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService.TestCase_GetLogEntries", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -463,10 +463,10 @@
         byteReader = pService->GetLog(MgLogFileType::Trace, dateTime1, dateTime2);
         REQUIRE(byteReader.p != nullptr);
 
-        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, dateTime1, nullptr), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, dateTime2, dateTime1), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, dateTime1, dateTime3), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, invalidDateTime, dateTime2), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, dateTime1, nullptr), MgNullArgumentException);
+        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, dateTime2, dateTime1), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, dateTime1, dateTime3), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(pService->GetLog(MgLogFileType::Access, invalidDateTime, dateTime2), MgInvalidArgumentException);
     }
     catch(MgException* e)
     {
@@ -493,13 +493,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection = MgServerManager::GetInstance()->GetInformationProperties();
@@ -530,13 +530,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_EnumeratePackages", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_EnumeratePackages", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_EnumeratePackages", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_EnumeratePackages", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -583,13 +583,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_LoadPackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_LoadPackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_LoadPackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_LoadPackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -645,13 +645,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_MakePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_MakePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_MakePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_MakePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -687,19 +687,22 @@
 
         REQUIRE(packages->Contains(PACKAGE_NAME_2));
     }
-    catch(MgFileIoException* e)
+    catch (MgException* e)
     {
-        STRING message = e->GetDetails(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        ACE_DEBUG((LM_INFO, ACE_TEXT("\nMgFileIoException - Possible file permission error.\nError: %W\n"), message.c_str()));
+        if (e->GetExceptionCode() == MgExceptionCodes::MgFileIoException)
+        {
+            STRING message = e->GetDetails(TEST_LOCALE);
+            SAFE_RELEASE(e);
+            ACE_DEBUG((LM_INFO, ACE_TEXT("\nMgFileIoException - Possible file permission error.\nError: %W\n"), message.c_str()));
+        }
+        else 
+        {
+            STRING message = e->GetExceptionMessage(TEST_LOCALE);
+            message += e->GetStackTrace(TEST_LOCALE);
+            SAFE_RELEASE(e);
+            FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        }
     }
-    catch(MgException* e)
-    {
-        STRING message = e->GetExceptionMessage(TEST_LOCALE);
-        message += e->GetStackTrace(TEST_LOCALE);
-        SAFE_RELEASE(e);
-        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
-    }
     catch(...)
     {
         throw;
@@ -718,13 +721,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetPackageLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_GetPackageLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetPackageLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_GetPackageLog", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -772,13 +775,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetPackageStatus", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_GetPackageStatus", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetPackageStatus", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_GetPackageStatus", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -826,13 +829,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_DeletePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_DeletePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_DeletePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_DeletePackage", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgPropertyCollection> pPropertyCollection1 = pService->GetConfigurationProperties(L"ResourceServiceProperties");
@@ -883,13 +886,13 @@
 //        MgServiceManager* serviceMan = MgServiceManager::GetInstance();
 //        if (serviceMan == nullptr)
 //        {
-//            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+//            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
 //        }
 //
 //        Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
 //        if (pService == nullptr)
 //        {
-//            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+//            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
 //        }
 //
 //    }
@@ -918,13 +921,13 @@
 //        MgServiceManager* serviceMan = MgServiceManager::GetInstance();
 //        if (serviceMan == nullptr)
 //        {
-//            throw new MgNullReferenceException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+//            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
 //        }
 //
 //        Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
 //        if (pService == nullptr)
 //        {
-//            throw new MgServiceNotAvailableException(L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
+//            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService::TestCase_GetInformationProperties", __LINE__, __WFILE__, nullptr, L"", nullptr);
 //        }
 //    }
 //    catch(MgException* e)
@@ -953,23 +956,23 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_GetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService.TestCase_GetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_GetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService.TestCase_GetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
 
         // Give invalid document
-        REQUIRE_THROWS_MG(pService->GetDocument(L""), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(pService->GetDocument(L":test"), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(pService->GetDocument(L"Wms:..test"), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(pService->GetDocument(L"Wms:test\\"), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(pService->GetDocument(L"Wms:/test"), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->GetDocument(L""), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(pService->GetDocument(L":test"), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(pService->GetDocument(L"Wms:..test"), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(pService->GetDocument(L"Wms:test\\"), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(pService->GetDocument(L"Wms:/test"), MgInvalidArgumentException);
 
         // Check to see if the path exists before trying to get document
         STRING path;
@@ -1015,13 +1018,13 @@
         MgServiceManager* serviceMan = MgServiceManager::GetInstance();
         if (serviceMan == nullptr)
         {
-            throw new MgNullReferenceException(L"TestServerAdminService.TestCase_SetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestServerAdminService.TestCase_SetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerAdminService> pService = dynamic_cast<MgServerAdminService*>(serviceMan->RequestService(MgServiceType::ServerAdminService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestServerAdminService.TestCase_SetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestServerAdminService.TestCase_SetDocument", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Check to see if the path exists before trying to set document

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestServiceFactory.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestServiceFactory.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestServiceFactory.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -1622,18 +1622,21 @@
                 Ptr<MgResourceIdentifier> mdfres5 = new MgResourceIdentifier(L"Library://UnitTests/MdfModel/MdfTestTileSet.TileSetDefinition");
                 svcResource->DeleteResource(mdfres5);
             }
-            catch (MgFileIoException* e)
-            {
-                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
-                SAFE_RELEASE(e);
-                ACE_DEBUG((LM_INFO, ACE_TEXT("\nMgFileIoException - Possible file permission error.\nError: %W\n"), message.c_str()));
-            }
             catch (MgException* e)
             {
-                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
-                message += e->GetStackTrace(TestServiceFactory::TEST_LOCALE);
-                SAFE_RELEASE(e);
-                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+                if (e->GetExceptionCode() == MgExceptionCodes::MgFileIoException)
+                {
+                    STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                    SAFE_RELEASE(e);
+                    ACE_DEBUG((LM_INFO, ACE_TEXT("\nMgFileIoException - Possible file permission error.\nError: %W\n"), message.c_str()));
+                }
+                else
+                {
+                    STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                    message += e->GetStackTrace(TestServiceFactory::TEST_LOCALE);
+                    SAFE_RELEASE(e);
+                    FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+                }
             }
             catch (...)
             {
@@ -1902,18 +1905,21 @@
                 Ptr<MgResourceIdentifier> wdfres1 = new MgResourceIdentifier(L"Library://UnitTests/Watermarks/PoweredByMapGuide.WatermarkDefinition");
                 svcResource->DeleteResource(wdfres1);
             }
-            catch (MgFileIoException* e)
-            {
-                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
-                SAFE_RELEASE(e);
-                ACE_DEBUG((LM_INFO, ACE_TEXT("\nMgFileIoException - Possible file permission error.\nError: %W\n"), message.c_str()));
-            }
             catch (MgException* e)
             {
-                STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
-                message += e->GetStackTrace(TestServiceFactory::TEST_LOCALE);
-                SAFE_RELEASE(e);
-                FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+                if (e->GetExceptionCode() == MgExceptionCodes::MgFileIoException)
+                {
+                    STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                    SAFE_RELEASE(e);
+                    ACE_DEBUG((LM_INFO, ACE_TEXT("\nMgFileIoException - Possible file permission error.\nError: %W\n"), message.c_str()));
+                }
+                else
+                {
+                    STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+                    message += e->GetStackTrace(TestServiceFactory::TEST_LOCALE);
+                    SAFE_RELEASE(e);
+                    FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+                }
             }
             catch (...)
             {

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestSiteService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestSiteService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestSiteService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -56,19 +56,19 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_AddUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_AddUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_AddUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_AddUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try to add a user with empty strings
-        REQUIRE_THROWS_MG(pService->AddUser(L"", L"username", L"password", L"description"), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(pService->AddUser(userId1, L"", L"password", L"description"), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(pService->AddUser(userId1, L"username", L"", L"description"), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->AddUser(L"", L"username", L"password", L"description"), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(pService->AddUser(userId1, L"", L"password", L"description"), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(pService->AddUser(userId1, L"username", L"", L"description"), MgInvalidArgumentException);
 
         //Add 2 new users
         pService->AddUser(userId1, L"TestUser1", L"TestPassword1", L"This is a test user");
@@ -75,7 +75,7 @@
         pService->AddUser(userId2, L"TestUser2", L"TestPassword2", L"This is another test user");
 
         //Try to add an already existing user id
-        REQUIRE_THROWS_MG(pService->AddUser(userId1, L"TestUser1", L"TestPassword1", L"This is a test user"), MgDuplicateUserException*);
+        REQUIRE_THROWS_MG(pService->AddUser(userId1, L"TestUser1", L"TestPassword1", L"This is a test user"), MgDuplicateUserException);
     }
     catch(MgException* e)
     {
@@ -102,13 +102,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_EnumerateUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_EnumerateUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -148,23 +148,23 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_UpdateUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_UpdateUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_UpdateUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_UpdateUser", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try to update user with empty strings
-        REQUIRE_THROWS_MG(pService->UpdateUser(L"", L"", L"username", L"password", L"description"), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->UpdateUser(L"", L"", L"username", L"password", L"description"), MgInvalidArgumentException);
 
         //Try to update a user that does not exist
-        REQUIRE_THROWS_MG(pService->UpdateUser(L"DoesNotExist", L"", L"username", L"password", L"description"), MgUserNotFoundException*);
+        REQUIRE_THROWS_MG(pService->UpdateUser(L"DoesNotExist", L"", L"username", L"password", L"description"), MgUserNotFoundException);
 
         //Try to change the user id to one that already exists
-        REQUIRE_THROWS_MG(pService->UpdateUser(userId1, userId1, L"newUsername", L"newPassword", L"newDescription"), MgDuplicateUserException*);
+        REQUIRE_THROWS_MG(pService->UpdateUser(userId1, userId1, L"newUsername", L"newPassword", L"newDescription"), MgDuplicateUserException);
 
         //Update the user that was created earlier
         pService->UpdateUser(userId1, L"", L"newUsername", L"newPassword", L"newDescription");
@@ -194,17 +194,17 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_AddGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_AddGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_AddGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_AddGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try to add an empty group name
-        REQUIRE_THROWS_MG(pService->AddGroup(L"", L"This will throw an exception"), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->AddGroup(L"", L"This will throw an exception"), MgInvalidArgumentException);
 
         //Add a new group
         pService->AddGroup(groupName1, L"This is a group used for testing");
@@ -211,7 +211,7 @@
         pService->AddGroup(groupName2, L"This is a second group used for testing");
 
         //Try to add the group again
-        REQUIRE_THROWS_MG(pService->AddGroup(groupName1, L"This is a duplicate group"), MgDuplicateGroupException*);
+        REQUIRE_THROWS_MG(pService->AddGroup(groupName1, L"This is a duplicate group"), MgDuplicateGroupException);
     }
     catch(MgException* e)
     {
@@ -239,13 +239,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_GrantGroupMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_GrantGroupMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GrantGroupMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_GrantGroupMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> groupCollection = new MgStringCollection();
@@ -252,8 +252,8 @@
         Ptr<MgStringCollection> userCollection = new MgStringCollection();
 
         //Try to use nullptr arguments
-        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(nullptr, userCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(groupCollection, nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(nullptr, userCollection), MgNullArgumentException);
+        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(groupCollection, nullptr), MgNullArgumentException);
 
         //Make both new users members of first group
         groupCollection->Add(groupName1);
@@ -272,13 +272,13 @@
         groupCollection = new MgStringCollection();
         userCollection = new MgStringCollection();
         userCollection->Add(L"DoesNotExist");
-        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(groupCollection, userCollection), MgUserNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(groupCollection, userCollection), MgUserNotFoundException);
 
         //Try with a group that doesn't exist
         groupCollection = new MgStringCollection();
         userCollection = new MgStringCollection();
         groupCollection->Add(L"DoesNotExist");
-        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(groupCollection, userCollection), MgGroupNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GrantGroupMembershipsToUsers(groupCollection, userCollection), MgGroupNotFoundException);
     }
     catch(MgException* e)
     {
@@ -305,13 +305,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_GrantRoleMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_GrantRoleMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GrantRoleMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_GrantRoleMembershipsToUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
@@ -320,14 +320,14 @@
         //Try using nullptr arguments
         roleCollection = new MgStringCollection();
         userCollection = new MgStringCollection();
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(nullptr, userCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(roleCollection, nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(nullptr, userCollection), MgNullArgumentException);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(roleCollection, nullptr), MgNullArgumentException);
 
         //Try using with a user that does not exist
         roleCollection = new MgStringCollection();
         userCollection = new MgStringCollection();
         userCollection->Add(L"DoesNotExist");
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(roleCollection, userCollection), MgUserNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(roleCollection, userCollection), MgUserNotFoundException);
 
         //Try to give the role viewer to one of the newly created users
         roleCollection = new MgStringCollection();
@@ -334,7 +334,7 @@
         userCollection = new MgStringCollection();
         roleCollection->Add(MgRole::Viewer);
         userCollection->Add(userId1);
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(roleCollection, userCollection), MgInvalidOperationException*);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToUsers(roleCollection, userCollection), MgInvalidOperationException);
 
         //Give the role of author to one of the newly created users
         roleCollection = new MgStringCollection();
@@ -368,13 +368,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_GrantRoleMembershipsToGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_GrantRoleMembershipsToGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GrantRoleMembershipsToGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_GrantRoleMembershipsToGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
@@ -383,14 +383,14 @@
         //Try using nullptr arguments
         roleCollection = new MgStringCollection();
         groupCollection = new MgStringCollection();
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(nullptr, groupCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(roleCollection, nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(nullptr, groupCollection), MgNullArgumentException);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(roleCollection, nullptr), MgNullArgumentException);
 
         //Try using with a group that does not exist
         roleCollection = new MgStringCollection();
         groupCollection = new MgStringCollection();
         groupCollection->Add(L"DoesNotExist");
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(roleCollection, groupCollection), MgGroupNotFoundException*);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(roleCollection, groupCollection), MgGroupNotFoundException);
 
         //Try to give the role viewer to one of the newly created groups
         roleCollection = new MgStringCollection();
@@ -397,7 +397,7 @@
         groupCollection = new MgStringCollection();
         roleCollection->Add(MgRole::Viewer);
         groupCollection->Add(groupName1);
-        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(roleCollection, groupCollection), MgInvalidOperationException*);
+        REQUIRE_THROWS_MG(pService->GrantRoleMembershipsToGroups(roleCollection, groupCollection), MgInvalidOperationException);
 
         //Give the role of administrator to one of the newly created groups
         roleCollection = new MgStringCollection();
@@ -431,23 +431,23 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_UpdateGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_UpdateGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_UpdateGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_UpdateGroup", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try to update using an empty string for group name
-        REQUIRE_THROWS_MG(pService->UpdateGroup(L"", L"", L""), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->UpdateGroup(L"", L"", L""), MgInvalidArgumentException);
 
         //Try to update a group that does not exist
-        REQUIRE_THROWS_MG(pService->UpdateGroup(L"DoesNotExist", L"", L"description for non-existing group"), MgGroupNotFoundException*);
+        REQUIRE_THROWS_MG(pService->UpdateGroup(L"DoesNotExist", L"", L"description for non-existing group"), MgGroupNotFoundException);
 
         //Try to change the group name to something that already exists
-        REQUIRE_THROWS_MG(pService->UpdateGroup(groupName1, groupName1, L"This shouldn't work since we'll have a duplicate group name"), MgDuplicateGroupException*);
+        REQUIRE_THROWS_MG(pService->UpdateGroup(groupName1, groupName1, L"This shouldn't work since we'll have a duplicate group name"), MgDuplicateGroupException);
 
         //Update group description for first group
         pService->UpdateGroup(groupName1, L"", L"new description for this group used for testing");
@@ -480,13 +480,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_EnumerateGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_EnumerateGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -532,13 +532,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateRoles", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_EnumerateRoles", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateRoles", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_EnumerateRoles", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
@@ -545,7 +545,7 @@
         INT32 collSize;
 
         //Try to enumerate roles by specifying both a user and group
-        REQUIRE_THROWS_MG(pService->EnumerateRoles(userId1, groupName1), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->EnumerateRoles(userId1, groupName1), MgInvalidArgumentException);
 
         //Enumerate the roles of a user
         roleCollection = pService->EnumerateRoles(userId1, L"");
@@ -592,13 +592,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_RevokeGroupMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_RevokeGroupMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RevokeGroupMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_RevokeGroupMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> groupCollection = new MgStringCollection();
@@ -605,8 +605,8 @@
         Ptr<MgStringCollection> userCollection = new MgStringCollection();
 
         //Try to use nullptr arguments
-        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(nullptr, userCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(groupCollection, nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(nullptr, userCollection), MgNullArgumentException);
+        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(groupCollection, nullptr), MgNullArgumentException);
 
         //Remove both new users from first group
         groupCollection->Add(groupName1);
@@ -618,13 +618,13 @@
         groupCollection = new MgStringCollection();
         userCollection = new MgStringCollection();
         userCollection->Add(L"DoesNotExist");
-        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(groupCollection, userCollection), MgUserNotFoundException*);
+        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(groupCollection, userCollection), MgUserNotFoundException);
 
         //Try with a group that doesn't exist
         groupCollection = new MgStringCollection();
         userCollection = new MgStringCollection();
         groupCollection->Add(L"DoesNotExist");
-        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(groupCollection, userCollection), MgGroupNotFoundException*);
+        REQUIRE_THROWS_MG(pService->RevokeGroupMembershipsFromUsers(groupCollection, userCollection), MgGroupNotFoundException);
     }
     catch(MgException* e)
     {
@@ -651,13 +651,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_RevokeRoleMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_RevokeRoleMembershipsFromUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
@@ -666,14 +666,14 @@
         //Try using nullptr arguments
         roleCollection = new MgStringCollection();
         userCollection = new MgStringCollection();
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(nullptr, userCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(roleCollection, nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(nullptr, userCollection), MgNullArgumentException);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(roleCollection, nullptr), MgNullArgumentException);
 
         //Try using with a user that does not exist
         roleCollection = new MgStringCollection();
         userCollection = new MgStringCollection();
         userCollection->Add(L"DoesNotExist");
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(roleCollection, userCollection), MgUserNotFoundException*);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(roleCollection, userCollection), MgUserNotFoundException);
 
         //Try to take away the role viewer from one of the newly created users
         roleCollection = new MgStringCollection();
@@ -680,7 +680,7 @@
         userCollection = new MgStringCollection();
         roleCollection->Add(MgRole::Viewer);
         userCollection->Add(userId1);
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(roleCollection, userCollection), MgInvalidOperationException*);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromUsers(roleCollection, userCollection), MgInvalidOperationException);
 
         //Take away role of author from one of the newly created users
         roleCollection = new MgStringCollection();
@@ -714,13 +714,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_RevokeRoleMembershipsFromGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RevokeRoleMembershipsFromGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_RevokeRoleMembershipsFromGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
@@ -729,14 +729,14 @@
         //Try using nullptr arguments
         roleCollection = new MgStringCollection();
         groupCollection = new MgStringCollection();
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(nullptr, groupCollection), MgNullArgumentException*);
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(roleCollection, nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(nullptr, groupCollection), MgNullArgumentException);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(roleCollection, nullptr), MgNullArgumentException);
 
         //Try using with a group that does not exist
         roleCollection = new MgStringCollection();
         groupCollection = new MgStringCollection();
         groupCollection->Add(L"DoesNotExist");
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(roleCollection, groupCollection), MgGroupNotFoundException*);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(roleCollection, groupCollection), MgGroupNotFoundException);
 
         //Try to give the role viewer to one of the newly created groups
         roleCollection = new MgStringCollection();
@@ -743,7 +743,7 @@
         groupCollection = new MgStringCollection();
         roleCollection->Add(MgRole::Viewer);
         groupCollection->Add(groupName1);
-        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(roleCollection, groupCollection), MgInvalidOperationException*);
+        REQUIRE_THROWS_MG(pService->RevokeRoleMembershipsFromGroups(roleCollection, groupCollection), MgInvalidOperationException);
 
         //Give the role of administrator to one of the newly created groups
         roleCollection = new MgStringCollection();
@@ -777,17 +777,17 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_DeleteUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_DeleteUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_DeleteUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_DeleteUsers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try using a nullptr argument
-        REQUIRE_THROWS_MG(pService->DeleteUsers(nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->DeleteUsers(nullptr), MgNullArgumentException);
 
         //Delete the two users added earlier
         MgStringCollection userCollection;
@@ -796,7 +796,7 @@
         pService->DeleteUsers(&userCollection);
 
         //Try to delete again now that users shouldn't exist
-        REQUIRE_THROWS_MG(pService->DeleteUsers(&userCollection), MgUserNotFoundException*);
+        REQUIRE_THROWS_MG(pService->DeleteUsers(&userCollection), MgUserNotFoundException);
     }
     catch(MgException* e)
     {
@@ -823,17 +823,17 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_DeleteGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_DeleteGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_DeleteGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_DeleteGroups", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try to use a nullptr argument
-        REQUIRE_THROWS_MG(pService->DeleteGroups(nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(pService->DeleteGroups(nullptr), MgNullArgumentException);
 
         MgStringCollection groupCollection;
         groupCollection.Add(groupName1);
@@ -843,7 +843,7 @@
         pService->DeleteGroups(&groupCollection);
 
         //Try to delete again, the groups should no longer exist
-        REQUIRE_THROWS_MG(pService->DeleteGroups(&groupCollection), MgGroupNotFoundException*);
+        REQUIRE_THROWS_MG(pService->DeleteGroups(&groupCollection), MgGroupNotFoundException);
     }
     catch(MgException* e)
     {
@@ -877,18 +877,18 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_AddServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_AddServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_AddServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_AddServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Try using empty string arguments
-        REQUIRE_THROWS_MG(pService->AddServer(L"", L"", serverAddress1), MgInvalidArgumentException*);
-        REQUIRE_THROWS_MG(pService->AddServer(serverName1, L"", L""), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->AddServer(L"", L"", serverAddress1), MgInvalidArgumentException);
+        REQUIRE_THROWS_MG(pService->AddServer(serverName1, L"", L""), MgInvalidArgumentException);
 
         // Disable ACE's ERROR message for the server name
         #ifdef _DEBUG
@@ -909,7 +909,7 @@
         #endif
 
         //Try adding the server again
-        REQUIRE_THROWS_MG(pService->AddServer(serverName1, L"This is a test server", serverAddress1), MgDuplicateServerException*);
+        REQUIRE_THROWS_MG(pService->AddServer(serverName1, L"This is a test server", serverAddress1), MgDuplicateServerException);
     }
     catch(MgException* e)
     {
@@ -936,13 +936,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_EnumerateServers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_EnumerateServers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_EnumerateServers", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_EnumerateServers", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgByteReader> byteReader;
@@ -984,13 +984,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_UpdateServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_UpdateServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_UpdateServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_UpdateServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         // Disable ACE's ERROR message for the server name
@@ -1001,14 +1001,14 @@
         #endif
 
         //Try using a blank string for the name of the server
-        REQUIRE_THROWS_MG(pService->UpdateServer(L"", L"", L"", L""), MgInvalidArgumentException*);
+        REQUIRE_THROWS_MG(pService->UpdateServer(L"", L"", L"", L""), MgInvalidArgumentException);
 
         //Try to update a server that doesn't exist
-        REQUIRE_THROWS_MG(pService->UpdateServer(L"DoesNotExist", L"", L"This server doesn't exist", L""), MgServerNotFoundException*);
+        REQUIRE_THROWS_MG(pService->UpdateServer(L"DoesNotExist", L"", L"This server doesn't exist", L""), MgServerNotFoundException);
 
         //Try to update a server giving it aname that already exists
-        REQUIRE_THROWS_MG(pService->UpdateServer(serverName1, serverName2, L"The new name for the server already exists", L""), MgDuplicateServerException*);
-        REQUIRE_THROWS_MG(pService->UpdateServer(serverName1, L"", L"The new name for the server already exists", serverAddress2), MgDuplicateServerException*);
+        REQUIRE_THROWS_MG(pService->UpdateServer(serverName1, serverName2, L"The new name for the server already exists", L""), MgDuplicateServerException);
+        REQUIRE_THROWS_MG(pService->UpdateServer(serverName1, L"", L"The new name for the server already exists", serverAddress2), MgDuplicateServerException);
 
         //Update the server description
         pService->UpdateServer(serverName1, L"", L"This is the updated description", L"");
@@ -1052,13 +1052,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_RemoveServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_RemoveServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_RemoveServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_RemoveServer", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         //Delete the servers that were added earlier
@@ -1066,7 +1066,7 @@
         pService->RemoveServer(serverName2);
 
         //Try to delete a server that doesn't exist
-        REQUIRE_THROWS_MG(pService->RemoveServer(L"DoesNotExist"), MgServerNotFoundException*);
+        REQUIRE_THROWS_MG(pService->RemoveServer(L"DoesNotExist"), MgServerNotFoundException);
     }
     catch(MgException* e)
     {
@@ -1093,13 +1093,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_Authenticate", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_Authenticate", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_Authenticate", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_Authenticate", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgStringCollection> roleCollection;
@@ -1106,17 +1106,17 @@
         Ptr<MgUserInformation> userInfo;
 
         //Try to use a nullptr argument
-        REQUIRE_THROWS_MG(pService->Authenticate(nullptr, nullptr, false), MgAuthenticationFailedException*);
+        REQUIRE_THROWS_MG(pService->Authenticate(nullptr, nullptr, false), MgAuthenticationFailedException);
 
         //Try to authenticate an anonymous user when admin role is needed
         userInfo = new MgUserInformation(anonymousName, L"");
         roleCollection = new MgStringCollection();
         roleCollection->Add(MgRole::Administrator);
-        REQUIRE_THROWS_MG(pService->Authenticate(userInfo, roleCollection, false), MgUnauthorizedAccessException*);
+        REQUIRE_THROWS_MG(pService->Authenticate(userInfo, roleCollection, false), MgUnauthorizedAccessException);
 
         //Try to authenticate when an incorrect password is given
         userInfo = new MgUserInformation(adminName, L"");
-        REQUIRE_THROWS_MG(pService->Authenticate(userInfo, nullptr, false), MgAuthenticationFailedException*);
+        REQUIRE_THROWS_MG(pService->Authenticate(userInfo, nullptr, false), MgAuthenticationFailedException);
 
         //Authenticate an anonymous user that has appropriate access
         userInfo = new MgUserInformation(anonymousName, L"");
@@ -1159,13 +1159,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_CreateSession", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_CreateSession", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_CreateSession", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_CreateSession", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -1207,13 +1207,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_DestroySession", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_DestroySession", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_DestroySession", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_DestroySession", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgUserInformation> userInfo;
@@ -1229,7 +1229,7 @@
             // Destroy the session that should have been created earlier in the create session test case
             pService->DestroySession(session);
 
-            REQUIRE_THROWS_MG(pService->DestroySession(session), MgRepositoryNotFoundException*);
+            REQUIRE_THROWS_MG(pService->DestroySession(session), MgRepositoryNotFoundException);
         }
 
         MgUserInformation::SetCurrentUserInfo(nullptr);
@@ -1239,7 +1239,7 @@
             userInfo->SetLocale(userLocale);
             MgUserInformation::SetCurrentUserInfo(userInfo);
 
-            REQUIRE_THROWS_MG(pService->DestroySession(session), MgUnauthorizedAccessException*);
+            REQUIRE_THROWS_MG(pService->DestroySession(session), MgUnauthorizedAccessException);
         }
     }
     catch(MgException* e)
@@ -1266,13 +1266,13 @@
         MgServiceManager* serviceManager = MgServiceManager::GetInstance();
         if (serviceManager == nullptr)
         {
-            throw new MgNullReferenceException(L"TestSiteService.TestCase_GetSessionTimeout", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgNullReferenceException, L"TestSiteService.TestCase_GetSessionTimeout", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         Ptr<MgServerSiteService> pService = dynamic_cast<MgServerSiteService*>(serviceManager->RequestService(MgServiceType::SiteService));
         if (pService == nullptr)
         {
-            throw new MgServiceNotAvailableException(L"TestSiteService.TestCase_GetSessionTimeout", __LINE__, __WFILE__, nullptr, L"", nullptr);
+            throw new MgException(MgExceptionCodes::MgServiceNotAvailableException, L"TestSiteService.TestCase_GetSessionTimeout", __LINE__, __WFILE__, nullptr, L"", nullptr);
         }
 
         INT32 timeoutValue = pService->GetSessionTimeout();

Modified: sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestTileService.cpp
===================================================================
--- sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestTileService.cpp	2020-10-21 11:21:38 UTC (rev 9746)
+++ sandbox/jng/flatten_exceptions/Server/src/UnitTesting/TestTileService.cpp	2020-10-21 14:38:32 UTC (rev 9747)
@@ -346,16 +346,19 @@
         // clear the user info to prevent leaks
         MgUserInformation::SetCurrentUserInfo(nullptr);
     }
-    catch (MgFileIoException* e)
-    {
-        // we sometimes get this due to a sharing error
-        SAFE_RELEASE(e);
-    }
     catch (MgException* e)
     {
-        STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
-        SAFE_RELEASE(e);
-        FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        if (e->GetExceptionCode() == MgExceptionCodes::MgFileIoException)
+        {
+            // we sometimes get this due to a sharing error
+            SAFE_RELEASE(e);
+        }
+        else
+        {
+            STRING message = e->GetDetails(TestServiceFactory::TEST_LOCALE);
+            SAFE_RELEASE(e);
+            FAIL(MG_WCHAR_TO_CHAR(message.c_str()));
+        }
     }
     catch (...)
     {
@@ -1041,7 +1044,7 @@
         Ptr<MgTileService> m_svcTile = TestServiceFactory::CreateTileService();
 
         // call the API with a nullptr argument
-        REQUIRE_THROWS_MG(m_svcTile->ClearCache((MgMap*)nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(m_svcTile->ClearCache((MgMap*)nullptr), MgNullArgumentException);
 
         // call the API with a map having a different name
         Ptr<MgMap> map = CreateMap(m_siteConnection, L"blah");
@@ -1201,7 +1204,7 @@
         Ptr<MgTileService> m_svcTile = TestServiceFactory::CreateTileService();
 
         // call the API with a nullptr argument
-        REQUIRE_THROWS_MG(m_svcTile->ClearCache((MgResourceIdentifier*)nullptr), MgNullArgumentException*);
+        REQUIRE_THROWS_MG(m_svcTile->ClearCache((MgResourceIdentifier*)nullptr), MgNullArgumentException);
 
         Ptr<MgResourceIdentifier> tsId = new MgResourceIdentifier(L"Library://UnitTests/TileSets/Sheboygan.TileSetDefinition");
         m_svcTile->ClearCache(tsId);



More information about the mapguide-commits mailing list