diff --git a/root/etc/e-smith/events/actions/doraemon-reboot-all b/root/etc/e-smith/events/actions/doraemon-reboot-all
new file mode 100755
index 0000000..1e8d739
--- /dev/null
+++ b/root/etc/e-smith/events/actions/doraemon-reboot-all
@@ -0,0 +1,20 @@
+#!/usr/bin/perl -w
+
+package esmith;
+
+use strict;
+use Errno;
+use esmith::DB::db;
+use IO::File;
+use English;
+
+my $db_hosts = esmith::DB::db->open('hosts') || die("Could not open e-smith db (" . esmith::DB::db->error . ")\n");
+
+my @items = $db_hosts->get_all('remote');
+foreach my $item (@items) {
+  my $hostName = $item->key;
+  system("/usr/bin/sudo -u amgmt /usr/bin/ssh -o StrictHostKeyChecking=no amgmt\@$hostName /usr/bin/sudo /sbin/reboot &") == 0
+      or die "Error rebooting $hostName";
+}
+
+exit 0;
diff --git a/root/etc/e-smith/events/actions/doraemon-shutdown-all b/root/etc/e-smith/events/actions/doraemon-shutdown-all
new file mode 100755
index 0000000..5df4213
--- /dev/null
+++ b/root/etc/e-smith/events/actions/doraemon-shutdown-all
@@ -0,0 +1,20 @@
+#!/usr/bin/perl -w
+
+package esmith;
+
+use strict;
+use Errno;
+use esmith::DB::db;
+use IO::File;
+use English;
+
+my $db_hosts = esmith::DB::db->open('hosts') || die("Could not open e-smith db (" . esmith::DB::db->error . ")\n");
+
+my @items = $db_hosts->get_all('remote');
+foreach my $item (@items) {
+  my $hostName = $item->key;
+  system("/usr/bin/sudo -u amgmt /usr/bin/ssh -o StrictHostKeyChecking=no amgmt\@$hostName /usr/bin/sudo /sbin/poweroff &") == 0
+      or die "Error shutting down $hostName";
+}
+
+exit 0;
diff --git a/root/etc/e-smith/events/actions/doraemon-wake-all b/root/etc/e-smith/events/actions/doraemon-wake-all
new file mode 100755
index 0000000..39f97e2
--- /dev/null
+++ b/root/etc/e-smith/events/actions/doraemon-wake-all
@@ -0,0 +1,21 @@
+#!/usr/bin/perl -w
+
+package esmith;
+
+use strict;
+use Errno;
+use esmith::DB::db;
+use IO::File;
+use English;
+
+my $db_hosts = esmith::DB::db->open('hosts') || die("Could not open e-smith db (" . esmith::DB::db->error . ")\n");
+
+my @items = $db_hosts->get_all('remote');
+foreach my $item (@items) {
+  my $hostName = $item->key;
+  my $mac = $item->prop('MacAddress');
+  system("/sbin/ether-wake -i lan0 $mac &") == 0
+      or die "Error waking up $hostName";
+}
+
+exit 0;
diff --git a/root/etc/e-smith/events/doraemon-reboot-all/S50doraemon-reboot-all b/root/etc/e-smith/events/doraemon-reboot-all/S50doraemon-reboot-all
new file mode 120000
index 0000000..d03ca78
--- /dev/null
+++ b/root/etc/e-smith/events/doraemon-reboot-all/S50doraemon-reboot-all
@@ -0,0 +1 @@
+../actions/doraemon-reboot-all
\ No newline at end of file
diff --git a/root/etc/e-smith/events/doraemon-shutdown-all/S50doraemon-shutdown-all b/root/etc/e-smith/events/doraemon-shutdown-all/S50doraemon-shutdown-all
new file mode 120000
index 0000000..c2cdf5f
--- /dev/null
+++ b/root/etc/e-smith/events/doraemon-shutdown-all/S50doraemon-shutdown-all
@@ -0,0 +1 @@
+../actions/doraemon-shutdown-all
\ No newline at end of file
diff --git a/root/etc/e-smith/events/doraemon-wake-all/S50doraemon-wake-all b/root/etc/e-smith/events/doraemon-wake-all/S50doraemon-wake-all
new file mode 120000
index 0000000..6642a73
--- /dev/null
+++ b/root/etc/e-smith/events/doraemon-wake-all/S50doraemon-wake-all
@@ -0,0 +1 @@
+../actions/doraemon-wake-all
\ No newline at end of file
diff --git a/root/usr/share/nethesis/NethServer/Language/en/NethServer_Module_Doraemon.php b/root/usr/share/nethesis/NethServer/Language/en/NethServer_Module_Doraemon.php
index 9c70ab3..6f87ce3 100644
--- a/root/usr/share/nethesis/NethServer/Language/en/NethServer_Module_Doraemon.php
+++ b/root/usr/share/nethesis/NethServer/Language/en/NethServer_Module_Doraemon.php
@@ -8,3 +8,6 @@ $L['MacAddress_label'] = 'MAC Address';
 $L['shutdown_label'] = 'Shutdown';
 $L['reboot_label'] = 'Reboot';
 $L['wake_label'] = 'Wake Up';
