diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Revision history for filters-basic
+
+## 0.1.0.0 -- 2020-12-31
+
+* First version. Released on an unsuspecting world.
diff --git a/Data/Filters/Basic.hs b/Data/Filters/Basic.hs
new file mode 100644
--- /dev/null
+++ b/Data/Filters/Basic.hs
@@ -0,0 +1,62 @@
+-- |
+-- Module      :  Data.Filters.Basic
+-- Copyright   :  (c) OleksandrZhabenko 2020
+-- License     :  MIT
+-- Stability   :  Experimental
+-- Maintainer  :  olexandr543@yahoo.com
+--
+-- A module allows to change the structure of the function output for the functions of
+-- elements from 'RealFrac' class. At the moment only the equal intervals are supported.
+-- Has basic functions for the filters. Is taken from the @uniqueness-periods-vector-filters@ package
+-- that is intended to be rewritten. These functions are basic for it and for its successor,
+-- @phonetic-languages-filters-array@ package.
+
+module Data.Filters.Basic (
+  -- * One interval used
+  intervalNRealFrac
+  , zero2One
+  , unsafeTransfer1I5
+  , transfer1IEq3
+) where
+
+-- | Given the minimum and maximum elements, a quantity of equal intervals, and an element in between the first two arguments (or equal to one of them), finds out the
+-- index of the interval, to which the element belongs (starting from 1). The minimum element belongs to the interval with the index 1.
+intervalNRealFrac
+  :: RealFrac b => b
+  -> b
+  -> Int
+  -> b
+  -> Int
+intervalNRealFrac minE maxE n x
+ | maxE == minE = ceiling (0.5 * fromIntegral n)
+ | otherwise = zero2One . ceiling $ fromIntegral n * (x - minE) / (maxE - minE)
+{-# INLINE intervalNRealFrac #-}
+
+zero2One :: Int -> Int
+zero2One x = if x == 0 then 1 else x
+{-# INLINE zero2One #-}
+
+-- | Moves (if needed) the given value so that its result divides the new [min..max] interval in the same proportion as the starting one. Is intended to be used
+-- for the arguments satisfying some additional constraints, but they are not checked (hence, its name prefix \"unsafe\"). For example, the second argument must be
+-- greater than the first one, the fourth -- than the third one, and the fifth must be located in between the first two. Then the result is also located in between
+-- the third and fourth arguments similarly.
+unsafeTransfer1I5
+  :: RealFrac b => b
+  -> b
+  -> b
+  -> b
+  -> b
+  -> b
+unsafeTransfer1I5 minE0 maxE0 minE1 maxE1 x
+ | minE0 == maxE0 = x
+ | otherwise = minE1 + (x - minE0) * (maxE1 - minE1) / (maxE0 - minE0)
+{-# INLINE unsafeTransfer1I5 #-}
+
+-- | A variant of the 'unsafeTransfer1I5' where the lengths of the both intervals (the old and the new ones) are equal.
+transfer1IEq3
+  :: RealFrac b => b
+  -> b
+  -> b
+  -> b
+transfer1IEq3 minE0 minE1 = (+ (minE1 - minE0))
+{-# INLINE transfer1IEq3 #-}
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2020 OleksandrZhabenko
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/filters-basic.cabal b/filters-basic.cabal
new file mode 100644
--- /dev/null
+++ b/filters-basic.cabal
@@ -0,0 +1,25 @@
+-- Initial filters-basic.cabal generated by cabal init.  For further
+-- documentation, see http://haskell.org/cabal/users-guide/
+
+name:                filters-basic
+version:             0.1.0.0
+synopsis:            Allows to change the structure of the function output.
+description:         Allows to change the structure of the function output for the functions of arguments whose data types have RealFrac instances. Has basic functions for the filters. Is taken from the uniqueness-periods-vector-filters package that is intended to be rewritten. These functions are basic for it and for its successor, phonetic-languages-filters-array package.
+homepage:            https://hackage.haskell.org/package/filters-basic
+license:             MIT
+license-file:        LICENSE
+author:              OleksandrZhabenko
+maintainer:          olexandr543@yahoo.com
+-- copyright:
+category:            Data
+build-type:          Simple
+extra-source-files:  CHANGELOG.md
+cabal-version:       >=1.10
+
+library
+  exposed-modules:     Data.Filters.Basic
+  -- other-modules:
+  -- other-extensions:
+  build-depends:       base >=4.7 && <5
+  -- hs-source-dirs:
+  default-language:    Haskell2010
