diff --git a/app/src/main/java/io/noties/markwon/app/App.java b/app/src/main/java/io/noties/markwon/app/App.java
index ce64314a..0b8bced2 100644
--- a/app/src/main/java/io/noties/markwon/app/App.java
+++ b/app/src/main/java/io/noties/markwon/app/App.java
@@ -4,8 +4,8 @@ import android.app.Application;
 import android.content.Context;
 import android.support.annotation.NonNull;
 
-import ru.noties.debug.AndroidLogDebugOutput;
-import ru.noties.debug.Debug;
+import io.noties.debug.AndroidLogDebugOutput;
+import io.noties.debug.Debug;
 
 public class App extends Application {
 
diff --git a/app/src/main/java/io/noties/markwon/app/MainActivity.java b/app/src/main/java/io/noties/markwon/app/MainActivity.java
index 85594e59..4aa34b47 100644
--- a/app/src/main/java/io/noties/markwon/app/MainActivity.java
+++ b/app/src/main/java/io/noties/markwon/app/MainActivity.java
@@ -13,7 +13,7 @@ import android.widget.TextView;
 import javax.inject.Inject;
 
 import io.noties.markwon.Markwon;
-import ru.noties.debug.Debug;
+import io.noties.debug.Debug;
 
 public class MainActivity extends Activity {
 
diff --git a/app/src/main/java/io/noties/markwon/app/MarkdownLoader.java b/app/src/main/java/io/noties/markwon/app/MarkdownLoader.java
index b08d8d25..05aaa5fc 100644
--- a/app/src/main/java/io/noties/markwon/app/MarkdownLoader.java
+++ b/app/src/main/java/io/noties/markwon/app/MarkdownLoader.java
@@ -24,7 +24,7 @@ import okhttp3.OkHttpClient;
 import okhttp3.Request;
 import okhttp3.Response;
 import okhttp3.ResponseBody;
-import ru.noties.debug.Debug;
+import io.noties.debug.Debug;
 
 @ActivityScope
 public class MarkdownLoader {
diff --git a/app/src/main/java/io/noties/markwon/app/MarkdownRenderer.java b/app/src/main/java/io/noties/markwon/app/MarkdownRenderer.java
index a924cedd..667ef6a4 100644
--- a/app/src/main/java/io/noties/markwon/app/MarkdownRenderer.java
+++ b/app/src/main/java/io/noties/markwon/app/MarkdownRenderer.java
@@ -33,7 +33,7 @@ import io.noties.markwon.syntax.Prism4jThemeDefault;
 import io.noties.markwon.syntax.SyntaxHighlightPlugin;
 import io.noties.markwon.urlprocessor.UrlProcessor;
 import io.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute;
-import ru.noties.debug.Debug;
+import io.noties.debug.Debug;
 import ru.noties.prism4j.Prism4j;
 
 @ActivityScope
diff --git a/build.gradle b/build.gradle
index f34a6c05..17105439 100644
--- a/build.gradle
+++ b/build.gradle
@@ -69,8 +69,8 @@ ext {
             'jlatexmath-android'      : 'ru.noties:jlatexmath-android:0.1.0',
             'okhttp'                  : 'com.squareup.okhttp3:okhttp:3.9.0',
             'prism4j'                 : 'ru.noties:prism4j:1.1.0',
-            'debug'                   : 'ru.noties:debug:3.0.0@jar',
-            'adapt'                   : 'ru.noties:adapt:1.1.0',
+            'debug'                   : 'io.noties:debug:5.0.0@jar',
+            'adapt'                   : 'io.noties:adapt:2.0.0',
             'dagger'                  : "com.google.dagger:dagger:$daggerVersion",
             'picasso'                 : 'com.squareup.picasso:picasso:2.71828',
             'glide'                   : 'com.github.bumptech.glide:glide:4.9.0'
diff --git a/sample/src/main/java/io/noties/markwon/sample/MainActivity.java b/sample/src/main/java/io/noties/markwon/sample/MainActivity.java
index 9348f6bf..4d9bee65 100644
--- a/sample/src/main/java/io/noties/markwon/sample/MainActivity.java
+++ b/sample/src/main/java/io/noties/markwon/sample/MainActivity.java
@@ -8,20 +8,20 @@ import android.support.annotation.NonNull;
 import android.support.annotation.VisibleForTesting;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
-import android.view.View;
 
-import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.List;
 
+import io.noties.adapt.Adapt;
+import io.noties.adapt.Item;
+import io.noties.debug.AndroidLogDebugOutput;
+import io.noties.debug.Debug;
 import io.noties.markwon.Markwon;
 import io.noties.markwon.sample.basicplugins.BasicPluginsActivity;
 import io.noties.markwon.sample.core.CoreActivity;
 import io.noties.markwon.sample.customextension.CustomExtensionActivity;
 import io.noties.markwon.sample.latex.LatexActivity;
 import io.noties.markwon.sample.recycler.RecyclerActivity;
-import ru.noties.adapt.Adapt;
-import ru.noties.adapt.OnClickViewProcessor;
-import ru.noties.debug.AndroidLogDebugOutput;
-import ru.noties.debug.Debug;
 
 public class MainActivity extends Activity {
 
@@ -38,21 +38,20 @@ public class MainActivity extends Activity {
         // here we are creating as core markwon (no additional plugins are registered)
         final Markwon markwon = Markwon.create(this);
 
-        final Adapt<SampleItem> adapt = Adapt.builder(SampleItem.class)
-                .include(SampleItem.class, new SampleItemView(markwon), new OnClickViewProcessor<SampleItem>() {
-                    @Override
-                    public void onClick(@NonNull SampleItem item, @NonNull View view) {
-                        showSample(item);
-                    }
-                })
-                .build();
-        adapt.setItems(Arrays.asList(SampleItem.values()));
+        final Adapt adapt = Adapt.create();
+
+        final List<Item> items = new ArrayList<>();
+        final SampleItem.OnClickListener onClickListener = this::showSample;
+        for (Sample sample : Sample.values()) {
+            items.add(new SampleItem(sample, markwon, onClickListener));
+        }
+        adapt.setItems(items);
 
         final RecyclerView recyclerView = findViewById(R.id.recycler_view);
         recyclerView.setLayoutManager(new LinearLayoutManager(this));
         recyclerView.setHasFixedSize(true);
         recyclerView.addItemDecoration(createSampleItemDecoration());
-        recyclerView.setAdapter(adapt.recyclerViewAdapter());
+        recyclerView.setAdapter(adapt);
     }
 
     @NonNull
@@ -66,12 +65,12 @@ public class MainActivity extends Activity {
         );
     }
 
-    private void showSample(@NonNull SampleItem item) {
+    private void showSample(@NonNull Sample item) {
         startActivity(sampleItemIntent(this, item));
     }
 
     @VisibleForTesting
-    static Intent sampleItemIntent(@NonNull Context context, @NonNull SampleItem item) {
+    static Intent sampleItemIntent(@NonNull Context context, @NonNull Sample item) {
 
         final Class<? extends Activity> activity;
 
diff --git a/sample/src/main/java/io/noties/markwon/sample/Sample.java b/sample/src/main/java/io/noties/markwon/sample/Sample.java
new file mode 100644
index 00000000..8e20c80d
--- /dev/null
+++ b/sample/src/main/java/io/noties/markwon/sample/Sample.java
@@ -0,0 +1,30 @@
+package io.noties.markwon.sample;
+
+import android.support.annotation.StringRes;
+
+public enum Sample {
+
+    // all usages of markwon without plugins (parse, render, setMarkwon, etc)
+    CORE(R.string.sample_core),
+
+    BASIC_PLUGINS(R.string.sample_basic_plugins),
+
+    LATEX(R.string.sample_latex),
+
+    CUSTOM_EXTENSION(R.string.sample_custom_extension),
+
+    RECYCLER(R.string.sample_recycler),
+
+    ;
+
+    private final int textResId;
+
+    Sample(@StringRes int textResId) {
+        this.textResId = textResId;
+    }
+
+    @StringRes
+    public int textResId() {
+        return textResId;
+    }
+}
diff --git a/sample/src/main/java/io/noties/markwon/sample/SampleItem.java b/sample/src/main/java/io/noties/markwon/sample/SampleItem.java
index 0c7f8b86..57266e49 100644
--- a/sample/src/main/java/io/noties/markwon/sample/SampleItem.java
+++ b/sample/src/main/java/io/noties/markwon/sample/SampleItem.java
@@ -1,30 +1,79 @@
 package io.noties.markwon.sample;
 
-import android.support.annotation.StringRes;
+import android.support.annotation.NonNull;
+import android.text.Spanned;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
 
-public enum SampleItem {
+import io.noties.adapt.Item;
+import io.noties.markwon.Markwon;
+import io.noties.markwon.utils.NoCopySpannableFactory;
 
-    // all usages of markwon without plugins (parse, render, setMarkwon, etc)
-    CORE(R.string.sample_core),
+class SampleItem extends Item<SampleItem.SampleHolder> {
 
-    BASIC_PLUGINS(R.string.sample_basic_plugins),
-
-    LATEX(R.string.sample_latex),
-
-    CUSTOM_EXTENSION(R.string.sample_custom_extension),
-
-    RECYCLER(R.string.sample_recycler),
-
-    ;
-
-    private final int textResId;
-
-    SampleItem(@StringRes int textResId) {
-        this.textResId = textResId;
+    interface OnClickListener {
+        void onClick(@NonNull Sample sample);
     }
 
-    @StringRes
-    public int textResId() {
-        return textResId;
+    private final Sample sample;
+
+    private final Markwon markwon;
+
+    private final OnClickListener onClickListener;
+
+    // instance specific cache
+    private Spanned cache;
+
+    SampleItem(@NonNull Sample sample, @NonNull Markwon markwon, @NonNull OnClickListener onClickListener) {
+        super(sample.ordinal());
+        this.sample = sample;
+        this.markwon = markwon;
+        this.onClickListener = onClickListener;
+    }
+
+    @NonNull
+    @Override
+    public SampleHolder createHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {
+
+        final SampleHolder holder = new SampleHolder(inflater.inflate(
+                R.layout.adapt_sample_item,
+                parent,
+                false));
+
+        // set Spannable.Factory so when TextView will receive a new content
+        // it won't create new Spannable and copy all the spans but instead
+        // re-use existing Spannable thus improving performance
+        holder.textView.setSpannableFactory(NoCopySpannableFactory.getInstance());
+
+        return holder;
+    }
+
+    @Override
+    public void render(@NonNull SampleHolder holder) {
+
+        // retrieve an item from cache or create new one
+        // simple lazy loading pattern (cache on first call then re-use)
+        Spanned spanned = this.cache;
+        if (spanned == null) {
+            spanned = cache = markwon.toMarkdown(
+                    holder.textView.getResources().getString(sample.textResId()));
+        }
+
+        holder.textView.setText(spanned);
+
+        holder.itemView.setOnClickListener(v -> onClickListener.onClick(sample));
+    }
+
+    static class SampleHolder extends Item.Holder {
+
+        final TextView textView;
+
+        SampleHolder(@NonNull View view) {
+            super(view);
+
+            this.textView = requireView(R.id.text);
+        }
     }
 }
diff --git a/sample/src/main/java/io/noties/markwon/sample/SampleItemView.java b/sample/src/main/java/io/noties/markwon/sample/SampleItemView.java
deleted file mode 100644
index fa2a202e..00000000
--- a/sample/src/main/java/io/noties/markwon/sample/SampleItemView.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package io.noties.markwon.sample;
-
-import android.support.annotation.NonNull;
-import android.text.Spannable;
-import android.text.Spanned;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import java.util.EnumMap;
-
-import io.noties.markwon.Markwon;
-import io.noties.markwon.utils.NoCopySpannableFactory;
-import ru.noties.adapt.Holder;
-import ru.noties.adapt.ItemView;
-
-class SampleItemView extends ItemView<SampleItem, SampleItemView.SampleHolder> {
-
-    private final Markwon markwon;
-
-    // instance specific factory
-    private final Spannable.Factory factory;
-
-    // instance specific cache
-    private final EnumMap<SampleItem, Spanned> cache;
-
-    SampleItemView(@NonNull Markwon markwon) {
-        this.markwon = markwon;
-        this.factory = NoCopySpannableFactory.getInstance();
-        this.cache = new EnumMap<>(SampleItem.class);
-    }
-
-    @NonNull
-    @Override
-    public SampleHolder createHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) {
-
-        final SampleHolder holder = new SampleHolder(inflater.inflate(
-                R.layout.adapt_sample_item,
-                parent,
-                false));
-
-        // set Spannable.Factory so when TextView will receive a new content
-        // it won't create new Spannable and copy all the spans but instead
-        // re-use existing Spannable thus improving performance
-        holder.textView.setSpannableFactory(factory);
-
-        return holder;
-    }
-
-    @Override
-    public void bindHolder(@NonNull SampleHolder holder, @NonNull SampleItem item) {
-
-        // retrieve an item from cache or create new one
-        // simple lazy loading pattern (cache on first call then re-use)
-        Spanned spanned = cache.get(item);
-        if (spanned == null) {
-            spanned = markwon.toMarkdown(context(holder).getString(item.textResId()));
-            cache.put(item, spanned);
-        }
-
-        holder.textView.setText(spanned);
-    }
-
-    static class SampleHolder extends Holder {
-
-        final TextView textView;
-
-        SampleHolder(@NonNull View view) {
-            super(view);
-
-            this.textView = requireView(R.id.text);
-        }
-    }
-}
diff --git a/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java b/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java
index 2c4f5b4d..077bf967 100644
--- a/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java
+++ b/sample/src/main/java/io/noties/markwon/sample/recycler/RecyclerActivity.java
@@ -32,8 +32,8 @@ import io.noties.markwon.recycler.table.TableEntryPlugin;
 import io.noties.markwon.sample.R;
 import io.noties.markwon.urlprocessor.UrlProcessor;
 import io.noties.markwon.urlprocessor.UrlProcessorRelativeToAbsolute;
-import ru.noties.debug.AndroidLogDebugOutput;
-import ru.noties.debug.Debug;
+import io.noties.debug.AndroidLogDebugOutput;
+import io.noties.debug.Debug;
 
 public class RecyclerActivity extends Activity {
 
diff --git a/sample/src/test/java/io/noties/markwon/sample/MainActivityTest.java b/sample/src/test/java/io/noties/markwon/sample/MainActivityTest.java
index f5f197e9..15694be2 100644
--- a/sample/src/test/java/io/noties/markwon/sample/MainActivityTest.java
+++ b/sample/src/test/java/io/noties/markwon/sample/MainActivityTest.java
@@ -17,7 +17,7 @@ public class MainActivityTest {
     @Test
     public void all_sample_items_have_activity_associated() {
         final Context context = RuntimeEnvironment.application;
-        for (SampleItem item : SampleItem.values()) {
+        for (Sample item : Sample.values()) {
             // we assert as not null, but in case of an error this method should throw
             assertNotNull(MainActivity.sampleItemIntent(context, item));
         }