diff --git a/examples/androidapp/src/org/appspot/apprtc/AppRTCAudioManager.java b/examples/androidapp/src/org/appspot/apprtc/AppRTCAudioManager.java
index c32ab96..00ffc9f 100644
--- a/examples/androidapp/src/org/appspot/apprtc/AppRTCAudioManager.java
+++ b/examples/androidapp/src/org/appspot/apprtc/AppRTCAudioManager.java
@@ -77,7 +77,7 @@
   // This device is changed automatically using a certain scheme where e.g.
   // a wired headset "wins" over speaker phone. It is also possible for a
   // user to explicitly select a device (and overrid any predefined scheme).
-  // See |userSelectedAudioDevice| for details.
+  // See `userSelectedAudioDevice` for details.
   private AudioDevice selectedAudioDevice;
 
   // Contains the user-selected audio device which overrides the predefined
@@ -216,7 +216,7 @@
     // Create an AudioManager.OnAudioFocusChangeListener instance.
     audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
       // Called on the listener to notify if the audio focus for this listener has been changed.
-      // The |focusChange| value indicates whether the focus was gained, whether the focus was lost,
+      // The `focusChange` value indicates whether the focus was gained, whether the focus was lost,
       // and whether that loss is transient, or whether the new focus holder will hold it for an
       // unknown amount of time.
       // TODO(henrika): possibly extend support of handling audio-focus changes. Only contains
@@ -573,7 +573,7 @@
     } else {
       // No wired headset and no Bluetooth, hence the audio-device list can contain speaker
       // phone (on a tablet), or speaker phone and earpiece (on mobile phone).
-      // |defaultAudioDevice| contains either AudioDevice.SPEAKER_PHONE or AudioDevice.EARPIECE
+      // `defaultAudioDevice` contains either AudioDevice.SPEAKER_PHONE or AudioDevice.EARPIECE
       // depending on the user's selection.
       newAudioDevice = defaultAudioDevice;
     }
diff --git a/examples/androidapp/src/org/appspot/apprtc/AppRTCBluetoothManager.java b/examples/androidapp/src/org/appspot/apprtc/AppRTCBluetoothManager.java
index 936b549..cb482e8 100644
--- a/examples/androidapp/src/org/appspot/apprtc/AppRTCBluetoothManager.java
+++ b/examples/androidapp/src/org/appspot/apprtc/AppRTCBluetoothManager.java
@@ -364,7 +364,7 @@
    * Use the BluetoothHeadset proxy object (controls the Bluetooth Headset
    * Service via IPC) to update the list of connected devices for the HEADSET
    * profile. The internal state will change to HEADSET_UNAVAILABLE or to
