diff --git a/pixmaps/fallbackavatar.svg b/pixmaps/fallbackavatar.svg
new file mode 100644
index 0000000..f8b6a6e
--- /dev/null
+++ b/pixmaps/fallbackavatar.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" ?>
+<svg height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg">
+  <path d="M8.013766 23.107838l0.00465 -0.810382 0.033095 -0.133474c0.1495327 -0.603099 0.50107 -1.099452 1.1411917 -1.611311 0.1690725 -0.135195 0.5493165 -0.388522 0.7866284 -0.524069 1.4449359 -0.825313 3.6497829 -1.439907 5.5693029 -1.552424 0.268992 -0.01577 0.866138 -0.0085 1.131356 0.01373 1.873734 0.157215 3.884055 0.729268 5.262712 1.497544 1.031356 0.574739 1.70347 1.254543 1.937152 1.959316 0.101301 0.305518 0.100213 0.293393 0.105924 1.180132l0.0051 0.791314 -7.990878 0 -7.990878 0 0.00465 -0.810381z" fill="#ffffff"/>
+  <path d="M15.641818 15.906151c-0.512638 -0.04757 -0.970838 -0.177847 -1.424519 -0.40503 -0.534623 -0.267715 -0.972855 -0.622072 -1.344489 -1.087162 -0.500329 -0.626146 -0.797007 -1.385268 -0.858271 -2.196087 -0.01377 -0.182277 -0.0068 -0.568261 0.01341 -0.738308 0.137062 -1.155519 0.73576 -2.1602655 1.685808 -2.8291565 1.010233 -0.711264 2.333521 -0.90809 3.519055 -0.523424 0.511977 0.166119 0.9845 0.434474 1.39324 0.791249 0.103105 0.09 0.316993 0.304905 0.402137 0.404056 0.848222 0.9877635 1.16007 2.3144245 0.843044 3.5864705 -0.116312 0.466694 -0.339476 0.947863 -0.621858 1.340798 -0.695617 0.967955 -1.761735 1.568261 -2.95044 1.661324 -0.155481 0.01217 -0.501821 0.0097 -0.657113 -0.0047z" fill="#ffffff"/>
+</svg>
diff --git a/pixmaps/pixmaps.gresource.xml b/pixmaps/pixmaps.gresource.xml
index da6f6d8..6f66dc5 100644
--- a/pixmaps/pixmaps.gresource.xml
+++ b/pixmaps/pixmaps.gresource.xml
@@ -32,5 +32,6 @@
     <file alias="invite">ic_person_add_black_24px.svg</file>
     <file alias="temporary-item">ic_search_black_48px.svg</file>
     <file alias="audio_only_call_start">ic_call_black_24px.svg</file>
+    <file alias="fallbackavatar">fallbackavatar.svg</file>
   </gresource>
 </gresources>
diff --git a/src/native/pixbufmanipulator.cpp b/src/native/pixbufmanipulator.cpp
index 5b1df61..2b5b6f3 100644
--- a/src/native/pixbufmanipulator.cpp
+++ b/src/native/pixbufmanipulator.cpp
@@ -37,7 +37,6 @@
 #include <api/account.h>
 #include <api/contact.h>
 
