diff --git a/xmpp_error.go b/xmpp_error.go
new file mode 100644
index 0000000..026820a
--- /dev/null
+++ b/xmpp_error.go
@@ -0,0 +1,57 @@
+package xmpp
+
+import (
+ "fmt"
+)
+
+// ErrorServiceUnavailable implements error response about feature that is not available. Currently implemented for
+// xep-0030.
+// QueryXmlns is about incoming xmlns attribute in query tag.
+// Node is about incoming node attribute in query tag (looks like it used only in disco#commands).
+//
+// If queried feature is not here on purpose, standards suggest answer with this stanza.
+func (c *Client) ErrorServiceUnavailable(v IQ, queryXmlns, node string) (string, error) {
+ query := fmt.Sprintf("", node)
+ } else {
+ query += "/>"
+ }
+
+ query += ""
+ query += ""
+ query += ""
+
+ return c.RawInformation(
+ v.To,
+ v.From,
+ v.ID,
+ IQTypeError,
+ query,
+ )
+}
+
+// ErrorNotImplemented implements error response about feature that is not (yet?) implemented.
+// Xmlns is about not implemented feature.
+//
+// If queried feature is not here because of it under development or for similar reasons, standards suggest answer with
+// this stanza.
+func (c *Client) ErrorNotImplemented(v IQ, xmlns, feature string) (string, error) {
+ query := ""
+ query += ""
+ query += fmt.Sprintf(
+ "",
+ xmlns,
+ feature,
+ )
+ query += ""
+
+ return c.RawInformation(
+ v.To,
+ v.From,
+ v.ID,
+ IQTypeError,
+ query,
+ )
+}