diff --git a/naming/src/main/java/org/jboss/as/naming/subsystem/NamingBindingAdd.java b/naming/src/main/java/org/jboss/as/naming/subsystem/NamingBindingAdd.java
index c444462..4aa4aee 100644
--- a/naming/src/main/java/org/jboss/as/naming/subsystem/NamingBindingAdd.java
+++ b/naming/src/main/java/org/jboss/as/naming/subsystem/NamingBindingAdd.java
@@ -26,10 +26,12 @@ import static org.jboss.as.naming.subsystem.NamingSubsystemModel.CLASS;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.LOOKUP;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.MODULE;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.OBJECT_FACTORY;
+import static org.jboss.as.naming.subsystem.NamingSubsystemModel.PROPERTIES;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.SIMPLE;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.TYPE;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.VALUE;
 
+import java.util.Hashtable;
 import java.util.List;
 
 import javax.naming.InitialContext;
@@ -49,6 +51,7 @@ import org.jboss.as.naming.ValueManagedReferenceFactory;
 import org.jboss.as.naming.deployment.ContextNames;
 import org.jboss.as.naming.service.BinderService;
 import org.jboss.dmr.ModelNode;
+import org.jboss.dmr.Property;
 import org.jboss.modules.Module;
 import org.jboss.modules.ModuleIdentifier;
 import org.jboss.modules.ModuleLoadException;
@@ -74,6 +77,10 @@ public class NamingBindingAdd extends AbstractAddStepHandler {
     protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers) throws OperationFailedException {
         final String name = PathAddress.pathAddress(operation.get(ModelDescriptionConstants.ADDRESS)).getLastElement().getValue();
 
+        // the only reason we have to do this "rebinding" is because operation model is not propagated to the actual installer and I don't want to break method signatures
+        ModelNode propertiesNode = operation.get(PROPERTIES);
+        model.get(PROPERTIES).add(propertiesNode);
+
         installRuntimeServices(context, name, model, verificationHandler, newControllers);
     }
 
