diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..1997072
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,8 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+LOCAL_PACKAGE_NAME := AmbientPlayHistoryProvider
+LOCAL_MODULE_TAGS := optional
+LOCAL_SDK_VERSION := system_current
+include $(BUILD_PACKAGE)
\ No newline at end of file
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
new file mode 100644
index 0000000..c3511ce
--- /dev/null
+++ b/AndroidManifest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.pixelexperience.ambient.play.history"
+    android:versionCode="1"
+    android:versionName="1.0">
+
+    <permission
+        android:name="org.pixelexperience.ambient.play.history.MANAGE_HISTORY"
+        android:protectionLevel="signature|privileged" />
+
+    <uses-sdk
+        android:minSdkVersion="28"
+        android:targetSdkVersion="28" />
+
+    <application
+        android:allowBackup="false"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name">
+        <provider
+            android:name=".AmbientPlayHistoryProvider"
+            android:authorities="org.pixelexperience.ambient.play.history.provider"
+            android:exported="true"
+            android:readPermission="org.pixelexperience.ambient.play.history.MANAGE_HISTORY" />
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..9e6ed31
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher.png b/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c589166
--- /dev/null
+++ b/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_launcher.png b/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bd20a94
--- /dev/null
+++ b/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_launcher.png b/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..fef5de9
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_launcher.png b/res/drawable-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..576a921
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
new file mode 100644
index 0000000..4ca6d30
--- /dev/null
+++ b/res/values/custom_strings.xml
@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">Now Playing Provider</string>
+</resources>
diff --git a/src/org/pixelexperience/ambient/play/history/AmbientPlayHistoryDb.java b/src/org/pixelexperience/ambient/play/history/AmbientPlayHistoryDb.java
new file mode 100644
index 0000000..b3e60cd
--- /dev/null
+++ b/src/org/pixelexperience/ambient/play/history/AmbientPlayHistoryDb.java
@@ -0,0 +1,42 @@
+package org.pixelexperience.ambient.play.history;
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+public class AmbientPlayHistoryDb extends SQLiteOpenHelper {
+
+    private static final String DATABASE_NAME = "AmbientPlayHistory";
+    private static final int DATABASE_VERSION = 1;
+
+    static final String KEY_ID = "_id";
+    static final String KEY_TIMESTAMP = "ts";
+    static final String KEY_ARTIST = "artist";
+    static final String KEY_SONG = "song";
+
+    static final String SQLITE_TABLE = "matched_songs";
+
+    private static final String DATABASE_CREATE =
+            "CREATE TABLE if not exists " + SQLITE_TABLE + " (" +
+                    KEY_ID + " integer PRIMARY KEY autoincrement," +
+                    KEY_TIMESTAMP + "," +
+                    KEY_SONG + "," +
+                    KEY_ARTIST + ");";
+
+
+    AmbientPlayHistoryDb(Context context) {
+        super(context, DATABASE_NAME, null, DATABASE_VERSION);
+    }
+
+    @Override
+    public void onCreate(SQLiteDatabase db) {
+        db.execSQL(DATABASE_CREATE);
+    }
+
+    @Override
+    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        db.execSQL("DROP TABLE IF EXISTS " + SQLITE_TABLE);
+        onCreate(db);
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/org/pixelexperience/ambient/play/history/AmbientPlayHistoryProvider.java b/src/org/pixelexperience/ambient/play/history/AmbientPlayHistoryProvider.java
new file mode 100644
index 0000000..ae963eb
--- /dev/null
+++ b/src/org/pixelexperience/ambient/play/history/AmbientPlayHistoryProvider.java
@@ -0,0 +1,116 @@
+package org.pixelexperience.ambient.play.history;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.UriMatcher;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteQueryBuilder;
+import android.net.Uri;
+import android.text.TextUtils;
+
+public class AmbientPlayHistoryProvider extends ContentProvider {
+    private static final int SONGS = 1;
+    private static final int SONG = 2;
+    private static String MANAGE_HISTORY_PERMISSION = "org.pixelexperience.ambient.play.history.MANAGE_HISTORY";
+    private static final String AUTHORITY = "org.pixelexperience.ambient.play.history.provider";
+    private static final Uri CONTENT_URI =
+            Uri.parse("content://" + AUTHORITY + "/songs");
+    private static final String[] PROJECTION = {AmbientPlayHistoryDb.KEY_ID, AmbientPlayHistoryDb.KEY_TIMESTAMP, AmbientPlayHistoryDb.KEY_SONG, AmbientPlayHistoryDb.KEY_ARTIST};
+    private static final UriMatcher uriMatcher;
+
+    static {
+        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+        uriMatcher.addURI(AUTHORITY, "songs", SONGS);
+        uriMatcher.addURI(AUTHORITY, "songs/#", SONG);
+    }
+
+    private AmbientPlayHistoryDb dbHelper;
+
+    @Override
+    public boolean onCreate() {
+        dbHelper = new AmbientPlayHistoryDb(getContext());
+        return false;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        return null;
+    }
+
+    @Override
+    public Uri insert(Uri uri, ContentValues values) {
+        SQLiteDatabase db = dbHelper.getWritableDatabase();
+        switch (uriMatcher.match(uri)) {
+            case SONGS:
+                //do nothing
+                break;
+            default:
+                throw new IllegalArgumentException("Unsupported URI: " + uri);
+        }
+        long isLastSongAlreadyMatched = isLastSongAlreadyMatched(values);
+        long id = isLastSongAlreadyMatched != -1 ? isLastSongAlreadyMatched : db.insert(AmbientPlayHistoryDb.SQLITE_TABLE, null, values);
+        return Uri.parse(CONTENT_URI + "/" + id);
+    }
+
+    private int isLastSongAlreadyMatched(ContentValues values) {
+        try (Cursor cursor = query(AmbientPlayHistoryProvider.CONTENT_URI, AmbientPlayHistoryProvider.PROJECTION, null, null, null)) {
+            if (cursor != null) {
+                if (cursor.moveToFirst()) {
+                    return values.get(AmbientPlayHistoryDb.KEY_SONG).equals(cursor.getString(2)) && values.get(AmbientPlayHistoryDb.KEY_ARTIST).equals(cursor.getString(3)) ? cursor.getInt(0) : -1;
+                }
+            }
+        }
+        return -1;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection,
+                        String[] selectionArgs, String sortOrder) {
+
+        SQLiteDatabase db = dbHelper.getWritableDatabase();
+        SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
+        queryBuilder.setTables(AmbientPlayHistoryDb.SQLITE_TABLE);
+
+        switch (uriMatcher.match(uri)) {
+            case SONGS:
+                break;
+            case SONG:
+                String id = uri.getPathSegments().get(1);
+                queryBuilder.appendWhere(AmbientPlayHistoryDb.KEY_ID + "=" + id);
+                break;
+            default:
+                throw new IllegalArgumentException("Unsupported URI: " + uri);
+        }
+
+        return queryBuilder.query(db, projection, selection,
+                selectionArgs, null, null, AmbientPlayHistoryDb.KEY_ID + " DESC");
+
+    }
+
+    @Override
+    public int delete(Uri uri, String selection, String[] selectionArgs) {
+
+        SQLiteDatabase db = dbHelper.getWritableDatabase();
+        switch (uriMatcher.match(uri)) {
+            case SONGS:
+                break;
+            case SONG:
+                String id = uri.getPathSegments().get(1);
+                selection = AmbientPlayHistoryDb.KEY_ID + "=" + id
+                        + (!TextUtils.isEmpty(selection) ?
+                        " AND (" + selection + ')' : "");
+                break;
+            default:
+                throw new IllegalArgumentException("Unsupported URI: " + uri);
+        }
+        return db.delete(AmbientPlayHistoryDb.SQLITE_TABLE, selection, selectionArgs);
+    }
+
+    @Override
+    public int update(Uri uri, ContentValues values, String selection,
+                      String[] selectionArgs) {
+        return 0;
+    }
+
+}