-   * HEADSET_AVAILABLE and |bluetoothDevice| will be mapped to the connected
+   * HEADSET_AVAILABLE and `bluetoothDevice` will be mapped to the connected
    * device if available.
    */
   public void updateDevice() {
diff --git a/examples/androidapp/src/org/appspot/apprtc/AppRTCClient.java b/examples/androidapp/src/org/appspot/apprtc/AppRTCClient.java
index 5487fba..d5b7b43 100644
--- a/examples/androidapp/src/org/appspot/apprtc/AppRTCClient.java
+++ b/examples/androidapp/src/org/appspot/apprtc/AppRTCClient.java
@@ -100,7 +100,7 @@
   /**
    * Callback interface for messages delivered on signaling channel.
    *
-   * <p>Methods are guaranteed to be invoked on the UI thread of |activity|.
+   * <p>Methods are guaranteed to be invoked on the UI thread of `activity`.
    */
   interface SignalingEvents {
     /**
diff --git a/examples/androidapp/src/org/appspot/apprtc/AppRTCProximitySensor.java b/examples/androidapp/src/org/appspot/apprtc/AppRTCProximitySensor.java
index a29b7ef..b2aca95 100644
--- a/examples/androidapp/src/org/appspot/apprtc/AppRTCProximitySensor.java
+++ b/examples/androidapp/src/org/appspot/apprtc/AppRTCProximitySensor.java
@@ -34,8 +34,8 @@
   private static final String TAG = "AppRTCProximitySensor";
 
   // This class should be created, started and stopped on one thread
-  // (e.g. the main thread). We use |nonThreadSafe| to ensure that this is
-  // the case. Only active when |DEBUG| is set to true.
+  // (e.g. the main thread). We use `nonThreadSafe` to ensure that this is
+  // the case. Only active when `DEBUG` is set to true.
   private final ThreadUtils.ThreadChecker threadChecker = new ThreadUtils.ThreadChecker();
 
   private final Runnable onSensorStateListener;
diff --git a/examples/androidapp/src/org/appspot/apprtc/CallActivity.java b/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
index 10d2b6e..5293963 100644
--- a/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
+++ b/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
@@ -676,7 +676,7 @@
     }
   }
 
-  // Log |msg| and Toast about it.
+  // Log `msg` and Toast about it.
   private void logAndToast(String msg) {
     Log.d(TAG, msg);
     if (logToast != null) {
diff --git a/examples/androidapp/src/org/appspot/apprtc/DirectRTCClient.java b/examples/androidapp/src/org/appspot/apprtc/DirectRTCClient.java
index 05b6edb..023c2c2 100644
--- a/examples/androidapp/src/org/appspot/apprtc/DirectRTCClient.java
+++ b/examples/androidapp/src/org/appspot/apprtc/DirectRTCClient.java
@@ -320,7 +320,7 @@
     });
   }
 
-  // Put a |key|->|value| mapping in |json|.
+  // Put a `key`->`value` mapping in `json`.
   private static void jsonPut(JSONObject json, String key, Object value) {
     try {
       json.put(key, value);
diff --git a/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java b/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
index b3282a6..533d178 100644
--- a/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
+++ b/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
@@ -322,7 +322,7 @@
 
   /**
    * Create a PeerConnectionClient with the specified parameters. PeerConnectionClient takes
-   * ownership of |eglBase|.
+   * ownership of `eglBase`.
    */
   public PeerConnectionClient(Context appContext, EglBase eglBase,
       PeerConnectionParameters peerConnectionParameters, PeerConnectionEvents events) {
@@ -620,7 +620,7 @@
     isInitiator = false;
 
     // Set INFO libjingle logging.
-    // NOTE: this _must_ happen while |factory| is alive!
+    // NOTE: this _must_ happen while `factory` is alive!
     Logging.enableLogToDebugOutput(Logging.Severity.LS_INFO);
 
     List<String> mediaStreamLabels = Collections.singletonList("ARDAMS");
@@ -1115,7 +1115,7 @@
     final List<String> unpreferredPayloadTypes =
         new ArrayList<>(origLineParts.subList(3, origLineParts.size()));
     unpreferredPayloadTypes.removeAll(preferredPayloadTypes);
-    // Reconstruct the line with |preferredPayloadTypes| moved to the beginning of the payload
+    // Reconstruct the line with `preferredPayloadTypes` moved to the beginning of the payload
     // types.
     final List<String> newLineParts = new ArrayList<>();
     newLineParts.addAll(header);
@@ -1131,7 +1131,7 @@
       Log.w(TAG, "No mediaDescription line, so can't prefer " + codec);
       return sdp;
     }
-    // A list with all the payload types with name |codec|. The payload types are integers in the
+    // A list with all the payload types with name `codec`. The payload types are integers in the
     // range 96-127, but they are stored as strings here.
     final List<String> codecPayloadTypes = new ArrayList<>();
     // a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encoding parameters>]
diff --git a/examples/androidapp/src/org/appspot/apprtc/UnhandledExceptionHandler.java b/examples/androidapp/src/org/appspot/apprtc/UnhandledExceptionHandler.java
index 0b944dc..b256400 100644
--- a/examples/androidapp/src/org/appspot/apprtc/UnhandledExceptionHandler.java
+++ b/examples/androidapp/src/org/appspot/apprtc/UnhandledExceptionHandler.java
@@ -66,7 +66,7 @@
     });
   }
 
-  // Returns the Message attached to the original Cause of |t|.
+  // Returns the Message attached to the original Cause of `t`.
   private static String getTopLevelCauseMessage(Throwable t) {
     Throwable topLevelCause = t;
     while (topLevelCause.getCause() != null) {
@@ -75,8 +75,8 @@
     return topLevelCause.getMessage();
   }
 
-  // Returns a human-readable String of the stacktrace in |t|, recursively
-  // through all Causes that led to |t|.
+  // Returns a human-readable String of the stacktrace in `t`, recursively
+  // through all Causes that led to `t`.
   private static String getRecursiveStackTrace(Throwable t) {
     StringWriter writer = new StringWriter();
     t.printStackTrace(new PrintWriter(writer));
diff --git a/examples/androidapp/src/org/appspot/apprtc/WebSocketRTCClient.java b/examples/androidapp/src/org/appspot/apprtc/WebSocketRTCClient.java
index 930f0ee..13840c5 100644
--- a/examples/androidapp/src/org/appspot/apprtc/WebSocketRTCClient.java
+++ b/examples/androidapp/src/org/appspot/apprtc/WebSocketRTCClient.java
@@ -368,7 +368,7 @@
     });
   }
 
