--- /dev/null
+--- a/app.c
++++ b/app.c
+@@ -114,7 +114,44 @@
+ return !status;
+ }
+
++static int app_send_ussd_exec (attribute_unused struct ast_channel* channel, const char* data)
++{
++ char* parse;
++ const char* msg;
++ int status;
++ void * msgid;
+
++ AST_DECLARE_APP_ARGS (args,
++ AST_APP_ARG (device);
++ AST_APP_ARG (ussd);
++ );
++
++ if (ast_strlen_zero (data))
++ {
++ return -1;
++ }
++
++ parse = ast_strdupa (data);
++
++ AST_STANDARD_APP_ARGS (args, parse);
++
++ if (ast_strlen_zero (args.device))
++ {
++ ast_log (LOG_ERROR, "NULL device for ussd -- USSD will not be sent\n");
++ return -1;
++ }
++
++ if (ast_strlen_zero (args.ussd))
++ {
++ ast_log (LOG_ERROR, "NULL ussd command -- USSD will not be sent\n");
++ return -1;
++ }
++
++ msg = send_ussd(args.device, args.ussd, &status, &msgid);
++ if(!status)
++ ast_log (LOG_ERROR, "[%s] %s with id %p\n", args.device, msg, msgid);
++ return !status;
++}
+
+ static const struct dongle_application
+ {
+@@ -144,7 +181,15 @@
+ " Message - text of the message\n"
+ " Validity - Validity period in minutes\n"
+ " Report - Boolean flag for report request\n"
+- }
++ },
++ {
++ "DongleSendUSSD",
++ app_send_ussd_exec,
++ "DongleSendUSSD(Device,USSD)",
++ "DongleSendUSSD(Device,USSD)\n"
++ " Device - Id of device from dongle.conf\n"
++ " USSD - ussd command\n"
++ }
+ };
+
+ #if ASTERISK_VERSION_NUM >= 10800