   }
 }
 
+void asteriskHandler(telephone::ButtonState buttonState) {
+  if (buttonState == PRESSED) {
+    Serial.println("Asterisk pressed");
+    addSymbolToPhoneNumber("*");
+  }
+}
+
+void numberSignHandler(telephone::ButtonState buttonState) {
+  if (buttonState == PRESSED) {
+    Serial.println("Number sign pressed");
+    addSymbolToPhoneNumber("#");
+  }
+}
+
+void plusHandler(telephone::ButtonState buttonState) {
+  if (buttonState == PRESSED) {
+    Serial.println("Plus pressed");
+    addSymbolToPhoneNumber("+");
+  }
+}
+
+void addSymbolToPhoneNumber(String symbol) {
+  if (isGettingPhoneNumber && (!isGettingDigit)) {
+    phoneNumber += symbol;
+    if (isTalking) {
+        sendDigit();
+    }
+  }
+}
+
 // Adaptered for Russian Beeline operator.
 // Modify this function for your country or operator.
 boolean isValidPhoneNumber() {

  pinMode(HANDSET_PIN, INPUT);
  pinMode(ROTATE_PIN, INPUT);
  pinMode(COUNTER_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
  pinMode(AUTO_START_GSM_PIN, OUTPUT);
  delay(100);

  buttonHandset.setHandler(pickedUpHandler);
  buttonRotate.setHandler(rotatingHandler);
  buttonCounter.setHandler(rotaryCounterHandler);
  buttonAsterisk.setHandler(asteriskHandler);
  buttonNumberSign.setHandler(numberSignHandler);
  buttonPlus.setHandler(plusHandler);
  
  Serial.print("Connecting..");
  while (true) {
