diff --git a/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyConfig.java b/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyConfig.java
index d3ba32e..177412a 100644
--- a/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyConfig.java
+++ b/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyConfig.java
@@ -26,6 +26,9 @@
 
 public final class JettyConfig
 {
+    /** Felix specific property to set the interface to listen on. Applies to both HTTP and HTTP */
+    private static final String FELIX_HOST = "org.apache.felix.http.host";
+
     /** Standard OSGi port property for HTTP service */
     private static final String HTTP_PORT = "org.osgi.service.http.port";
 
@@ -75,6 +78,7 @@
 
     private final BundleContext context;
     private boolean debug;
+    private String host;
     private int httpPort;
     private int httpsPort;
     private String keystore;
@@ -145,6 +149,11 @@
         return this.registerMBeans;
     }
 
+    public String getHost()
+    {
+        return this.host;
+    }
+
     public int getHttpPort()
     {
         return this.httpPort;
@@ -197,6 +206,7 @@
         }
 
         this.debug = getBooleanProperty(props, FELIX_HTTP_DEBUG, getBooleanProperty(props, HTTP_DEBUG, false));
+        this.host = getProperty(props, FELIX_HOST, null);
         this.httpPort = getIntProperty(props, HTTP_PORT, 8080);
         this.httpsPort = getIntProperty(props, HTTPS_PORT, 8443);
         this.keystore = getProperty(props, FELIX_KEYSTORE, this.context.getProperty(OSCAR_KEYSTORE));
diff --git a/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java b/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java
index 949af3f..b709395 100644
--- a/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java
+++ b/http/jetty/src/main/java/org/apache/felix/http/jetty/internal/JettyService.java
@@ -201,7 +201,7 @@
                 ? new SelectChannelConnector()
                 : new SocketConnector();
         connector.setPort(this.config.getHttpPort());
-        connector.setMaxIdleTime(60000);
+        configureConnector(connector);
         this.server.addConnector(connector);
     }
 
@@ -298,12 +298,24 @@
         }
 
         connector.setPort(this.config.getHttpsPort());
-        connector.setMaxIdleTime(60000);
+        configureConnector(connector);
 
         this.server.addConnector(connector);
     }
 
-    private void configureSessionManager(final Context context) {
+    private void configureConnector(final Connector connector)
+    {
+        connector.setMaxIdleTime(60000);
+        connector.setHost(this.config.getHost());
+        connector.setStatsOn(this.config.isRegisterMBeans());
+
+        // connector.setLowResourceMaxIdleTime(ms);
+        // connector.setRequestBufferSize(requestBufferSize);
+        // connector.setResponseBufferSize(responseBufferSize);
+    }
+
+    private void configureSessionManager(final Context context)
+    {
         final SessionManager manager = context.getSessionHandler().getSessionManager();
         manager.setSessionCookie(this.config.getProperty(SessionManager.__SessionCookieProperty, SessionManager.__DefaultSessionCookie));
         manager.setSessionURL(this.config.getProperty(SessionManager.__SessionURLProperty, SessionManager.__DefaultSessionURL));
