diff --git a/src/dec/lossless_dec.cc b/src/dec/lossless_dec.cc
index 0654a74..afb03ad 100644
--- a/src/dec/lossless_dec.cc
+++ b/src/dec/lossless_dec.cc
@@ -18,6 +18,8 @@
 // Author: Skal (pascal.massimino@gmail.com)
 
 #include <cassert>
+#include <cstddef>
+#include <cstdint>
 
 #include "src/common/global_params.h"
 #include "src/dec/lossless/losslessi_dec.h"
@@ -30,9 +32,6 @@
 
 namespace WP2 {
 
-//------------------------------------------------------------------------------
-// Lossless decoding.
-
 WP2Status LosslessDecode(const BitstreamFeatures& features,
                          const DecoderConfig& config,
                          const GlobalParams& gparams, ANSDec* const dec,
@@ -55,3 +54,29 @@
 }
 
 }  // namespace WP2
+
+//------------------------------------------------------------------------------
+
+int WP2Parse(const uint8_t* encoded_bytes, size_t num_encoded_bytes,
+             uint32_t* width, uint32_t* height) {
+  WP2::BitstreamFeatures features;
+  WP2Status status = features.Read(encoded_bytes, num_encoded_bytes);
+  if (status != WP2_STATUS_OK) {
+    return static_cast<int>(status);
+  }
+  *width = features.raw_width;
+  *height = features.raw_height;
+  return static_cast<int>(WP2_STATUS_OK);
+}
+
+int WP2DecodeRgb8(const uint8_t* encoded_bytes, size_t num_encoded_bytes,
+                  uint32_t width, uint32_t height, uint8_t* rgb,
+                  uint32_t stride) {
+  WP2::ArgbBuffer buffer(WP2_RGB_24);
+  const WP2Status status = buffer.SetExternal(width, height, rgb, stride);
+  if (status != WP2_STATUS_OK) {
+    return static_cast<int>(status);
+  }
+  return static_cast<int>(
+      WP2::Decode(encoded_bytes, num_encoded_bytes, &buffer));
+}
diff --git a/src/enc/lossless_enc.cc b/src/enc/lossless_enc.cc
index 23557d9..eec871d 100644
--- a/src/enc/lossless_enc.cc
+++ b/src/enc/lossless_enc.cc
@@ -14,18 +14,19 @@
 // -----------------------------------------------------------------------------
 //
 // WP2 lossless encoding.
-//
+
+#include <cstddef>
+#include <cstdint>
 
 #include "src/enc/lossless/losslessi_enc.h"
 #include "src/enc/tile_enc.h"
 #include "src/utils/ans_enc.h"
 #include "src/utils/utils.h"
 #include "src/wp2/base.h"