@@ -162,7 +169,24 @@ public class NamingBindingAdd extends AbstractAddStepHandler {
             @Override
             public ManagedReference getReference() {
                 try {
-                    final Object value = objectFactoryClassInstance.getObjectInstance(name, null, null, null);
+                    // In order NOT to break existing JBoss compatible
+                    // ObjectFactories (and PLEASE NOTE that I'm not aware of
+                    // any) I will leave name as the first parameter (altough IMHO it
+                    // should be the second parameter)
+                    // If we're about to be compatible with Tomcat resource
+                    // factories the first parameter should be a Reference, and it's
+                    // RefAddr's should contain all of the required parameters
+                    // Since we don't want to break "JBoss compatible" factories
+                    // We are passing object factory parameters in the environment hashtable.
+                    ModelNode properties = model.get(PROPERTIES);
+                    List<ModelNode> propertyList = properties.asList();
+                    Hashtable<String, String> environment = new Hashtable<String, String>();
+                    for (ModelNode propertyNode : propertyList) {
+                        Property property = propertyNode.asProperty();
+                        environment.put(property.getName(), property.getValue().asString());
+                    }
+
+                    final Object value = objectFactoryClassInstance.getObjectInstance(name, null, null, environment);
                     return new ValueManagedReference(new ImmediateValue<Object>(value));
                 } catch (Exception e) {
                     throw new RuntimeException(e);
diff --git a/naming/src/main/java/org/jboss/as/naming/subsystem/NamingSubsystem11Parser.java b/naming/src/main/java/org/jboss/as/naming/subsystem/NamingSubsystem11Parser.java
index 38fefe5..c2ebd94 100644
--- a/naming/src/main/java/org/jboss/as/naming/subsystem/NamingSubsystem11Parser.java
+++ b/naming/src/main/java/org/jboss/as/naming/subsystem/NamingSubsystem11Parser.java
@@ -38,12 +38,16 @@ import static org.jboss.as.naming.subsystem.NamingSubsystemModel.CLASS;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.LOOKUP;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.MODULE;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.OBJECT_FACTORY;
+import static org.jboss.as.naming.subsystem.NamingSubsystemModel.PROPERTIES;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.SIMPLE;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.TYPE;
 import static org.jboss.as.naming.subsystem.NamingSubsystemModel.VALUE;
 
 import java.util.EnumSet;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
@@ -122,6 +126,17 @@ public class NamingSubsystem11Parser implements XMLElementReader<List<ModelNode>
         writer.writeAttribute(NamingSubsystemXMLAttribute.NAME.getLocalName(), binding.getName());
         writer.writeAttribute(NamingSubsystemXMLAttribute.MODULE.getLocalName(), binding.getValue().get(MODULE).asString());
         writer.writeAttribute(NamingSubsystemXMLAttribute.CLASS.getLocalName(), binding.getValue().get(CLASS).asString());
+
+        Set<String> attributes  = binding.getValue().keys();
+        attributes.remove(NamingSubsystemXMLAttribute.NAME.getLocalName());
+        attributes.remove(NamingSubsystemXMLAttribute.MODULE.getLocalName());
+        attributes.remove(NamingSubsystemXMLAttribute.CLASS.getLocalName());
+
+        List<Property> propertyList = binding.getValue().get(PROPERTIES).asPropertyList();
+        for (Property property : propertyList) {
+            writer.writeAttribute(property.getName(), property.getValue().asString());
+        }
+
         writer.writeEndElement();
     }
 
@@ -251,24 +266,30 @@ public class NamingSubsystem11Parser implements XMLElementReader<List<ModelNode>
         String name = null;
         String module = null;
         String factory = null;
+
+        Map<String, String> properties = new HashMap<String, String>();
+
         final EnumSet<NamingSubsystemXMLAttribute> required = EnumSet.of(NamingSubsystemXMLAttribute.NAME, NamingSubsystemXMLAttribute.MODULE, NamingSubsystemXMLAttribute.CLASS);
         for (int i = 0; i < attCount; i++) {
             requireNoNamespaceAttribute(reader, i);
             final String value = reader.getAttributeValue(i);
-            final NamingSubsystemXMLAttribute attribute = NamingSubsystemXMLAttribute.forName(reader.getAttributeLocalName(i));
+            final String attributeName = reader.getAttributeLocalName(i);
+            final NamingSubsystemXMLAttribute attribute = NamingSubsystemXMLAttribute.forName(attributeName);
             required.remove(attribute);
             switch (attribute) {
-                case NAME:
-                    name = value.trim();
-                    break;
-                case MODULE:
-                    module = NamingBindingResourceDefinition.MODULE.parse(value, reader).asString();
-                    break;
-                case CLASS:
-                    factory = NamingBindingResourceDefinition.CLASS.parse(value, reader).asString();
-                    break;
-                default:
-                    throw unexpectedAttribute(reader, i);
+            case NAME:
+                name = value.trim();
+                break;
+            case MODULE:
+                module = NamingBindingResourceDefinition.MODULE.parse(value, reader).asString();
+                break;
+            case CLASS:
+                factory = NamingBindingResourceDefinition.CLASS.parse(value, reader).asString();
+                break;
+            default:
+                // the rest of the attributes should go to the objectfactory as
+                // properties
+                properties.put(attributeName, value);
             }
         }
         if (!required.isEmpty()) {
@@ -279,12 +300,22 @@ public class NamingSubsystem11Parser implements XMLElementReader<List<ModelNode>
         final ModelNode address = new ModelNode();
         address.add(SUBSYSTEM, NamingExtension.SUBSYSTEM_NAME);
         address.add(BINDING, name);
+
         final ModelNode bindingAdd = new ModelNode();
         bindingAdd.get(OP).set(ADD);
         bindingAdd.get(OP_ADDR).set(address);
         bindingAdd.get(BINDING_TYPE).set(OBJECT_FACTORY);
         bindingAdd.get(MODULE).set(module);
         bindingAdd.get(CLASS).set(factory);
+
+        Set<String> props = properties.keySet();
+        ModelNode propertiesNode = new ModelNode().setEmptyObject();
+        for (String property : props) {
+            propertiesNode.get(property).set(properties.get(property));
+        }
+        address.add(PROPERTIES, propertiesNode);
+        bindingAdd.get(PROPERTIES).set(propertiesNode);
+
         operations.add(bindingAdd);
     }
 
diff --git a/naming/src/main/java/org/jboss/as/naming/subsystem/NamingSubsystemModel.java b/naming/src/main/java/org/jboss/as/naming/subsystem/NamingSubsystemModel.java
index 4864cb4..7779e3b 100644
--- a/naming/src/main/java/org/jboss/as/naming/subsystem/NamingSubsystemModel.java
+++ b/naming/src/main/java/org/jboss/as/naming/subsystem/NamingSubsystemModel.java
@@ -22,6 +22,8 @@
 
 package org.jboss.as.naming.subsystem;
 
+import java.util.Hashtable;
+
 import org.jboss.as.controller.PathElement;
 
 /**
@@ -46,7 +48,8 @@ public interface NamingSubsystemModel {
 
     String VALUE = "value";
 
-    PathElement BINDING_PATH = PathElement.pathElement(BINDING);
+    String PROPERTIES = "properties";
 
+    PathElement BINDING_PATH = PathElement.pathElement(BINDING);
 
 }
