diff --git a/api/get_structs.go b/api/get_structs.go
index 9957fe4f..052f7d11 100644
--- a/api/get_structs.go
+++ b/api/get_structs.go
@@ -201,6 +201,8 @@ func getDeviceStructByName(name string) (interface{}, error) {
 		return &device.SetClientCertificateMode{}, nil
 	case "GetRelayOutputs":
 		return &device.GetRelayOutputs{}, nil
+	case "GetDigitalInputs":
+		return &device.GetDigitalInputs{}, nil
 	case "SetRelayOutputSettings":
 		return &device.SetRelayOutputSettings{}, nil
 	case "SetRelayOutputState":
diff --git a/device/function.go b/device/function.go
index d018c689..7074d988 100644
--- a/device/function.go
+++ b/device/function.go
@@ -341,6 +341,15 @@ func (_ *GetRelayOutputsFunction) Response() interface{} {
 	return &GetRelayOutputsResponse{}
 }
 
+type GetDigitalInputsFunction struct{}
+
+func (_ *GetDigitalInputsFunction) Request() interface{} {
+	return &GetDigitalInputs{}
+}
+func (_ *GetDigitalInputsFunction) Response() interface{} {
+	return &GetDigitalInputsResponse{}
+}
+
 type GetRemoteDiscoveryModeFunction struct{}
 
 func (_ *GetRemoteDiscoveryModeFunction) Request() interface{} {
diff --git a/device/types.go b/device/types.go
index 210cd00d..521dc7c0 100644
--- a/device/types.go
+++ b/device/types.go
@@ -683,6 +683,14 @@ type GetRelayOutputsResponse struct {
 	RelayOutputs onvif.RelayOutput
 }
 
+type GetDigitalInputs struct {
+	XMLName string `xml:"tmd:GetDigitalInputs"`
+}
+
+type GetDigitalInputsResponse struct {
+	DigitalInputs onvif.DigitalInput
+}
+
 type SetRelayOutputSettings struct {
 	XMLName          string                    `xml:"tds:SetRelayOutputSettings"`
 	RelayOutputToken onvif.ReferenceToken      `xml:"tds:RelayOutputToken"`
diff --git a/deviceio/function.go b/deviceio/function.go
index 1e97bc68..34c7eb1b 100644
--- a/deviceio/function.go
+++ b/deviceio/function.go
@@ -341,6 +341,15 @@ func (_ *GetRelayOutputsFunction) Response() interface{} {
 	return &GetRelayOutputsResponse{}
 }
 
+type GetDigitalInputsFunction struct{}
+
+func (_ *GetDigitalInputsFunction) Request() interface{} {
+	return &GetDigitalInputs{}
+}
+func (_ *GetDigitalInputsFunction) Response() interface{} {
+	return &GetDigitalInputsResponse{}
+}
+
 type GetRemoteDiscoveryModeFunction struct{}
 
 func (_ *GetRemoteDiscoveryModeFunction) Request() interface{} {
diff --git a/deviceio/types.go b/deviceio/types.go
index f6a3b3a0..4369589b 100644
--- a/deviceio/types.go
+++ b/deviceio/types.go
@@ -683,6 +683,14 @@ type GetRelayOutputsResponse struct {
 	RelayOutputs onvif.RelayOutput
 }
 
+type GetDigitalInputs struct {
+	XMLName string `xml:"tmd:GetDigitalInputs"`
+}
+
+type GetDigitalInputsResponse struct {
+	DigitalInputs onvif.DigitalInput
+}
+
 type SetRelayOutputSettings struct {
 	XMLName          string                    `xml:"tds:SetRelayOutputSettings"`
 	RelayOutputToken onvif.ReferenceToken      `xml:"tds:RelayOutputToken"`
diff --git a/event/types.go b/event/types.go
index a82e5967..a980e120 100644
--- a/event/types.go
+++ b/event/types.go
@@ -166,6 +166,7 @@ type QueryExpression QueryExpressionType
 
 // TopicExpressionType struct for wsnt:TopicExpression
 type TopicExpressionType struct { //wsnt http://docs.oasis-open.org/wsn/b-2.xsd
+	Dialect    xsd.String `xml:"Dialect,attr"`
 	TopicKinds xsd.String `xml:",chardata"`
 }
 
diff --git a/mappings.go b/mappings.go
index 1c7576c2..2f6726b2 100644
--- a/mappings.go
+++ b/mappings.go
@@ -72,6 +72,7 @@ var DeviceFunctionMap = map[string]Function{
 	GetNetworkProtocols:           &device.GetNetworkProtocolsFunction{},
 	GetPkcs10Request:              &device.GetPkcs10RequestFunction{},
 	GetRelayOutputs:               &device.GetRelayOutputsFunction{},
+	GetDigitalInputs:              &device.GetDigitalInputsFunction{},
 	GetRemoteDiscoveryMode:        &device.GetRemoteDiscoveryModeFunction{},
 	GetRemoteUser:                 &device.GetRemoteUserFunction{},
 	GetScopes:                     &device.GetScopesFunction{},
diff --git a/names.go b/names.go
index e3cbaeab..4a31c8ef 100644
--- a/names.go
+++ b/names.go
@@ -75,6 +75,7 @@ const (
 	GetNetworkProtocols           = "GetNetworkProtocols"
 	GetPkcs10Request              = "GetPkcs10Request"
 	GetRelayOutputs               = "GetRelayOutputs"
+	GetDigitalInputs							= "GetDigitalInputs"
 	GetRemoteDiscoveryMode        = "GetRemoteDiscoveryMode"
 	GetRemoteUser                 = "GetRemoteUser"
 	GetScopes                     = "GetScopes"
diff --git a/xsd/onvif/onvif.go b/xsd/onvif/onvif.go
index b973f063..adc48ddb 100644
--- a/xsd/onvif/onvif.go
+++ b/xsd/onvif/onvif.go
@@ -1839,6 +1839,17 @@ type RelayOutputSettings struct {
 	IdleState RelayIdleState `xml:"IdleState"`
 }
 
+type DigitalInput struct {
+	Token ReferenceToken `xml:"token,attr"`
+	IdleState 	InputIdleState `xml:"IdleState,attr"`
+}
+
+// TODO:enumeration
+type InputToken xsd.String
+
+// TODO:enumeration
+type InputIdleState xsd.String
+
 // TODO:enumeration
 type RelayIdleState xsd.String