diff --git a/build/resources/META-INF/smack.configuration b/build/resources/META-INF/smack.configuration
new file mode 100644
index 000000000..f9d761d96
--- /dev/null
+++ b/build/resources/META-INF/smack.configuration
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ org.jivesoftware.smackx.ServiceDiscoveryManager
+ org.jivesoftware.smackx.XHTMLManager
+
+
+
+ 1.3.0
+
+
\ No newline at end of file
diff --git a/source/org/jivesoftware/smack/SmackConfiguration.java b/source/org/jivesoftware/smack/SmackConfiguration.java
new file mode 100644
index 000000000..4639d7528
--- /dev/null
+++ b/source/org/jivesoftware/smack/SmackConfiguration.java
@@ -0,0 +1,160 @@
+/**
+* $RCSfile$
+* $Revision$
+* $Date$
+*
+* Copyright (C) 2002-2003 Jive Software. All rights reserved.
+* ====================================================================
+* The Jive Software License (based on Apache Software License, Version 1.1)
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* 1. Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* 2. Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+*
+* 3. The end-user documentation included with the redistribution,
+* if any, must include the following acknowledgment:
+* "This product includes software developed by
+* Jive Software (http://www.jivesoftware.com)."
+* Alternately, this acknowledgment may appear in the software itself,
+* if and wherever such third-party acknowledgments normally appear.
+*
+* 4. The names "Smack" and "Jive Software" must not be used to
+* endorse or promote products derived from this software without
+* prior written permission. For written permission, please
+* contact webmaster@jivesoftware.com.
+*
+* 5. Products derived from this software may not be called "Smack",
+* nor may "Smack" appear in their name, without prior written
+* permission of Jive Software.
+*
+* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL JIVE SOFTWARE OR
+* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+* SUCH DAMAGE.
+* ====================================================================
+*/
+
+package org.jivesoftware.smack;
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+import org.xmlpull.v1.*;
+
+/**
+ * Represents the configuration of Smack. The configuration is used for:
+ *
+ * - Initializing classes by loading them at start-up.
+ *
- Getting the current Smack version.
+ *
+ *
+ * @author Gaston Dombiak
+ */
+public final class SmackConfiguration {
+
+ private static String versionNumber;
+
+ private SmackConfiguration() {
+ }
+
+ /**
+ * Loads the configuration from the smack.configuration file.
+ *
+ * So far this means that:
+ * 1) a set of classes will be loaded in order to execute their static init block
+ * 2) retrieve and set the current Smack release
+ *
+ */
+ static void init() {
+ try {
+ // Get an array of class loaders to try loading the providers files from.
+ ClassLoader[] classLoaders = getClassLoaders();
+ for (int i = 0; i < classLoaders.length; i++) {
+ Enumeration enum = classLoaders[i].getResources("META-INF/smack.configuration");
+ while (enum.hasMoreElements()) {
+ URL url = (URL) enum.nextElement();
+ InputStream systemStream = null;
+ try {
+ systemStream = url.openStream();
+ XmlPullParserFactory factory =
+ XmlPullParserFactory.newInstance(
+ "org.xmlpull.mxp1.MXParserFactory",
+ null);
+ factory.setNamespaceAware(true);
+ XmlPullParser parser = factory.newPullParser();
+ parser.setInput(systemStream, "UTF-8");
+ int eventType = parser.getEventType();
+ do {
+ if (eventType == XmlPullParser.START_TAG) {
+ if (parser.getName().equals("className")) {
+ String className = parser.nextText();
+ // Attempt to load the class so that the class can get initialized
+ try {
+ Class provider = Class.forName(className);
+ }
+ catch (ClassNotFoundException cnfe) {
+ cnfe.printStackTrace();
+ }
+ }
+ else if (parser.getName().equals("versionNumber")) {
+ versionNumber = parser.nextText();
+ }
+ }
+ eventType = parser.next();
+ }
+ while (eventType != XmlPullParser.END_DOCUMENT);
+ }
+ finally {
+ try {
+ systemStream.close();
+ }
+ catch (Exception e) {
+ }
+ }
+ }
+ }
+ }
+ catch (Exception e) {
+ }
+ }
+
+ /**
+ * Returns the current Smack release version. The version number value
+ * gets loaded from the smack.configuration file at system startup.
+ *
+ * @return the current Smack release version number
+ */
+ public static String getVersionNumber() {
+ return versionNumber;
+ }
+
+ /**
+ * Returns an array of class loaders to load resources from.
+ *
+ * @return an array of ClassLoader instances.
+ */
+ private static ClassLoader[] getClassLoaders() {
+ ClassLoader[] classLoaders = new ClassLoader[3];
+ classLoaders[0] = new SmackConfiguration().getClass().getClassLoader();
+ classLoaders[1] = Thread.currentThread().getContextClassLoader();
+ classLoaders[2] = ClassLoader.getSystemClassLoader();
+ return classLoaders;
+ }
+}