diff --git a/docs/content/usage/integrations/aws-run-on-ec2-machine.md b/docs/content/usage/integrations/aws-run-on-ec2-machine.md
index 0183dc241..e30a8b554 100644
--- a/docs/content/usage/integrations/aws-run-on-ec2-machine.md
+++ b/docs/content/usage/integrations/aws-run-on-ec2-machine.md
@@ -54,16 +54,15 @@ See [Amazon's documentation about working with SSM agents](https://docs.aws.amaz
### Running the monkey
-When you run the monkey island on an AWS instance, the island detects it's running on AWS and present the following option in the _"Run Monkey"_ page, like so:
+When you run the Monkey Island on an AWS instance, the island detects it's running on AWS and present the following option in the _"Run Monkey"_ page, like so:
![Running a Monkey on EC2 Instance](/images/usage/integrations/monkey-island-aws-screenshot-1.png "Running a Monkey on EC2 Instance")
-And then you can choose one of the available instances as "patient zero" like so:
+After you click on "AWS run" you can choose one of the available instances as "patient zero" like so:
-1. Click on "Run on AWS"
-2. Choose the relevant Network Interface
-3. Select the machines you'd like to run the Monkey on
-4. Click "Run on Selected Machines", and watch the monkey go! 🐒
+1. Choose the relevant Network Interface
+2. Select the machines you'd like to run the Monkey on
+3. Click "Run on Selected Machines", and watch the monkey go! 🐒
![Running a Monkey on EC2 Instance](/images/usage/integrations/monkey-island-aws-screenshot-2.png "Running a Monkey on EC2 Instance")
diff --git a/docs/static/images/usage/integrations/monkey-island-aws-screenshot-1.png b/docs/static/images/usage/integrations/monkey-island-aws-screenshot-1.png
index 0b1af5fae..ba61e2b7c 100644
Binary files a/docs/static/images/usage/integrations/monkey-island-aws-screenshot-1.png and b/docs/static/images/usage/integrations/monkey-island-aws-screenshot-1.png differ
diff --git a/docs/static/images/usage/integrations/monkey-island-aws-screenshot-2.png b/docs/static/images/usage/integrations/monkey-island-aws-screenshot-2.png
index f6442e82b..ad9f6ed81 100644
Binary files a/docs/static/images/usage/integrations/monkey-island-aws-screenshot-2.png and b/docs/static/images/usage/integrations/monkey-island-aws-screenshot-2.png differ
diff --git a/monkey/monkey_island/cc/ui/.eslintrc b/monkey/monkey_island/cc/ui/.eslintrc
index 2cd52bb98..afc7f2b7a 100644
--- a/monkey/monkey_island/cc/ui/.eslintrc
+++ b/monkey/monkey_island/cc/ui/.eslintrc
@@ -35,7 +35,8 @@
"comma-dangle": 1,
"quotes": [
1,
- "single"
+ "single",
+ {"allowTemplateLiterals": true}
],
"no-undef": 1,
"global-strict": 0,
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/LocalManualRunOptions.js b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/RunManually/LocalManualRunOptions.js
similarity index 74%
rename from monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/LocalManualRunOptions.js
rename to monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/RunManually/LocalManualRunOptions.js
index b28285a18..bd396e256 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/LocalManualRunOptions.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/RunManually/LocalManualRunOptions.js
@@ -1,12 +1,12 @@
import React, {useEffect, useState} from 'react';
-import InlineSelection from '../../ui-components/inline-selection/InlineSelection';
-import DropdownSelect from '../../ui-components/DropdownSelect';
-import {OS_TYPES} from './OsTypes';
-import GenerateLocalWindowsCmd from './commands/local_windows_cmd';
-import GenerateLocalWindowsPowershell from './commands/local_windows_powershell';
-import GenerateLocalLinuxWget from './commands/local_linux_wget';
-import GenerateLocalLinuxCurl from './commands/local_linux_curl';
-import CommandDisplay from './CommandDisplay';
+import InlineSelection from '../../../ui-components/inline-selection/InlineSelection';
+import DropdownSelect from '../../../ui-components/DropdownSelect';
+import {OS_TYPES} from '../utils/OsTypes';
+import GenerateLocalWindowsCmd from '../commands/local_windows_cmd';
+import GenerateLocalWindowsPowershell from '../commands/local_windows_powershell';
+import GenerateLocalLinuxWget from '../commands/local_linux_wget';
+import GenerateLocalLinuxCurl from '../commands/local_linux_curl';
+import CommandDisplay from '../utils/CommandDisplay';
const LocalManualRunOptions = (props) => {
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/RunOnAWS/AWSInstanceTable.js b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/RunOnAWS/AWSInstanceTable.js
new file mode 100644
index 000000000..cf792f7b8
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage/RunOnAWS/AWSInstanceTable.js
@@ -0,0 +1,119 @@
+import React, {useState} from 'react';
+import ReactTable from 'react-table'
+import checkboxHOC from 'react-table/lib/hoc/selectTable';
+import PropTypes from 'prop-types';
+
+
+const CheckboxTable = checkboxHOC(ReactTable);
+
+const columns = [
+ {
+ Header: 'Machines',
+ columns: [
+ {Header: 'Machine', accessor: 'name'},
+ {Header: 'Instance ID', accessor: 'instance_id'},
+ {Header: 'IP Address', accessor: 'ip_address'},
+ {Header: 'OS', accessor: 'os'}
+ ]
+ }
+];
+
+const pageSize = 10;
+
+function AWSInstanceTable(props) {
+
+ const [allToggled, setAllToggled] = useState(false);
+ let checkboxTable = null;
+
+ function toggleSelection(key) {
+ key = key.replace('select-', '');
+ // start off with the existing state
+ let modifiedSelection = [...props.selection];
+ const keyIndex = modifiedSelection.indexOf(key);
+ // check to see if the key exists
+ if (keyIndex >= 0) {
+ // it does exist so we will remove it using destructing
+ modifiedSelection = [
+ ...modifiedSelection.slice(0, keyIndex),
+ ...modifiedSelection.slice(keyIndex + 1)
+ ];
+ } else {
+ // it does not exist so add it
+ modifiedSelection.push(key);
+ }
+ // update the state
+ props.setSelection(modifiedSelection);
+ }
+
+ function isSelected(key) {
+ return props.selection.includes(key);
+ }
+
+ function toggleAll() {
+ const selectAll = !allToggled;
+ const selection = [];
+ if (selectAll) {
+ // we need to get at the internals of ReactTable
+ const wrappedInstance = checkboxTable.getWrappedInstance();
+ // the 'sortedData' property contains the currently accessible records based on the filter and sort
+ const currentRecords = wrappedInstance.getResolvedState().sortedData;
+ // we just push all the IDs onto the selection array
+ currentRecords.forEach(item => {
+ selection.push(item._original.instance_id);
+ });
+ }
+ setAllToggled(selectAll);
+ props.setSelection(selection);
+ }
+
+ function getTrProps(_, r) {
+ let color = 'inherit';
+ if (r) {
+ let instId = r.original.instance_id;
+ if (isSelected(instId)) {
+ color = '#ffed9f';
+ } else if (Object.prototype.hasOwnProperty.call(props.results, instId)) {
+ color = props.results[instId] ? '#00f01b' : '#f00000'
+ }
+ }
+
+ return {
+ style: {backgroundColor: color}
+ };
+ }
+
+ return (
+