diff --git a/.gitignore b/.gitignore
index b8bd026..d00fbd1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,30 @@
 *.exe
 *.out
 *.app
+
+# Qt-es
+
+/.qmake.cache
+/.qmake.stash
+*.pro.user
+*.pro.user.*
+*.qbs.user
+*.qbs.user.*
+*.moc
+moc_*.cpp
+qrc_*.cpp
+ui_*.h
+Makefile*
+*-build-*
+
+# QtCreator
+
+*.autosave
+
+#QtCtreator Qml
+*.qmlproject.user
+*.qmlproject.user.*
+
+build/
+lib
+.DS_Store
diff --git a/Ring.pro b/Ring.pro
new file mode 100644
index 0000000..fd92b74
--- /dev/null
+++ b/Ring.pro
@@ -0,0 +1,26 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2014-12-02T09:49:01
+#
+#-------------------------------------------------
+
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = Ring
+TEMPLATE = app
+
+CONFIG += c++11
+
+SOURCES += main.cpp\
+        mainwindow.cpp
+
+HEADERS  += mainwindow.h
+
+FORMS    += mainwindow.ui
+
+macx: LIBS += -L$$PWD/build/ -lqtsflphone
+
+INCLUDEPATH += $$PWD/../sflphone/kde/src/lib
+DEPENDPATH += $$PWD/../sflphone/kde/src/lib
diff --git a/cantarell/Cantarell-Bold.ttf b/cantarell/Cantarell-Bold.ttf
new file mode 100755
index 0000000..a4fe14e
--- /dev/null
+++ b/cantarell/Cantarell-Bold.ttf
Binary files differ
diff --git a/cantarell/Cantarell-BoldOblique.ttf b/cantarell/Cantarell-BoldOblique.ttf
new file mode 100755
index 0000000..e28e364
--- /dev/null
+++ b/cantarell/Cantarell-BoldOblique.ttf
Binary files differ
diff --git a/cantarell/Cantarell-Oblique.ttf b/cantarell/Cantarell-Oblique.ttf
new file mode 100755
index 0000000..2330ccd
--- /dev/null
+++ b/cantarell/Cantarell-Oblique.ttf
Binary files differ
diff --git a/cantarell/Cantarell-Regular.ttf b/cantarell/Cantarell-Regular.ttf
new file mode 100755
index 0000000..ff7a11d
--- /dev/null
+++ b/cantarell/Cantarell-Regular.ttf
Binary files differ
diff --git a/cantarell/SIL Open Font License.txt b/cantarell/SIL Open Font License.txt
new file mode 100755
index 0000000..14c043d
--- /dev/null
+++ b/cantarell/SIL Open Font License.txt
@@ -0,0 +1,41 @@
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
+
+"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.
+
+5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
\ No newline at end of file
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000..d4f4123
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,13 @@
+#include "mainwindow.h"
+#include <QApplication>
+
+
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    MainWindow w;
+    w.show();
+
+    return a.exec();
+}
diff --git a/mainwindow.cpp b/mainwindow.cpp
new file mode 100644
index 0000000..e67c779
--- /dev/null
+++ b/mainwindow.cpp
@@ -0,0 +1,42 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+
+
+MainWindow::MainWindow(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::MainWindow)
+{
+    ui->setupUi(this);
+
+    mainAccount_ = AccountModel::currentAccount();
+    callModel_ = CallModel::instance();
+
+    QObject::connect(callModel_, SIGNAL(callStateChanged(Call*, Call::State)),
+        this, SLOT(on_state_changed(Call*, Call::State)));
+
+    connect(&pollTimer_, SIGNAL(timeout()), this, SLOT(pollEvents()));
+    pollTimer_.start(1000);
+}
+
+MainWindow::~MainWindow()
+{
+    delete ui;
+}
+
+
+
+//// SLOTS ////
+
+void MainWindow::on_pushButton_clicked()
+{
+    mainCall_ = CallModel::instance()->dialingCall();
+    mainCall_->setDialNumber(ui->call_number->text());
+    mainCall_->performAction(Call::Action::ACCEPT);
+}
+
+void MainWindow::on_state_changed(Call *call, Call::State previousState)
+{
+    qDebug() << "on state changed!" << endl;
+}
+
diff --git a/mainwindow.h b/mainwindow.h
new file mode 100644
index 0000000..363a954
--- /dev/null
+++ b/mainwindow.h
@@ -0,0 +1,48 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QString>
+#include <QDebug>
+#include <QMainWindow>
+#include <QTimer>
+
+#include <memory>
+
+#include <account.h>
+#include <accountmodel.h>
+#include <call.h>
+#include <callmodel.h>
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit MainWindow(QWidget *parent = 0);
+    ~MainWindow();
+
+private slots:
+    void on_pushButton_clicked();
+    void on_state_changed(Call* call, Call::State previousState);
+
+private slots:
+    void pollEvents() {
+        qDebug() << "Poll Events?";
+        AccountModel::currentAccount()->poll_events();
+    }
+
+private:
+    Ui::MainWindow *ui;
+    CallModel* callModel_;
+    Call* mainCall_;
+    Account* mainAccount_;
+    QString savedNumber_;
+
+    QTimer pollTimer_;
+};
+
+#endif // MAINWINDOW_H
diff --git a/mainwindow.ui b/mainwindow.ui
new file mode 100644
index 0000000..fd16012
--- /dev/null
+++ b/mainwindow.ui
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>326</width>
+    <height>207</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralWidget">
+   <layout class="QVBoxLayout" name="verticalLayout">
+    <item>
+     <spacer name="verticalSpacer_3">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>17</width>
+        <height>0</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item>
+     <widget class="QLineEdit" name="call_number">
+      <property name="text">
+       <string>192.168.49.103</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QPushButton" name="pushButton">
+      <property name="text">
+       <string>Call</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <spacer name="verticalSpacer">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>17</width>
+        <height>1</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item>
+     <widget class="QPushButton" name="pushButton_3">
+      <property name="text">
+       <string>Answer</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QPushButton" name="pushButton_2">
+      <property name="text">
+       <string>Hang up</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <spacer name="verticalSpacer_2">
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeHint" stdset="0">
+       <size>
+        <width>17</width>
+        <height>0</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menuBar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>326</width>
+     <height>22</height>
+    </rect>
+   </property>
+  </widget>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>call_number</sender>
+   <signal>returnPressed()</signal>
+   <receiver>pushButton</receiver>
+   <slot>animateClick()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>160</x>
+     <y>70</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>116</x>
+     <y>98</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