+#include "src/wp2/encode.h"
 
 namespace WP2 {
 
-// -----------------------------------------------------------------------------
-
 WP2Status TileEncoder::LosslessEncode(ANSEnc* const enc) {
   WP2_CHECK_STATUS(WP2L::EncodeImage(
       *config_, tile_->rgb_input, tiles_layout_->gparams->has_alpha_,
@@ -33,6 +34,33 @@
   return enc->GetStatus();
 }
 
-// -----------------------------------------------------------------------------
-
 }  // namespace WP2
+
+//------------------------------------------------------------------------------
+
+int WP2EncodeLosslessRgb8(uint32_t width, uint32_t height, const uint8_t* rgb,
+                          uint32_t stride, int effort, uint8_t*& encoded_bytes,
+                          size_t& num_encoded_bytes) {
+  WP2::ArgbBuffer buffer(WP2_RGB_24);
+  WP2Status status =
+      buffer.SetExternal(width, height, const_cast<uint8_t*>(rgb), stride);
+  if (status != WP2_STATUS_OK) {
+    return static_cast<int>(status);
+  }
+  WP2::EncoderConfig config;
+  config.quality = config.alpha_quality = 100;
+  config.keep_unmultiplied = true;
+  config.effort = effort;
+  WP2::MemoryWriter writer;
+  status = WP2::Encode(buffer, &writer, config);
+  if (status != WP2_STATUS_OK) {
+    return static_cast<int>(status);
+  }
+  encoded_bytes = writer.mem_;
+  num_encoded_bytes = writer.size_;
+  writer.mem_ = nullptr;
+  writer.size_ = 0;
+  return static_cast<int>(WP2_STATUS_OK);
+}
+
+void WP2Release(uint8_t* encoded_bytes) { WP2Free(encoded_bytes); }
diff --git a/src/enc/main_enc.cc b/src/enc/main_enc.cc
index af0c32a..9d17db9 100644
--- a/src/enc/main_enc.cc
+++ b/src/enc/main_enc.cc
@@ -292,6 +292,13 @@
 
   WP2_CHECK_OK(config.IsValid(), WP2_STATUS_INVALID_CONFIGURATION);
 
+  if (input.format() != WP2_Argb_32 && input.format() != WP2_ARGB_32 &&
+      input.format() != WP2_Argb_38) {
+    ArgbBuffer converted(WP2IsPremultiplied(input.format()) ? WP2_Argb_32
+                                                            : WP2_ARGB_32);
+    WP2_CHECK_STATUS(converted.ConvertFrom(input));
+    return Encode(converted, output, config, picture_hint);
+  }
   WP2_CHECK_OK(
       input.format() == WP2_Argb_32 || input.format() == WP2_ARGB_32 ||
           (input.format() == WP2_Argb_38 && config.quality == kMaxQuality),
diff --git a/src/wp2/decode.h b/src/wp2/decode.h
index d84281d..6cb066b 100644
--- a/src/wp2/decode.h
+++ b/src/wp2/decode.h
@@ -141,7 +141,7 @@
        const DecoderConfig& config = DecoderConfig::kDefault);
 
 //------------------------------------------------------------------------------
-// Specialized call
+// Specialized calls
 
 // Decodes the image bitstream in '*input_data' directly into the pre-allocated
 // buffer 'output_buffer'. The maximum storage available in this buffer is
@@ -405,4 +405,14 @@
 
 }  // namespace WP2
 
+//------------------------------------------------------------------------------
+// Simple signatures for language interoperability
+
+int WP2Parse(const uint8_t* encoded_bytes, size_t num_encoded_bytes,
+             uint32_t* width, uint32_t* height);
+
+int WP2DecodeRgb8(const uint8_t* encoded_bytes, size_t num_encoded_bytes,
+                        uint32_t width, uint32_t height, uint8_t* rgb,
+                        uint32_t stride);
+
 #endif /* WP2_WP2_DECODE_H_ */
diff --git a/src/wp2/encode.h b/src/wp2/encode.h
index cb3e781..8f9fa28 100644
--- a/src/wp2/encode.h
+++ b/src/wp2/encode.h
@@ -260,4 +260,18 @@
 
 }  // namespace WP2
 
+//------------------------------------------------------------------------------
+// Simple signatures for language interoperability
+
+// Encodes the image of 'width' by 'height' 'rgb' pixels in WP2_RGB_24 format.
+// 'stride' is the number of samples to go from one row to the next.
+// 'effort' has the same meaning as in WP2::EncoderConfig.
+// Remember to call WP2Release() on the returned 'encoded_bytes' pointer after
+// using or copying it.
+int WP2EncodeLosslessRgb8(uint32_t width, uint32_t height, const uint8_t* rgb,
+                          uint32_t stride, int effort, uint8_t*& encoded_bytes,
+                          size_t& num_encoded_bytes);
+
+void WP2Release(uint8_t* encoded_bytes);
+
 #endif /* WP2_WP2_ENCODE_H_ */
diff --git a/tests/test_api.cc b/tests/test_api.cc
index f401756..dbae6cb 100644
--- a/tests/test_api.cc
+++ b/tests/test_api.cc
@@ -22,6 +22,7 @@
 #include "src/wp2/decode.h"
 #include "src/wp2/encode.h"
 #include "src/wp2/format_constants.h"
+#include "gtest/gtest.h"
 
 namespace WP2 {
 namespace {
@@ -71,7 +72,7 @@
       ((uint8_t*)input.GetRow(0))[i] = (uint8_t)0xFF;
     }
     const WP2Status status = Encode(input, &output);
-    if (format == WP2_Argb_32 || format == WP2_ARGB_32) {
+    if (format != WP2_Argb_38) {
       ASSERT_WP2_OK(status);
     } else {
       ASSERT_EQ(status, WP2_STATUS_INVALID_COLORSPACE);
