diff --git a/CHANGELOG.md b/CHANGELOG.md
index cfa85e95..d7120d5d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
### Major New features
* YANG Features
* Yang 1.1 feature and if-feature according to RFC 7950 7.20.1 and 7.20.2.
+ * See https://github.com/clicon/clixon/issues/41
* Features are declared via CLICON_FEATURE in the configuration file. Examples showing enabling (1) a specific feature; (2) all features in a module; (3) all features in all modules:
```
ietf-routing:router-id
diff --git a/test/test_feature.sh b/test/test_feature.sh
new file mode 100755
index 00000000..afcb05bb
--- /dev/null
+++ b/test/test_feature.sh
@@ -0,0 +1,109 @@
+#!/bin/bash
+# Yang features. if-feature
+APPNAME=example
+# include err() and new() functions and creates $dir
+. ./lib.sh
+
+cfg=$dir/conf_yang.xml
+fyang=$dir/test.yang
+
+cat < $cfg
+
+ $APPNAME:A
+ ietf-routing:router-id
+ $cfg
+ /usr/local/share/$APPNAME/yang
+ $APPNAME
+ /usr/local/lib/$APPNAME/clispec
+ /usr/local/lib/$APPNAME/cli
+ $APPNAME
+ /usr/local/var/$APPNAME/$APPNAME.sock
+ /usr/local/var/$APPNAME/$APPNAME.pidfile
+ 1
+ /usr/local/var/$APPNAME
+ /usr/local/lib/xmldb/text.so
+ true
+
+EOF
+
+cat < $fyang
+module $APPNAME{
+ prefix ex;
+ import ietf-routing {
+ prefix rt;
+ }
+ feature A{
+ description "This test feature is enabled";
+ }
+ feature B{
+ description "This test feature is disabled";
+ }
+ feature C{
+ description "This test feature is disabled";
+ }
+ leaf x{
+ if-feature A;
+ type "string";
+ }
+ leaf y{
+ if-feature B;
+ type "string";
+ }
+ leaf z{
+ type "string";
+ }
+}
+EOF
+new "start backend -s init -f $cfg -y $fyang"
+# kill old backend (if any)
+new "kill old backend"
+sudo clixon_backend -zf $cfg -y $fyang
+if [ $? -ne 0 ]; then
+ err
+fi
+
+new "start backend -s init -f $cfg -y $fyang"
+# start new backend
+sudo $clixon_backend -s init -f $cfg -y $fyang
+if [ $? -ne 0 ]; then
+ err
+fi
+
+new "cli enabled feature"
+expectfn "$clixon_cli -1f $cfg -y $fyang set x foo" 0 ""
+
+new "cli disabled feature"
+expectfn "$clixon_cli -1f $cfg -l o -y $fyang set y foo" 255 "CLI syntax error: \"set y foo\": Unknown command"
+
+new "cli enabled feature in other module"
+expectfn "$clixon_cli -1f $cfg -y $fyang set routing routing-instance A router-id 1.2.3.4" 0 ""
+
+new "cli disabled feature in other module"
+expectfn "$clixon_cli -1f $cfg -l o -y $fyang set routing routing-instance A default-ribs" 255 "CLI syntax error: \"set routing routing-instance A default-ribs\": Unknown command"
+
+new "netconf discard-changes"
+expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 "]]>]]>" "^]]>]]>$"
+
+new "netconf enabled feature"
+expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 "foo]]>]]>" "^]]>]]>$"
+
+new "netconf validate enabled feature"
+expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 "]]>]]>" "^]]>]]>$"
+
+new "netconf disabled feature"
+expecteof "$clixon_netconf -qf $cfg -y $fyang" 0 "foo]]>]]>" '^operation-failedprotocolerrorXML node config/A has no corresponding yang specification \(Invalid XML or wrong Yang spec?'
+
+new "Kill backend"
+# kill backend
+sudo clixon_backend -zf $cfg
+if [ $? -ne 0 ]; then
+ err "kill backend"
+fi
+
+# Check if still alive
+pid=`pgrep clixon_backend`
+if [ -n "$pid" ]; then
+ sudo kill $pid
+fi
+
+rm -rf $dir