-
 namespace Interfaces {
 
 PixbufManipulator::PixbufManipulator()
@@ -66,21 +65,19 @@
 PixbufManipulator::generateAvatar(const ContactMethod* cm) const
 {
     auto cm_number = QString("0");
-    auto letter = QChar('?'); // R for ring
+    QString bestName;
     if (cm) {
         auto hashName = cm->uri().userinfo();
         if (hashName.size() > 0) {
             cm_number = hashName.at(0);
         }
-        // Get the letter to draw
+        // Get the bestName to draw
         if (!cm->bestName().isEmpty()) {
             // Prioritize the name
-            letter = cm->bestName().toUpper().at(0);
+            bestName = cm->bestName().toUpper();
         } else if (!cm->bestId().isEmpty()) {
             // If the contact has no name, use the id
-            letter = cm->bestId().toUpper().at(0);
-        } else {
-            // R for ring is used
+            bestName = cm->bestId().toUpper();
         }
     }
 
@@ -88,22 +85,27 @@
     auto color = cm_number.toUInt(&ok, 16);
     if (!ok) color = 0;
 
+    // Retrieve first character
+    auto letter = bestName.isEmpty() ? "" : QString(bestName.at(0)).toStdString();
+
     return std::shared_ptr<GdkPixbuf> {
         ring_draw_fallback_avatar(
             FALLBACK_AVATAR_SIZE,
-            letter.toLatin1(),
+            letter,
             color
         ),
         g_object_unref
     };
+
 }
 
 std::shared_ptr<GdkPixbuf>
 PixbufManipulator::generateAvatar(const std::string& alias, const std::string& uri) const
 {
     auto name = alias;
-    std::transform(name.begin(), name.end(), name.begin(), ::toupper);
-    auto letter = name.length() > 0 ? name[0] : '?';
+    std::string letter = {};
+    if (!name.empty())
+        letter = QString(QString(name.c_str()).toUpper().at(0)).toStdString();
     auto color = 0;
     try {
         color = uri.length() > 0 ? std::stoi(std::string(1, uri[0]), 0, 16) : 0;
diff --git a/src/utils/drawing.cpp b/src/utils/drawing.cpp
index b2932ff..b5756e0 100644
--- a/src/utils/drawing.cpp
+++ b/src/utils/drawing.cpp
@@ -49,7 +49,7 @@
                                                 {0.376470, 0.490196, 0.545098, 1.0}};// red 95, green 124, blue 138, 1 (blue grey)
 
 GdkPixbuf *
-ring_draw_fallback_avatar(int size, const char letter, const char color) {
+ring_draw_fallback_avatar(int size, const std::string& letter, const char color) {
     cairo_surface_t *surface;
     cairo_t *cr;
 
@@ -60,18 +60,27 @@
     cairo_set_source_rgb (cr, bg_color.red, bg_color.green, bg_color.blue);
     cairo_paint(cr);
 
-    // Draw a letter at the center of the avatar
-    cairo_text_extents_t extents;
-    cairo_select_font_face (cr, "monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
-    cairo_set_font_size(cr, size / 2);
-    cairo_set_source_rgb (cr, 1, 1, 1);
-    char first_letter[2] = {0};
-    first_letter[0] = letter;
-    cairo_text_extents (cr, first_letter, &extents);
-    auto x = size/2-(extents.width/2 + extents.x_bearing);
-    auto y = size/2-(extents.height/2 + extents.y_bearing);
-    cairo_move_to (cr, x, y);
-    cairo_show_text(cr, first_letter);
+    if (!letter.empty()) {
+        // Draw a letter at the center of the avatar
+        cairo_text_extents_t extents;
+        cairo_select_font_face(cr, "monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
+        cairo_set_font_size(cr, size / 2);
+        cairo_set_source_rgb(cr, 1, 1, 1);
+        cairo_text_extents(cr, letter.c_str(), &extents);
+        auto x = size/2-(extents.width/2 + extents.x_bearing);
+        auto y = size/2-(extents.height/2 + extents.y_bearing);
+        cairo_move_to(cr, x, y);
+        cairo_show_text(cr, letter.c_str());
+    } else {
+        // Compose from fallback svg if no letter found
+        GError *error = nullptr;
+        auto* finalAvatar = gdk_pixbuf_get_from_surface(cairo_get_target(cr), 0, 0, size, size);
+        auto* fallbackavatar = gdk_pixbuf_new_from_resource_at_scale("/cx/ring/RingGnome/fallbackavatar", size, size, true, &error);
+        gdk_pixbuf_composite (fallbackavatar, finalAvatar, 0, 0, size, size, 0, 0, 1, 1, GDK_INTERP_BILINEAR, 0xff);
+
+        return finalAvatar;
+    }
+
 
     GdkPixbuf *pixbuf = gdk_pixbuf_get_from_surface(cairo_get_target(cr), 0, 0, size, size);
 
@@ -119,8 +128,6 @@
     return pixbuf;
 }
 
-#include <iostream>
-
 GdkPixbuf *
 ring_frame_avatar(GdkPixbuf *avatar) {
 
diff --git a/src/utils/drawing.h b/src/utils/drawing.h
index 7c9ef6d..e5d8d48 100644
--- a/src/utils/drawing.h
+++ b/src/utils/drawing.h
@@ -21,8 +21,9 @@
 #define _DRAWING_H
 
 #include <gtk/gtk.h>
+#include <string>
 
-GdkPixbuf *ring_draw_fallback_avatar(int size, const char letter, const char color = 0);
+GdkPixbuf *ring_draw_fallback_avatar(int size, const std::string& letter, const char color = 0);
 
 GdkPixbuf *ring_draw_conference_avatar(int size);
 
