diff --git a/eventadmin/impl/changelog.txt b/eventadmin/impl/changelog.txt
index 8b2eab7..56c4673 100644
--- a/eventadmin/impl/changelog.txt
+++ b/eventadmin/impl/changelog.txt
@@ -1,5 +1,7 @@
 Changes from 1.4.0 to 1.4.2
 ---------------------------
+** Improvement
+    * [FELIX-4623] - Make Async to Sync ThreadPool Ratio Configurable
 ** Bug
     * [FELIX-4617] - Empty configurations for ignore topic and ignore timeout lead to error messages in the log
     * [FELIX-4618] - NPE if config value for ignore topic or timeout is empty
diff --git a/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/Configuration.java b/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/Configuration.java
index 8c4a362..42a90e5 100644
--- a/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/Configuration.java
+++ b/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/Configuration.java
@@ -138,9 +138,9 @@
     private final BundleContext m_bundleContext;
 
     private int m_threadPoolSize;
-    
+
     private double m_asyncToSyncThreadRatio;
-    
+
     private int m_asyncThreadPoolSize;
 
     private int m_timeout;
@@ -247,11 +247,11 @@
             // be created.
             m_threadPoolSize = getIntProperty(
                 PROP_THREAD_POOL_SIZE, m_bundleContext.getProperty(PROP_THREAD_POOL_SIZE), 20, 2);
-            
+
             // The ratio of asynchronous to synchronous threads in the internal thread
-            // pool.  Ratio must be positive and may be adjusted to represent the 
+            // pool.  Ratio must be positive and may be adjusted to represent the
             // distribution of post to send operations.  Applications with higher number
-            // of post operations should have a higher ratio.  
+            // of post operations should have a higher ratio.
             m_asyncToSyncThreadRatio = getDoubleProperty(
             	PROP_ASYNC_TO_SYNC_THREAD_RATIO, m_bundleContext.getProperty(PROP_ASYNC_TO_SYNC_THREAD_RATIO), 0.5, 0.0);
 
@@ -482,7 +482,7 @@
         {
             return new MetaTypeProviderImpl((ManagedService)managedService,
                     m_threadPoolSize, m_timeout, m_requireTopic,
-                    m_ignoreTimeout, m_ignoreTopics);
+                    m_ignoreTimeout, m_ignoreTopics, m_asyncToSyncThreadRatio);
         }
         catch (final Throwable t)
         {
@@ -551,7 +551,7 @@
 
         return defaultValue;
     }
-    
+
     /**
      * Returns either the parsed double from the value of the property if it is set and
      * not less then the min value or the default. Additionally, a warning is
diff --git a/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/MetaTypeProviderImpl.java b/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/MetaTypeProviderImpl.java
index 8212411..786dd7c 100644
--- a/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/MetaTypeProviderImpl.java
+++ b/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/MetaTypeProviderImpl.java
@@ -41,6 +41,7 @@
     private final boolean m_requireTopic;
     private final String[] m_ignoreTimeout;
     private final String[] m_ignoreTopic;
+    private final double m_asyncThreadPoolRatio;
 
     private final ManagedService m_delegatee;
 
@@ -48,7 +49,8 @@
             final int threadPoolSize,
             final int timeout, final boolean requireTopic,
             final String[] ignoreTimeout,
-            final String[] ignoreTopic)
+            final String[] ignoreTopic,
+            final double asyncThreadPoolRatio)
     {
         m_threadPoolSize = threadPoolSize;
         m_timeout = timeout;
@@ -56,6 +58,7 @@
         m_delegatee = delegatee;
         m_ignoreTimeout = ignoreTimeout;
         m_ignoreTopic = ignoreTopic;
+        m_asyncThreadPoolRatio = asyncThreadPoolRatio;
     }
 
     private ObjectClassDefinition ocd;
@@ -133,6 +136,12 @@
                     "are ignored. If a single value neither ends with a dot nor with a start, this is assumed " +
                     "to define an exact topic. A single star can be used to disable delivery completely.",
                     AttributeDefinition.STRING, m_ignoreTopic, Integer.MAX_VALUE, null, null));
+            adList.add( new AttributeDefinitionImpl( Configuration.PROP_ASYNC_TO_SYNC_THREAD_RATIO, "Async/sync Thread Pool Ratio",
+                    "The ratio of asynchronous to synchronous threads in the internal thread" +
+                    " pool. Ratio must be positive and may be adjusted to represent the " +
+                    "distribution of post to send operations.  Applications with higher number " +
+                    "of post operations should have a higher ratio.",
+                    m_asyncThreadPoolRatio));
             ocd = new ObjectClassDefinition()
             {
 
@@ -205,6 +214,12 @@
                 { String.valueOf(defaultValue) }, 0, null, null );
         }
 
+        AttributeDefinitionImpl( final String id, final String name, final String description, final double defaultValue )
+        {
+            this( id, name, description, DOUBLE, new String[]
+                { String.valueOf(defaultValue) }, 0, null, null );
+        }
+
         AttributeDefinitionImpl( final String id, final String name, final String description, final int type,
             final String[] defaultValues, final int cardinality, final String[] optionLabels,
             final String[] optionValues )
diff --git a/eventadmin/impl/src/test/java/org/apache/felix/eventadmin/ittests/AbstractTest.java b/eventadmin/impl/src/test/java/org/apache/felix/eventadmin/ittests/AbstractTest.java
index e1b1035..2c1c12b 100644
--- a/eventadmin/impl/src/test/java/org/apache/felix/eventadmin/ittests/AbstractTest.java
+++ b/eventadmin/impl/src/test/java/org/apache/felix/eventadmin/ittests/AbstractTest.java
@@ -34,7 +34,7 @@
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.CoreOptions;
-import org.ops4j.pax.exam.Option;;
+import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.PaxExam;
 import org.ops4j.pax.exam.options.AbstractDelegateProvisionOption;
 import org.osgi.framework.BundleContext;