-  // Put a |key|->|value| mapping in |json|.
+  // Put a `key`->`value` mapping in `json`.
   private static void jsonPut(JSONObject json, String key, Object value) {
     try {
       json.put(key, value);
diff --git a/examples/objc/AppRTCMobile/ARDAppClient.h b/examples/objc/AppRTCMobile/ARDAppClient.h
index 8e124ed..91d2cef 100644
--- a/examples/objc/AppRTCMobile/ARDAppClient.h
+++ b/examples/objc/AppRTCMobile/ARDAppClient.h
@@ -63,7 +63,7 @@
 // class should only be called from the main queue.
 @interface ARDAppClient : NSObject
 
-// If |shouldGetStats| is true, stats will be reported in 1s intervals through
+// If `shouldGetStats` is true, stats will be reported in 1s intervals through
 // the delegate.
 @property(nonatomic, assign) BOOL shouldGetStats;
 @property(nonatomic, readonly) ARDAppClientState state;
@@ -75,8 +75,8 @@
 - (instancetype)initWithDelegate:(id<ARDAppClientDelegate>)delegate;
 
 // Establishes a connection with the AppRTC servers for the given room id.
-// |settings| is an object containing settings such as video codec for the call.
-// If |isLoopback| is true, the call will connect to itself.
+// `settings` is an object containing settings such as video codec for the call.
+// If `isLoopback` is true, the call will connect to itself.
 - (void)connectToRoomWithId:(NSString *)roomId
                    settings:(ARDSettingsModel *)settings
                  isLoopback:(BOOL)isLoopback;
diff --git a/examples/objc/AppRTCMobile/ARDAppClient.m b/examples/objc/AppRTCMobile/ARDAppClient.m
index fa6a960..04e17ea 100644
--- a/examples/objc/AppRTCMobile/ARDAppClient.m
+++ b/examples/objc/AppRTCMobile/ARDAppClient.m
@@ -64,7 +64,7 @@
 static int const kKbpsMultiplier = 1000;
 
 // We need a proxy to NSTimer because it causes a strong retain cycle. When
-// using the proxy, |invalidate| must be called before it properly deallocs.
+// using the proxy, `invalidate` must be called before it properly deallocs.
 @interface ARDTimerProxy : NSObject
 
 - (instancetype)initWithInterval:(NSTimeInterval)interval
diff --git a/examples/objc/AppRTCMobile/ios/ARDMainView.m b/examples/objc/AppRTCMobile/ios/ARDMainView.m
index c3bd24a..d952106 100644
--- a/examples/objc/AppRTCMobile/ios/ARDMainView.m
+++ b/examples/objc/AppRTCMobile/ios/ARDMainView.m
@@ -64,7 +64,7 @@
 
 - (BOOL)textFieldShouldReturn:(UITextField *)textField {
   // There is no other control that can take focus, so manually resign focus
-  // when return (Join) is pressed to trigger |textFieldDidEndEditing|.
+  // when return (Join) is pressed to trigger `textFieldDidEndEditing`.
   [textField resignFirstResponder];
   return YES;
 }
diff --git a/examples/peerconnection/server/data_socket.h b/examples/peerconnection/server/data_socket.h
index bafa5d3..57ad5b9 100644
--- a/examples/peerconnection/server/data_socket.h
+++ b/examples/peerconnection/server/data_socket.h
@@ -99,14 +99,14 @@
   // Send a raw buffer of bytes.
   bool Send(const std::string& data) const;
 
-  // Send an HTTP response.  The |status| should start with a valid HTTP
+  // Send an HTTP response.  The `status` should start with a valid HTTP
   // response code, followed by a string.  E.g. "200 OK".
-  // If |connection_close| is set to true, an extra "Connection: close" HTTP
-  // header will be included.  |content_type| is the mime content type, not
+  // If `connection_close` is set to true, an extra "Connection: close" HTTP
+  // header will be included.  `content_type` is the mime content type, not
   // including the "Content-Type: " string.
-  // |extra_headers| should be either empty or a list of headers where each
+  // `extra_headers` should be either empty or a list of headers where each
   // header terminates with "\r\n".
-  // |data| is the body of the message.  It's length will be specified via
+  // `data` is the body of the message.  It's length will be specified via
   // a "Content-Length" header.
   bool Send(const std::string& status,
             bool connection_close,
diff --git a/examples/peerconnection/server/peer_channel.h b/examples/peerconnection/server/peer_channel.h
index c3bb1ad..c362490 100644
--- a/examples/peerconnection/server/peer_channel.h
+++ b/examples/peerconnection/server/peer_channel.h
@@ -80,7 +80,7 @@
   // request.  Otherwise the request is not peerconnection related.
   static bool IsPeerConnection(const DataSocket* ds);
 
-  // Finds a connected peer that's associated with the |ds| socket.
+  // Finds a connected peer that's associated with the `ds` socket.
   ChannelMember* Lookup(DataSocket* ds) const;
 
   // Checks if the request has a "peer_id" parameter and if so, looks up the
