TITANIUM_FUNCTION(SocketModule, createUDP)
		{
			TITANIUM_LOG_DEBUG("SocketModule::createUDP: ");
			
			ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);

			JSValue Titanium_property = get_context().get_global_object().GetProperty("Titanium");
			TITANIUM_ASSERT(Titanium_property.IsObject());  // precondition
			JSObject Titanium = static_cast<JSObject>(Titanium_property);

			JSValue Network_property = Titanium.GetProperty("Network");
			TITANIUM_ASSERT(Network_property.IsObject());  // precondition
			JSObject Network = static_cast<JSObject>(Network_property);

			JSValue Socket_property = Network.GetProperty("Socket");
			TITANIUM_ASSERT(Socket_property.IsObject());  // precondition
			JSObject Socket = static_cast<JSObject>(Socket_property);

			JSValue UDP_property = Socket.GetProperty("UDP");
			TITANIUM_ASSERT(UDP_property.IsObject());  // precondition
			JSObject UDP = static_cast<JSObject>(UDP_property);

			auto udp = UDP.CallAsConstructor();
			applyProperties(parameters, udp);
			return udp;
		}
	TITANIUM_FUNCTION(Module, fireEvent)
	{
		ENSURE_STRING_AT_INDEX(name, 0);
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(param, 1);

		fireEvent(name, param);
		return get_context().CreateUndefined();
	}
		TITANIUM_FUNCTION(Tab, close)
		{
			ENSURE_OBJECT_AT_INDEX(window, 0);
			ENSURE_OPTIONAL_OBJECT_AT_INDEX(options, 1);

			close(window.GetPrivate<Window>(), options.GetPrivate<CloseWindowParams>());

			return get_context().CreateUndefined();
		}
TITANIUM_FUNCTION(Properties, getObject)
{
    ENSURE_STRING_AT_INDEX(property, 0);
    ENSURE_OPTIONAL_OBJECT_AT_INDEX(defaultValue, 1);

    const auto js_context = this_object.get_context();
    const auto object_ptr = GetStaticObject(js_context).GetPrivate<Properties>();

    return object_ptr->getObject(property, defaultValue);
}
		TITANIUM_FUNCTION(WebView, evalJS)
		{
			if (arguments.size() < 1) {
				return get_context().CreateUndefined();
			}

			ENSURE_STRING_AT_INDEX(code, 0);
			ENSURE_OPTIONAL_OBJECT_AT_INDEX(callback, 1);

			return get_context().CreateString(evalJS(code, callback));
		}
	TITANIUM_FUNCTION(UIModule, create2DMatrix)
	{
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
		
		// FIXME Macros didn't work because identifiers can't start with digits!
		JSValue Titanium_property = this_object.get_context().get_global_object().GetProperty("Titanium");
		TITANIUM_ASSERT(Titanium_property.IsObject());
		JSObject Titanium = static_cast<JSObject>(Titanium_property);
		JSValue UI_property = Titanium.GetProperty("UI");
		TITANIUM_ASSERT(UI_property.IsObject());
		JSObject UI = static_cast<JSObject>(UI_property);
		JSValue TwoDMatrix_property = UI.GetProperty("2DMatrix");
		TITANIUM_ASSERT(TwoDMatrix_property.IsObject());
		JSObject TwoDMatrix = static_cast<JSObject>(TwoDMatrix_property);
		auto TwoDMatrix_obj = TwoDMatrix.CallAsConstructor(parameters);
		Titanium::Module::applyProperties(parameters, TwoDMatrix_obj);
		return TwoDMatrix_obj;
	}
	TITANIUM_FUNCTION(UIModule, createOptionDialog)
	{
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
		CREATE_TITANIUM_UI(OptionDialog);
	}
		TITANIUM_FUNCTION(WindowsModule, createAppBarSeparator) 
		{
			ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
			CREATE_TITANIUM_UI_WINDOWS(AppBarSeparator);
		}
	TITANIUM_FUNCTION(UIModule, createWebView)
	{
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
		CREATE_TITANIUM_UI(WebView);
	}
	TITANIUM_FUNCTION(UIModule, createTextArea)
	{
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
		CREATE_TITANIUM_UI(TextArea);
	}
	TITANIUM_FUNCTION(UIModule, createTableViewSection)
	{
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
		CREATE_TITANIUM_UI(TableViewSection);
	}
	TITANIUM_FUNCTION(UIModule, createSwitch)
	{
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
		CREATE_TITANIUM_UI(Switch);
	}
	TITANIUM_FUNCTION(UIModule, createProgressBar)
	{
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
		CREATE_TITANIUM_UI(ProgressBar);
	}
	TITANIUM_FUNCTION(UIModule, createPickerColumn)
	{
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
		CREATE_TITANIUM_UI(PickerColumn);
	}
		TITANIUM_FUNCTION(WindowsModule, createCommandBar) 
		{
			ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
			CREATE_TITANIUM_UI_WINDOWS(CommandBar);
		}
	TITANIUM_FUNCTION(UIModule, createNotification)
	{
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
		CREATE_TITANIUM_UI(Notification);
	}
	TITANIUM_FUNCTION(UIModule, createListItem)
	{
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
		CREATE_TITANIUM_UI(ListItem);
	}
	TITANIUM_FUNCTION(UIModule, createActivityIndicator)
	{
		ENSURE_OPTIONAL_OBJECT_AT_INDEX(parameters, 0);
		CREATE_TITANIUM_UI(ActivityIndicator);
	}