diff --git a/Ccs/ccs.py b/Ccs/ccs.py
index 3220f5d93acaf34550dcc6c0d2dc13834573ef76..16923abfffbf8a4b8183cb1f2aa95d723ef2e9bf 100755
--- a/Ccs/ccs.py
+++ b/Ccs/ccs.py
@@ -1,55 +1,62 @@
 #!/usr/bin/env python3
 
 import sys
-import os
 import editor
-import signal
-import dbus
 import gi
 import DBus_Basic
 gi.require_version('Gtk', '3.0')
-from gi.repository import Gtk,GLib
+from gi.repository import Gtk, GLib
 from dbus.mainloop.glib import DBusGMainLoop
-import ccs_function_lib as cfl
-#from pydbus import SessionBus
 
+import ccs_function_lib as cfl
 import confignator
+
 cfg = confignator.get_config()
 
-# t = threading.Thread(target=embed_kernel)
-# t.daemon = True
-# t.start()
-win = editor.CcsEditor()
-#cfl.start_editor()
-
-if cfg.has_option('init', 'init_script'):
-    init_script = cfg.get('init', 'init_script')
-    if init_script != '':
-        init_cmd = 'exec(open("{}","r").read())\n'.format(init_script)
-        # win.ipython_view.text_buffer.insert_at_cursor(init_cmd, len(init_cmd))
-        # win.ipython_view._processLine()
-        win.ipython_view.feed_child(init_cmd, len(init_cmd))
-
-given_cfg = None
-for i in sys.argv:
-    if i.endswith('.cfg'):
-        given_cfg = i
-if given_cfg:
-    cfg = confignator.get_config(file_path=given_cfg)
-else:
-    cfg = confignator.get_config(file_path=confignator.get_option('config-files', 'ccs'))
-# pv = TMPoolView(cfg)
-DBusGMainLoop(set_as_default=True)
-if len(sys.argv) > 1:
-    for fname in sys.argv[1:]:
-        if not fname.startswith('-'):
-            win.open_file(fname)
-else:
-    win.open_file(os.path.join(confignator.get_option('paths', 'ccs'), 'getting_started.py'))
-
-Bus_Name = cfg.get('ccs-dbus_names', 'editor')
-
-DBus_Basic.MessageListener(win, Bus_Name, *sys.argv)
-
-Gtk.main()
 
+def run():
+    global cfg
+
+    win = editor.CcsEditor()
+    # cfl.start_editor()
+
+    if cfg.has_option('init', 'init_script'):
+        init_script = cfg.get('init', 'init_script')
+        if init_script != '':
+            init_cmd = 'exec(open("{}","r").read())\n'.format(init_script)
+            # win.ipython_view.text_buffer.insert_at_cursor(init_cmd, len(init_cmd))
+            # win.ipython_view._processLine()
+            win.ipython_view.feed_child(init_cmd, len(init_cmd))
+
+    given_cfg = None
+    for i in sys.argv:
+        if i.endswith('.cfg'):
+            given_cfg = i
+    if given_cfg:
+        cfg = confignator.get_config(file_path=given_cfg)
+    else:
+        cfg = confignator.get_config(file_path=confignator.get_option('config-files', 'ccs'))
+    # pv = TMPoolView(cfg)
+    DBusGMainLoop(set_as_default=True)
+    if len(sys.argv) > 1:
+        for fname in sys.argv[1:]:
+            if not fname.startswith('-'):
+                win.open_file(fname)
+    else:
+        win.open_file('getting_started.py')
+
+    Bus_Name = cfg.get('ccs-dbus_names', 'editor')
+
+    DBus_Basic.MessageListener(win, Bus_Name, *sys.argv)
+
+
+if __name__ == "__main__":
+
+    if '--quickstart' not in sys.argv:
+        cfl.ProjectDialog()
+        Gtk.main()
+    else:
+        sys.argv.remove('--quickstart')
+
+    run()
+    Gtk.main()
diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py
index b4c06121d66b8627b5c22f0227681619c5a011eb..98700889d913312d011e7eee396fac5d1ec4c028 100644
--- a/Ccs/ccs_function_lib.py
+++ b/Ccs/ccs_function_lib.py
@@ -4,23 +4,24 @@ gi.require_version('Notify', '0.7')
 from gi.repository import Gtk, GLib, Notify, GdkPixbuf
 import subprocess
 import struct
-import configparser
+# import configparser
 import crcmod
 import datetime
 import dateutil.parser as duparser
 import io
