diff --git a/ts/components/conversation/TimerNotification.tsx b/ts/components/conversation/TimerNotification.tsx
index 7e5150cd7..4ed9b45bf 100644
--- a/ts/components/conversation/TimerNotification.tsx
+++ b/ts/components/conversation/TimerNotification.tsx
@@ -11,13 +11,15 @@ import {
   useSelectedConversationDisappearingMode,
   useSelectedConversationKey,
   useSelectedExpireTimer,
+  useSelectedIsGroupOrCommunity,
+  useSelectedIsGroupV2,
   useSelectedIsNoteToSelf,
   useSelectedIsPrivate,
   useSelectedIsPrivateFriend,
 } from '../../state/selectors/selectedConversation';
 import { ReleasedFeatures } from '../../util/releaseFeature';
 import { Flex } from '../basic/Flex';
-import { TextWithChildren } from '../basic/Text';
+import { SpacerMD, TextWithChildren } from '../basic/Text';
 import { ExpirableReadableMessage } from './message/message-item/ExpirableReadableMessage';
 // eslint-disable-next-line import/order
 import { ConversationInteraction } from '../../interactions';
@@ -25,6 +27,7 @@ import { getConversationController } from '../../session/conversations';
 import { updateConfirmModal } from '../../state/ducks/modalDialog';
 import { SessionButtonColor } from '../basic/SessionButton';
 import { SessionHtmlRenderer } from '../basic/SessionHTMLRenderer';
