diff --git a/ts/Manager/App.tsx b/ts/Manager/App.tsx
index b7f32cc..a166048 100644
--- a/ts/Manager/App.tsx
+++ b/ts/Manager/App.tsx
@@ -43,7 +43,7 @@ const App: React.FC<Props> = () => {
 	const [orderBy, setOrderBy] = useState<SortKey>('name');
 	const [sortOrder, setSortOrder] = useState(SortOrder.ASC);
 
-	const rows = rooms.sort(sortRooms(orderBy, sortOrder)).map(room => <RoomRow room={room} restriction={restriction} key={room.id} updateRoom={updateRoom} deleteRoom={deleteRoom} />);
+	const rows = rooms.sort(sortRooms(orderBy, sortOrder)).map(room => <RoomRow room={room} restriction={restriction} key={room.id} updateRoom={updateRoom} deleteRoom={deleteRoom} cloneRoom={cloneRoom}/>);
 
 	useEffect(() => {
 		Promise.all([
@@ -121,6 +121,25 @@ const App: React.FC<Props> = () => {
 		});
 	}
 
+	function cloneRoom(room: Room) {
+
+		let access = Access.Public;
+
+		const disabledRoomTypes = restriction?.roomTypes || [];
+		if (disabledRoomTypes.length > 0 && disabledRoomTypes.indexOf(access) > -1) {
+			access = Object.values(Access).filter(a => disabledRoomTypes.indexOf(a) < 0)[0] as Access;
+		}
+
+		const maxParticipants = restriction?.maxParticipants || 0;
+
+		return api.createRoom(room.name, access, maxParticipants).then(newRoom => {
+			room.uid = newRoom.uid;
+			room.id = newRoom.id;
+			setRooms(rooms.concat([room]));
+			updateRoom(room);
+		});
+	}
+
 	const maxRooms = restriction?.maxRooms || 0;
 	const quota = maxRooms < 0 ? t('bbb', 'unlimited') : rooms.filter(room => room.userId === OC.currentUser).length + ' / ' + maxRooms;
 
@@ -151,6 +170,7 @@ const App: React.FC<Props> = () => {
 						</th>
 						<th />
 						<th />
+						<th />
 					</tr>
 				</thead>
 				<tbody>
diff --git a/ts/Manager/RoomRow.tsx b/ts/Manager/RoomRow.tsx
index 40de45b..bc6808a 100644
--- a/ts/Manager/RoomRow.tsx
+++ b/ts/Manager/RoomRow.tsx
@@ -11,6 +11,7 @@ type Props = {
 	restriction?: Restriction;
 	updateRoom: (room: Room) => Promise<void>;
 	deleteRoom: (id: number) => void;
+	cloneRoom: (room: Room) => void;
 }
 
 type RecordingsNumberProps = {
@@ -175,6 +176,10 @@ const RoomRow: React.FC<Props> = (props) => {
 		return <EditableValue field={field} value={room[field]} setValue={updateRoom} type={type} options={options} />;
 	}
 
+	function cloneRow() {
+		props.cloneRoom({...props.room});
+	}
+
 	const avatarUrl = OC.generateUrl('/avatar/' + encodeURIComponent(room.userId) + '/' + 24, {
 		user: room.userId,
 		size: 24,
@@ -225,6 +230,11 @@ const RoomRow: React.FC<Props> = (props) => {
 				<td className="edit icon-col">
 					<EditRoom room={props.room} restriction={props.restriction} updateProperty={updateRoom} />
 				</td>
+				<td className="clone icon-col">
+					<button className="action-item" onClick={cloneRow} title={t('bbb', 'Clone Room')}>
+						<span className="icon icon-template-add icon-visible"></span>
+					</button>
+				</td>
 				<td className="remove icon-col">
 					<button className="action-item" onClick={deleteRow as any} title={t('bbb', 'Delete')}>
 						<span className="icon icon-delete icon-visible"></span>