-import itertools
+# import itertools
 import types
 import sys
-import threading
-import queue
+# import threading
+# import queue
 import select
-import traceback
+# import traceback
 import json
 import time
 import dbus
 import socket
 import os
+import glob
 import numpy as np
 import logging.handlers
 from database.tm_db import scoped_session_maker, DbTelemetry, DbTelemetryPool, RMapTelemetry, FEEDataTelemetry
@@ -29,6 +30,7 @@ from sqlalchemy.sql.expression import func
 from s2k_partypes import ptt, ptype_parameters, ptype_values
 import confignator
 import importlib
+
 #check_cfg = configparser.ConfigParser()
 #check_cfg.read('egse.cfg')
 #check_cfg.source = 'egse.cfg'
@@ -90,6 +92,8 @@ fmtlengthlist = {'b': 1, 'B': 1, 'h': 2, 'H': 2, 'i': 4, 'I': 4, 'q': 8,
 scoped_session_idb = scoped_session_maker('idb', idb_version=None)
 scoped_session_storage = scoped_session_maker('storage')
 
+PCPREFIX = 'packet_config_'
+
 Notify.init('cfl')
 
 
@@ -4286,3 +4290,92 @@ class ChangeCommunicationDialog(Gtk.Dialog):
         main_box.pack_start(self.change_button, 0, 0, 0)
 
         return main_box
+
+
+class ProjectDialog(Gtk.Dialog):
+    """
+    Dialog that pops up at CCS/TST startup to allow for project and IDB configuration
+    """
+
+    def __init__(self):
+        super(ProjectDialog, self).__init__()
+
+        self.set_title('Project configuration')
+        self.set_default_size(300, 100)
+
+        self.project_selection = self._create_project_selection()
+        self.idb_selection = self._create_idb_selection()
+
+        ca = self.get_content_area()
+        ca.set_spacing(2)
+
+        project_label = Gtk.Label('Project')
+        project_label.set_size_request(80, -1)
+        project_label.set_xalign(0)
+        project_box = Gtk.Box(Gtk.Orientation.HORIZONTAL)
+        project_box.pack_start(project_label, 0, 0, 10)
+        project_box.pack_start(self.project_selection, 1, 1, 0)
+        ca.add(project_box)
+
+        idb_label = Gtk.Label('IDB schema')
+        idb_label.set_size_request(80, -1)
+        idb_label.set_xalign(0)
+        idb_box = Gtk.Box(Gtk.Orientation.HORIZONTAL)
+        idb_box.pack_start(idb_label, 0, 0, 10)
+        idb_box.pack_start(self.idb_selection, 1, 1, 0)
+        ca.add(idb_box)
+
+        self.add_buttons('OK', 1, 'Cancel', 2)
+
+        self.connect('response', self._write_config)
+        self.connect('delete-event', Gtk.main_quit)
+
+        self.show_all()
+
+        self.action_area.get_children()[0].grab_focus()  # set focus to OK button
+
+    @staticmethod
+    def _create_project_selection():
+        project_selection = Gtk.ComboBoxText()
+
+        ccs_path = confignator.get_option('paths', 'ccs')
+        ccs_path += '/' if not ccs_path.endswith('/') else ''
+        projects = glob.glob(ccs_path + PCPREFIX + '*')
+
+        projects = [p.replace(ccs_path + PCPREFIX, '').replace('.py', '') for p in projects]
+
+        for p in projects:
+            project_selection.append(p, p)
+
+        set_as = confignator.get_option('ccs-database', 'project')
+        project_selection.set_active_id(set_as)
+
+        return project_selection
+
+    @staticmethod
+    def _create_idb_selection():
+        idb_selection = Gtk.ComboBoxText()
+
+        mibs = scoped_session_idb.execute('show databases').fetchall()
+        mibs = [mib for mib, in mibs if mib.count('mib')]
+
+        for m in mibs:
+            idb_selection.append(m, m)
+
+        set_as = confignator.get_option('ccs-database', 'idb_schema')
+        idb_selection.set_active_id(set_as)
+
+        return idb_selection
+
+    def _write_config(self, widget, data):
+        if data == 1:
+
+            confignator.save_option('ccs-database', 'project', self.project_selection.get_active_text())
+            confignator.save_option('ccs-database', 'idb_schema', self.idb_selection.get_active_text())
+
+            self.destroy()
+            Gtk.main_quit()
+
+        else:
+            self.close()
+            sys.exit()