+import { SessionIcon } from '../icon';
 
 const FollowSettingButton = styled.button`
   color: var(--primary-color);
@@ -182,6 +185,9 @@ export const TimerNotification = (props: PropsForExpirationTimer) => {
   const { messageId } = props;
 
   const textToRender = useTextToRender(props);
+  const isGroupOrCommunity = useSelectedIsGroupOrCommunity();
+  const isGroupV2 = useSelectedIsGroupV2();
+  const renderOffIcon = props.disabled || (isGroupOrCommunity && !isGroupV2);
 
   if (!textToRender || textToRender.length === 0) {
     throw new Error('textToRender invalid key used TimerNotification');
@@ -205,6 +211,16 @@ export const TimerNotification = (props: PropsForExpirationTimer) => {
         padding="5px 10px"
         style={{ textAlign: 'center' }}
       >
+        {renderOffIcon && (
+          <>
+            
+            
+          >
+        )}
         
           
         
diff --git a/ts/components/conversation/header/ConversationHeaderSubtitle.tsx b/ts/components/conversation/header/ConversationHeaderSubtitle.tsx
index b12e13bd6..a4b9e7229 100644
--- a/ts/components/conversation/header/ConversationHeaderSubtitle.tsx
+++ b/ts/components/conversation/header/ConversationHeaderSubtitle.tsx
@@ -123,7 +123,7 @@ export const ConversationHeaderSubtitle = (props: ConversationHeaderSubtitleProp
           
         )}
diff --git a/ts/components/conversation/header/ConversationHeaderTitle.tsx b/ts/components/conversation/header/ConversationHeaderTitle.tsx
index d496b846a..43830a101 100644
--- a/ts/components/conversation/header/ConversationHeaderTitle.tsx
+++ b/ts/components/conversation/header/ConversationHeaderTitle.tsx
@@ -8,7 +8,7 @@ import { resetRightOverlayMode, setRightOverlayMode } from '../../../state/ducks
 import {
   useSelectedConversationDisappearingMode,
   useSelectedConversationKey,
-  useSelectedIsGroup,
+  useSelectedIsGroupOrCommunity,
   useSelectedIsKickedFromGroup,
   useSelectedIsNoteToSelf,
   useSelectedIsPublic,
@@ -42,7 +42,7 @@ export const ConversationHeaderTitle = () => {
   const isPublic = useSelectedIsPublic();
   const isKickedFromGroup = useSelectedIsKickedFromGroup();
   const isMe = useSelectedIsNoteToSelf();
-  const isGroup = useSelectedIsGroup();
+  const isGroup = useSelectedIsGroupOrCommunity();
   const members = useSelectedMembers();
 
   const expirationMode = useSelectedConversationDisappearingMode();
diff --git a/ts/components/conversation/message/message-content/MessageAuthorText.tsx b/ts/components/conversation/message/message-content/MessageAuthorText.tsx
index 1f9aecc68..4aedcaeb1 100644
--- a/ts/components/conversation/message/message-content/MessageAuthorText.tsx
+++ b/ts/components/conversation/message/message-content/MessageAuthorText.tsx
@@ -10,7 +10,7 @@ import {
   useMessageDirection,
 } from '../../../../state/selectors';
 import {
-  useSelectedIsGroup,
+  useSelectedIsGroupOrCommunity,
   useSelectedIsPublic,
 } from '../../../../state/selectors/selectedConversation';
 import { Flex } from '../../../basic/Flex';
@@ -28,7 +28,7 @@ const StyledAuthorContainer = styled(Flex)<{ hideAvatar: boolean }>`
 
 export const MessageAuthorText = (props: Props) => {
   const isPublic = useSelectedIsPublic();
-  const isGroup = useSelectedIsGroup();
+  const isGroup = useSelectedIsGroupOrCommunity();
   const authorProfileName = useAuthorProfileName(props.messageId);
   const authorName = useAuthorName(props.messageId);
   const sender = useMessageAuthor(props.messageId);
diff --git a/ts/components/conversation/message/message-content/MessageReactBar.tsx b/ts/components/conversation/message/message-content/MessageReactBar.tsx
index 2d7d0cad6..1be31cc7a 100644
--- a/ts/components/conversation/message/message-content/MessageReactBar.tsx
+++ b/ts/components/conversation/message/message-content/MessageReactBar.tsx
@@ -151,7 +151,7 @@ const ExpiresInItem = ({ expirationTimestamp }: { expirationTimestamp?: number |
 
   return (
     
-      
+      
       
       {formatTimeLeft({ timeLeftMs })}
     
diff --git a/ts/components/conversation/message/message-content/MessageReactions.tsx b/ts/components/conversation/message/message-content/MessageReactions.tsx
index 223c55188..0ce6a4fa1 100644
--- a/ts/components/conversation/message/message-content/MessageReactions.tsx
+++ b/ts/components/conversation/message/message-content/MessageReactions.tsx
@@ -4,7 +4,7 @@ import styled from 'styled-components';
 import { useMessageReactsPropsById } from '../../../../hooks/useParamSelector';
 import { MessageRenderingProps } from '../../../../models/messageType';
 import { REACT_LIMIT } from '../../../../session/constants';
-import { useSelectedIsGroup } from '../../../../state/selectors/selectedConversation';
+import { useSelectedIsGroupOrCommunity } from '../../../../state/selectors/selectedConversation';
 import { SortedReactionList } from '../../../../types/Reaction';
 import { nativeEmojiData } from '../../../../util/emoji';
 import { Flex } from '../../../basic/Flex';
@@ -175,7 +175,7 @@ export const MessageReactions = (props: Props) => {
 
   const msgProps = useMessageReactsPropsById(messageId);
 
-  const inGroup = useSelectedIsGroup();
+  const inGroup = useSelectedIsGroupOrCommunity();
 
   useEffect(() => {
     if (msgProps?.sortedReacts && !isEqual(reactions, msgProps?.sortedReacts)) {
diff --git a/ts/components/conversation/message/message-content/MessageStatus.tsx b/ts/components/conversation/message/message-content/MessageStatus.tsx
index 41b9386fb..d28a41ef7 100644
--- a/ts/components/conversation/message/message-content/MessageStatus.tsx
+++ b/ts/components/conversation/message/message-content/MessageStatus.tsx
@@ -6,7 +6,7 @@ import { useMessageExpirationPropsById } from '../../../../hooks/useParamSelecto
 import { useMessageStatus } from '../../../../state/selectors';
 
 import { getMostRecentMessageId } from '../../../../state/selectors/conversations';
-import { useSelectedIsGroup } from '../../../../state/selectors/selectedConversation';
+import { useSelectedIsGroupOrCommunity } from '../../../../state/selectors/selectedConversation';
 import { SpacerXS } from '../../../basic/Text';
 import { SessionIcon, SessionIconType } from '../../../icon';
 import { ExpireTimer } from '../../ExpireTimer';
@@ -179,7 +179,7 @@ function IconForExpiringMessageId({
 const MessageStatusSent = ({ dataTestId, messageId }: Omit) => {
   const isExpiring = useIsExpiring(messageId);
   const isMostRecentMessage = useIsMostRecentMessage(messageId);
-  const isGroup = useSelectedIsGroup();
+  const isGroup = useSelectedIsGroupOrCommunity();
 
   // we hide a "sent" message status which is not expiring except for the most recent message
   if (!isExpiring && !isMostRecentMessage) {
@@ -204,7 +204,7 @@ const MessageStatusRead = ({
   isIncoming,
 }: Omit & { isIncoming: boolean }) => {
   const isExpiring = useIsExpiring(messageId);
-  const isGroup = useSelectedIsGroup();
+  const isGroup = useSelectedIsGroupOrCommunity();
 
   const isMostRecentMessage = useIsMostRecentMessage(messageId);
 
@@ -231,7 +231,7 @@ const MessageStatusError = ({ dataTestId }: Omit) => {
     ipcRenderer.send('show-debug-log');
   }, []);
   // when on error, we do not display the expire timer at all.
-  const isGroup = useSelectedIsGroup();
+  const isGroup = useSelectedIsGroupOrCommunity();
 
   return (
     `
   display: -webkit-box;
@@ -61,7 +61,7 @@ export const QuoteText = (
 ) => {
   const { text, attachment, isIncoming, referencedMessageNotFound } = props;
 
-  const isGroup = useSelectedIsGroup();
+  const isGroup = useSelectedIsGroupOrCommunity();
 
   if (!referencedMessageNotFound && attachment && !isEmpty(attachment)) {
     const { contentType, isVoiceMessage } = attachment;
diff --git a/ts/components/conversation/right-panel/overlay/OverlayRightPanelSettings.tsx b/ts/components/conversation/right-panel/overlay/OverlayRightPanelSettings.tsx
index cab16bfee..29c72d811 100644
--- a/ts/components/conversation/right-panel/overlay/OverlayRightPanelSettings.tsx
+++ b/ts/components/conversation/right-panel/overlay/OverlayRightPanelSettings.tsx
@@ -30,7 +30,7 @@ import {
   useSelectedDisplayNameInProfile,
   useSelectedIsActive,
   useSelectedIsBlocked,
-  useSelectedIsGroup,
+  useSelectedIsGroupOrCommunity,
   useSelectedIsKickedFromGroup,
   useSelectedIsLeft,
   useSelectedIsPublic,
@@ -128,7 +128,7 @@ const HeaderItem = () => {
   const isBlocked = useSelectedIsBlocked();
   const isKickedFromGroup = useSelectedIsKickedFromGroup();
   const left = useSelectedIsLeft();
-  const isGroup = useSelectedIsGroup();
+  const isGroup = useSelectedIsGroupOrCommunity();
   const subscriberCount = useSelectedSubscriberCount();
 
   if (!selectedConvoKey) {
@@ -201,7 +201,7 @@ export const OverlayRightPanelSettings = () => {
   const isBlocked = useSelectedIsBlocked();
   const isKickedFromGroup = useSelectedIsKickedFromGroup();
   const left = useSelectedIsLeft();
-  const isGroup = useSelectedIsGroup();
+  const isGroup = useSelectedIsGroupOrCommunity();
   const isPublic = useSelectedIsPublic();
   const weAreAdmin = useSelectedWeAreAdmin();
   const disappearingMessagesSubtitle = useDisappearingMessageSettingText({
diff --git a/ts/components/conversation/right-panel/overlay/disappearing-messages/OverlayDisappearingMessages.tsx b/ts/components/conversation/right-panel/overlay/disappearing-messages/OverlayDisappearingMessages.tsx
index 8c50402d7..c4486540f 100644
--- a/ts/components/conversation/right-panel/overlay/disappearing-messages/OverlayDisappearingMessages.tsx
+++ b/ts/components/conversation/right-panel/overlay/disappearing-messages/OverlayDisappearingMessages.tsx
@@ -12,8 +12,8 @@ import {
   useSelectedConversationDisappearingMode,
   useSelectedConversationKey,
   useSelectedExpireTimer,
-  useSelectedIsGroup,
-  useSelectedWeAreAdmin,
+  useSelectedIsGroupOrCommunity,
+  useSelectedWeAreAdmin
 } from '../../../../../state/selectors/selectedConversation';
 import { ReleasedFeatures } from '../../../../../util/releaseFeature';
 import { Flex } from '../../../../basic/Flex';
@@ -114,7 +114,7 @@ export const OverlayDisappearingMessages = () => {
   const disappearingModeOptions = useSelector(getSelectedConversationExpirationModes);
   const { singleMode, hasOnlyOneMode } = useSingleMode(disappearingModeOptions);
 
-  const isGroup = useSelectedIsGroup();
+  const isGroup = useSelectedIsGroupOrCommunity();
   const expirationMode = useSelectedConversationDisappearingMode();
   const expireTimer = useSelectedExpireTimer();
   const weAreAdmin = useSelectedWeAreAdmin();
diff --git a/ts/components/dialog/SessionConfirm.tsx b/ts/components/dialog/SessionConfirm.tsx
index 550c8439e..27b5f691e 100644
--- a/ts/components/dialog/SessionConfirm.tsx
+++ b/ts/components/dialog/SessionConfirm.tsx
@@ -49,7 +49,7 @@ export interface SessionConfirmDialogProps {
    */
   onClickOk?: (...args: Array) => Promise | void;
 
-  onClickClose: () => any;
+  onClickClose?: () => any;
 
   /**
    * function to run on close click. Closes modal after execution by default
@@ -140,8 +140,8 @@ export const SessionConfirm = (props: SessionConfirmDialogProps) => {
    */
   const onClickCancelHandler = () => {
     onClickCancel?.();
-
     onClickClose?.();
+    window.inboxStore?.dispatch(updateConfirmModal(null));
   };
 
   return (
diff --git a/ts/components/icon/Icons.tsx b/ts/components/icon/Icons.tsx
index 78967591e..36a9c7ebb 100644
--- a/ts/components/icon/Icons.tsx
+++ b/ts/components/icon/Icons.tsx
@@ -62,7 +62,6 @@ export type SessionIconType =
   | 'shield'
   | 'star'
   | 'sun'
-  | 'stopwatch'
   | 'qr'
   | 'users'
   | 'warning'
@@ -71,6 +70,7 @@ export type SessionIconType =
   | 'gallery'
   | 'stop'
   | 'thumbnail'
+  | 'timerFixed'
   | 'timer00'
   | 'timer05'
   | 'timer10'
@@ -450,12 +450,6 @@ export const icons: Record {
+const getSelectedConversationType = (state: StateType): ConversationTypeEnum | null => {
+  const selected = getSelectedConversation(state);
+  if (!selected || !selected.type) {
+    return null;
+  }
+  return selected.type;
+};
+
+const getSelectedConversationIsGroupOrCommunity = (state: StateType): boolean => {
+  const type = getSelectedConversationType(state);
+  return type ? isOpenOrClosedGroup(type) : false;
+};
+
+const getSelectedConversationIsGroupV2 = (state: StateType): boolean => {
   const selected = getSelectedConversation(state);
   if (!selected || !selected.type) {
     return false;
   }
-  return selected.type ? isOpenOrClosedGroup(selected.type) : false;
+  return selected.type === ConversationTypeEnum.GROUPV3;
 };
 
 /**
@@ -232,8 +241,12 @@ export function useSelectedConversationKey() {
   return useSelector(getSelectedConversationKey);
 }
 
-export function useSelectedIsGroup() {
-  return useSelector(getSelectedConversationIsGroup);
+export function useSelectedIsGroupOrCommunity() {
+  return useSelector(getSelectedConversationIsGroupOrCommunity);
+}
+
+export function useSelectedIsGroupV2() {
+  return useSelector(getSelectedConversationIsGroupV2);
 }
 
 export function useSelectedIsPublic() {