+$L['shutdown-all_label'] = 'Shutdown all';
+$L['reboot-all_label'] = 'Reboot all';
+$L['wake-all_label'] = 'Wake Up all';
diff --git a/root/usr/share/nethesis/NethServer/Language/it/NethServer_Module_Doraemon.php b/root/usr/share/nethesis/NethServer/Language/it/NethServer_Module_Doraemon.php
index 812bcea..26e3dff 100644
--- a/root/usr/share/nethesis/NethServer/Language/it/NethServer_Module_Doraemon.php
+++ b/root/usr/share/nethesis/NethServer/Language/it/NethServer_Module_Doraemon.php
@@ -8,3 +8,6 @@ $L['MacAddress_label'] = 'MAC Address';
 $L['shutdown_label'] = 'Spegni';
 $L['reboot_label'] = 'Riavvia';
 $L['wake_label'] = 'Accendi';
+$L['shutdown-all_label'] = 'Spegni tutti';
+$L['reboot-all_label'] = 'Riavvia tutti';
+$L['wake-all_label'] = 'Accendi tutti';
diff --git a/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts.php b/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts.php
index 10c05ce..e898502 100644
--- a/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts.php
+++ b/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts.php
@@ -24,6 +24,9 @@ class Hosts extends \Nethgui\Controller\TableController
             ->addRowAction(new \NethServer\Module\Doraemon\Hosts\TogglePower('shutdown'))
             ->addRowAction(new \NethServer\Module\Doraemon\Hosts\Modify('delete'))
             ->addTableAction(new \NethServer\Module\Doraemon\Hosts\Modify('create'))
+            ->addTableAction(new \NethServer\Module\Doraemon\Hosts\TogglePowerAll('wake-all'))
+            ->addTableAction(new \NethServer\Module\Doraemon\Hosts\TogglePowerAll('reboot-all'))
+            ->addTableAction(new \NethServer\Module\Doraemon\Hosts\TogglePowerAll('shutdown-all'))
             ->addTableAction(new \Nethgui\Controller\Table\Help('Help'))
         ;
 
diff --git a/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts/TogglePowerAll.php b/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts/TogglePowerAll.php
new file mode 100644
index 0000000..b1c7a26
--- /dev/null
+++ b/root/usr/share/nethesis/NethServer/Module/Doraemon/Hosts/TogglePowerAll.php
@@ -0,0 +1,34 @@
+<?php
+namespace NethServer\Module\Doraemon\Hosts;
+
+use Nethgui\System\PlatformInterface as Validate;
+
+/**
+ * Toggle host power status
+ *
+ * Fires events
+ * - doraemon-wake-all
+ * - doraemon-reboot-all
+ * - doraemon-shutdown-all
+ */
+class TogglePowerAll extends \Nethgui\Controller\Table\AbstractAction
+{
+
+    public function __construct($identifier = NULL)
+    {
+        if ($identifier !== 'wake-all' && $identifier !== 'reboot-all' && $identifier !== 'shutdown-all') {
+            throw new \InvalidArgumentException(sprintf('%s: module identifier must be one of "wake-all" or "reboot-all" or "shutdown-all".', get_class($this)), 1325579395);
+        }
+        parent::__construct($identifier);
+    }
+
+    public function process()
+    {
+        if ( ! $this->getRequest()->isMutation()) {
+            return;
+        }
+
+        $this->getPlatform()->signalEvent(sprintf('doraemon-%s@post', $this->getIdentifier()));
+    }
+
+}
diff --git a/root/usr/share/nethesis/NethServer/Template/Doraemon/Hosts/TogglePowerAll.php b/root/usr/share/nethesis/NethServer/Template/Doraemon/Hosts/TogglePowerAll.php
new file mode 100644
index 0000000..2d9968f
--- /dev/null
+++ b/root/usr/share/nethesis/NethServer/Template/Doraemon/Hosts/TogglePowerAll.php
@@ -0,0 +1,21 @@
+<?php
+$view->requireFlag($view::INSET_DIALOG);
+
+if ($view->getModule()->getIdentifier() == 'shutdown-all') {
+    $headerText = $T('Shutdown all hosts');
+    $panelText = $T('Proceed with all hosts shutdown?');
+} elseif ($view->getModule()->getIdentifier() == 'reboot-all') {
+    $headerText = $T('Reboot all hosts');
+    $panelText = $T('Proceed with all hosts reboot?');
+} else {
+    $headerText = $T('Wakeup all hosts');
+    $panelText = $T('Proceed with all hosts wakeup?');
+}
+
+echo $view->header()->setAttribute('template', $headerText);
+// TODO: add a text label here
+// echo $view->textLabel()->setAttribute('template', $panelText);
+echo $view->buttonList()
+    ->insert($view->button('Yes', $view::BUTTON_SUBMIT))
+    ->insert($view->button('No', $view::BUTTON_CANCEL)->setAttribute('value', $view['Cancel']))
+;