diff --git a/src/sunstone/public/app/utils/vnc-spice-utils.js b/src/sunstone/public/app/utils/vnc-spice-utils.js
new file mode 100644
index 0000000000..9d7537f122
--- /dev/null
+++ b/src/sunstone/public/app/utils/vnc-spice-utils.js
@@ -0,0 +1,62 @@
+define(function(require) {
+ var OpenNebulaVm = require('opennebula/vm');
+
+ var VNC_STATES = [
+ OpenNebulaVm.lcm_state.RUNNING,
+ OpenNebulaVm.lcm_state.SHUTDOWN,
+ OpenNebulaVm.lcm_state.SHUTDOWN_POWEROFF,
+ OpenNebulaVm.lcm_state.UNKNOWN,
+ OpenNebulaVm.lcm_state.HOTPLUG,
+ OpenNebulaVm.lcm_state.CANCEL,
+ OpenNebulaVm.lcm_state.MIGRATE,
+ OpenNebulaVm.lcm_state.HOTPLUG_SNAPSHOT,
+ OpenNebulaVm.lcm_state.HOTPLUG_NIC,
+ OpenNebulaVm.lcm_state.HOTPLUG_SAVEAS,
+ OpenNebulaVm.lcm_state.HOTPLUG_SAVEAS_POWEROFF,
+ OpenNebulaVm.lcm_state.HOTPLUG_SAVEAS_SUSPENDED,
+ OpenNebulaVm.lcm_state.SHUTDOWN_UNDEPLOY
+ ];
+
+ return {
+ 'VNCEnabled': _VNCEnabled,
+ 'SPICEEnabled': _SPICEEnabled,
+ 'vncIcon': _vncIcon
+ }
+
+ function _VNCEnabled(vm) {
+ var graphics = vm.TEMPLATE.GRAPHICS;
+ var state = parseInt(vm.LCM_STATE);
+
+ return (graphics &&
+ graphics.TYPE &&
+ graphics.TYPE.toLowerCase() == "vnc" &&
+ $.inArray(state, VNC_STATES) != -1);
+ }
+
+ function _SPICEEnabled(vm) {
+ var graphics = vm.TEMPLATE.GRAPHICS;
+ var state = parseInt(vm.LCM_STATE);
+
+ return (graphics &&
+ graphics.TYPE &&
+ graphics.TYPE.toLowerCase() == "spice" &&
+ $.inArray(state, VNC_STATES) != -1);
+ }
+
+ function _vncIcon(vm) {
+ var gr_icon;
+
+ if (_VNCEnabled(vm)) {
+ gr_icon = '';
+ gr_icon += '';
+ } else if (_SPICEEnabled(vm)) {
+ gr_icon = '';
+ gr_icon += '';
+ } else {
+ gr_icon = '';
+ }
+
+ gr_icon += ''
+ return gr_icon;
+ }
+})