Index: src/edu/ucsb/nceas/metacat/service/XMLSchemaService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/service/XMLSchemaService.java	(revision 4708)
+++ src/edu/ucsb/nceas/metacat/service/XMLSchemaService.java	(revision 4709)
@@ -57,7 +57,7 @@
 	
 	private static boolean useFullSchemaValidation = false;
 	
-	private static String documentNamespace = null;
+//	private static String documentNamespace = null;
 	
 	// all schema objects that represent schemas registered in the db that 
 	// actually have files on disk.
@@ -105,7 +105,7 @@
 	/**
 	 * refresh the persistant values in this service.
 	 */
-	protected void doRefresh() {
+	protected void doRefresh() throws ServiceException {
 		try {
 			populateRegisteredSchemaList();
 			setUseFullSchemaValidation();
Index: src/edu/ucsb/nceas/metacat/service/SessionService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/service/SessionService.java	(revision 4708)
+++ src/edu/ucsb/nceas/metacat/service/SessionService.java	(revision 4709)
@@ -65,7 +65,7 @@
 		return false;
 	}
 	
-	protected void doRefresh() {
+	protected void doRefresh() throws ServiceException {
 		return;
 	}
 	
Index: src/edu/ucsb/nceas/metacat/service/DatabaseService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/service/DatabaseService.java	(revision 4708)
+++ src/edu/ucsb/nceas/metacat/service/DatabaseService.java	(revision 4709)
@@ -65,7 +65,7 @@
 		return false;
 	}
 	
-	protected void doRefresh() {
+	protected void doRefresh() throws ServiceException {
 		return;
 	}
 	
Index: src/edu/ucsb/nceas/metacat/service/SkinPropertyService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/service/SkinPropertyService.java	(revision 4708)
+++ src/edu/ucsb/nceas/metacat/service/SkinPropertyService.java	(revision 4709)
@@ -72,9 +72,9 @@
 	 * 
 	 * @param servletContext the context we will use to get relative paths
 	 */
-	private SkinPropertyService(ServletContext servletContext) throws ServiceException {
+	private SkinPropertyService() throws ServiceException {
 		try {
-			initialize(servletContext);
+			initialize();
 		} catch (GeneralPropertyException gpe) {
 			throw new ServiceException(
 					"Properties problem while initializing PropertyService: "
@@ -91,19 +91,27 @@
 	 * @param servletContext the context we will use to get relative paths
 	 * @return the single instance of SkinPropertyService
 	 */
-	public static SkinPropertyService getInstance(ServletContext servletContext) throws ServiceException {
+	public static SkinPropertyService getInstance() throws ServiceException {
 		if (skinService == null) {
-			skinService = new SkinPropertyService(servletContext);
+			skinService = new SkinPropertyService();
 		}
 		return skinService;
 	}
 	
 	public boolean refreshable() {
-		return false;
+		return true;
 	}
 	
-	protected void doRefresh() {
-		return;
+	protected void doRefresh() throws ServiceException {
+		try {
+			initialize();
+		} catch (IOException ioe) {
+			throw new ServiceException("Could not refresh SkinPropertyService due to"
+					+ " I/O error: " + ioe.getMessage());
+		} catch (GeneralPropertyException gpe) {
+			throw new ServiceException("Could not refresh SkinPropertyService due to"
+					+ " property error: " + gpe.getMessage());
+		}
 	}
 	
 	/**
@@ -112,13 +120,12 @@
 	 * @param servletContext
 	 *            the context we will use to get relative paths
 	 */
-	private void initialize(ServletContext servletContext) throws IOException,
-			GeneralPropertyException {
+	private void initialize() throws IOException,
+			GeneralPropertyException, ServiceException {
 
 		logMetacat.debug("Initializing SkinService");
 
-		SKIN_DIR = "/style/skins";
-		BACKUP_DIR = PropertyService.getBackupDir();
+		BACKUP_DIR = PropertyService.getProperty("application.backupDir") + FileUtil.getFS() + ".metacat";
 
 		skinNames = SkinUtil.getSkinNames();
 
@@ -128,7 +135,7 @@
 
 		try {
 			for (String skinName : skinNames) {
-				String propertyFilePath = servletContext.getRealPath(SKIN_DIR)
+				String propertyFilePath = ServiceService.getRealSkinDir()
 						+ FileUtil.getFS() + skinName + FileUtil.getFS() + skinName
 						+ ".properties";
 				SortedProperties skinProperties = new SortedProperties(propertyFilePath);
@@ -135,14 +142,13 @@
 				skinProperties.load();
 				skinPropertiesMap.put(skinName, skinProperties);
 
-				String metaDataFilePath = servletContext.getRealPath(SKIN_DIR)
+				String metaDataFilePath = ServiceService.getRealSkinDir()
 						+ FileUtil.getFS() + skinName + FileUtil.getFS() + skinName
 						+ ".properties.metadata.xml";
 				if (FileUtil.getFileStatus(metaDataFilePath) == FileUtil.DOES_NOT_EXIST) {
 					throw new GeneralPropertyException("Could not find skin property metadata file: " + metaDataFilePath);
 				} else {
-					PropertiesMetaData skinMetaData = 
-						new PropertiesMetaData(metaDataFilePath);
+					PropertiesMetaData skinMetaData = new PropertiesMetaData(metaDataFilePath);
 					skinMetaDataMap.put(skinName, skinMetaData);
 				} 
 
@@ -345,18 +351,16 @@
 	/**
 	 * Writes out backup configurable properties to a file.
 	 */
-	public static void persistBackupProperties(String skinName, ServletContext servletContext)
-			throws GeneralPropertyException {
-		
-		String metaDataFilePath = servletContext.getRealPath(SKIN_DIR) + FileUtil.getFS()
-				+ skinName + FileUtil.getFS() + skinName + ".properties.metadata.xml";
-		
-		String backupPropertyFilePath = 
-			BACKUP_DIR + FileUtil.getFS() + skinName + ".properties.backup";
+	public static void persistBackupProperties(String skinName) throws GeneralPropertyException {
+		try {
+			String metaDataFilePath = ServiceService.getRealSkinDir() + FileUtil.getFS()
+					+ skinName + FileUtil.getFS() + skinName + ".properties.metadata.xml";
 
-		// Use the metadata to extract configurable properties from the 
-		// overall properties list, and store those properties.
-		try {
+			String backupPropertyFilePath = BACKUP_DIR + FileUtil.getFS() + skinName
+					+ ".properties.backup";
+
+			// Use the metadata to extract configurable properties from the
+			// overall properties list, and store those properties.
 			SortedProperties backupProperties = 
 				new SortedProperties(backupPropertyFilePath);
 			
@@ -377,20 +381,11 @@
 		} catch (IOException ioe) {
 			throw new GeneralPropertyException("Could not backup configurable properties: "
 					+ ioe.getMessage());
+		} catch (ServiceException se) {
+			throw new GeneralPropertyException("Could not get skins property file: "
+					+ se.getMessage());
 		}
 	}
-
-	/**
-	 * Gets the backup properties directory
-	 * 
-	 * TODO MCD figure out how to expand this.  At least for Windows
-	 * 
-	 * @return a string which holds the name of the backup directory. returns
-	 *         null if directory could not be created.
-	 */
-	public static String getBackupDir() {
-		return SystemUtil.discoverExternalDir() + FileUtil.getFS() + ".metacat";
-	}
 	
 	/**
 	 * Reports whether properties are fully configured.
Index: src/edu/ucsb/nceas/metacat/service/BaseService.java
===================================================================
--- src/edu/ucsb/nceas/metacat/service/BaseService.java	(revision 4708)
+++ src/edu/ucsb/nceas/metacat/service/BaseService.java	(revision 4709)
@@ -35,14 +35,21 @@
  */
 public abstract class BaseService {
 
-	public abstract boolean refreshable();
+	// package level method reporting if service is refreshable.  Basically,
+	// we only want ServiceService calling this.
+	abstract boolean refreshable();
 	
-	protected abstract void doRefresh();
+	// subclass must define doRefresh.  It is only called from the refresh() method.
+	protected abstract void doRefresh() throws ServiceException;
 	
-	public void refresh() {
+	// package level method to refresh service.  We only want ServiceService 
+	// calling this.
+	void refresh() throws ServiceException{
 		if (refreshable()) {
 			doRefresh();
 		}
 	}
+	
+//	abstract void stop() throws ServiceException;
 
 }
